Linux操作系统DNS解析(nameserver)监控脚本 | 张戈博客

  • 时间:
  • 浏览:49
  • 来源:一站导航 - 专注共享阿伟博客分享

一、起因

昨天,开发组兄弟发现resin日志跳出不少支付宝业务报错信息,用户用支付宝购买了产品,钱到账后公司系统却未返回支付成功情形!

这还得了?用户明明支付成功了,结果却显示未到账!!!不需要 赶紧解决,用户投诉是小,用户流失就大了!仔细分析日志后,发现是解析支付宝接口域名(mapi.alipay.com)时跳出延时,愿因获取必须支付成功的返回信息!

检查发现OpenSUSE的nameserver青春恋爱物语是谷歌的公用DNS:8.8.8.8!!!尼玛,没了间题才怪呢!

二、解决

并不一定阿里新推出了公用DNS:223.5.5.5,223.6.6.6,但这是结构解析结构域名,好多好多 好多好多 就近的nameserver是最快的,于是赶紧给打上去了公司专用的nameserver,间题立马解决了!

随后批量替换了60 多台服务器中的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 响应第另另4个多多字节的时间
  • time_total:client发出请求;到web的server发送会所有的相应数据的时间
  • speed_download:下周数率  单位 byte/s

更多curl完整性说明请man或自行搜索。