一、起因
昨天,开发组兄弟发现 resin 日志出现不少支付宝业务报错信息,用户用支付宝购买了产品,钱到账后公司系统却未返回支付成功状态!
这还得了?用户明明支付成功了,结果却显示未到账!!!必须赶紧解决,用户投诉是小,用户流失就大了!仔细分析日志后,发现是解析支付宝接口域名(mapi.alipay.com)时出现延时,导致获取不到支付成功的返回信息!
检查发现 OpenSUSE 的 nameserver 居然是谷歌的公用 DNS:8.8.8.8!!!尼玛,不出问题才怪呢!
二、解决
虽然阿里新推出了公用 DNS:223.5.5.5,223.6.6.6,但这是内部解析外部域名,所以就近的 nameserver 是最快的,于是赶紧给换成了公司专用的 nameserver,问题立马解决了!
然后批量替换了 200 多台服务器中的 nameserver 为 8.8.8.8 的问题系统,以绝后患。
三、绸缪
仔细考虑后,决定加上 nameserver 的相关监控:
①、编写脚本:
vim mon_nameserver
#!/bin/bash #Author: ZhangGe #Date & Time: 2014-06-24 12:22:40 #Description: Name server monitoring. #目标域名 site=$1 site=${site:-www.baidu.com} #解析延时阈值 expect=$2 expect=${expect:-0.05} #获取内网 IP 作为标示 InterIp() { ifconfigIP=`/sbin/ifconfig -a|awk '/10\./||/10\./||/11\./'|head -n 1|awk '{print $2}'|awk -F: '{print $2}'` ifconfigIP=`echo $ifconfigIP|grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` } InterIp #获取域名解析时间 delay=`curl -o /dev/null -s -w %{time_namelookup} $site` #比较与报警(sendmesg 是公用消息发送脚本) if [ $? -eq 0 ];then if [ `expr $delay \> $expect` == 1 ]; then /usr/local/t_mon/sendmesg.sh zhangge "$ifconfigIP NS Delay $delay s" fi else /usr/local/t_mon/sendmesg.sh zhagnge "$ifconfigIP Name Server Error" fi exit 0
②、加入任务计划:
crontab -e
#NameServer Check */5 * * * * /usr/local/t_mon/mon_nameserver.sh mapi.alipay.com 0.3
每五分钟执行一次,检查 mapi.alipay.com 的解析时长,若解析失败或时间大于 0.3s 则发送报警信息到监控 APP 上。 下面是将延时阈值设置为 0.001s 的测试报警截图:
四、附加
这个脚本只是用于特定情况,并非常用功能,仅供参考!脚本核心功能使用的是 curl 获取域名解析时长,下面简单的补充一下 curl 部分参数:
- time_namelookup:DNS 解析域名的时间
- time_commect:client 和 server 端建立 TCP 连接的时间
- time_starttransfer:从 client 发出请求;到 web 的 server 响应第一个字节的时间
- time_total:client 发出请求;到 web 的 server 发送会所有的相应数据的时间
- speed_download:下周速度 单位 byte/s
更多 curl 详细说明请 man 或自行搜索。
虽然有劫持,dns还是使用默认的好.
Linux默认的是没有DNS滴。
这就不知道了。那获取网络连接时的信息不是自动分配的吗?
你说的是PPOE拨号呢,这是自己配的外部IP。
linux也有吧,我记得直接查看dns配置文件里有设置的
那是人工添加的,在/etc/resolv.conf
我是忘了,记得以前搞时是要配置dns服务器的,就是修改这个配置文件
技术控~~
呵呵 技术大神啊 膜拜
又是Google后遗症。
影响面真特么大。
不明觉厉
这词我一般理解为贬义
哈哈,公用的DNS不解析阿里,上次我也遇到了
谷歌背墙害死一大片。
200台,大公司啊
说的不错
学习了
受教了