应用场景:1.公司的dns不太稳定,好几次因为解析问题导致的业务故障,我想将每个dns服务器的解析时间记录下来,结合监控系统发报警;
2.我们公司有自己的监控系统支持服务器post数据(json格式)到特定端口
现在如果不能解析,设置的解析时间为1000ms
cat dns_delay.sh
#!/bin/bash
#Author: ying
#Date & Time: 2017-06-06 13:13:00
#Description: Name server monitoring.
#userage: sh dns_delay.sh [xxx.xxx.com]
#目标域名
site=$1
site=${site:-}
#解析延时阈值
#expect=$2
#expect=${expect:-0.05}
#dns服务器地址
dnsnames=`cat /etc/resolv.conf|grep ^nameserver|awk -F ' ' '{print$2}'`
#查询本机所在节点
ns=`curl -s |awk -F '"' '{print$2}'`
#获取内网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
for dnsname in `echo $dnsnames`
do
#获取域名解析时间
# delay=`curl -o /dev/null -s -w %{time_namelookup} $site`
delay=`dig $site @$dnsname| grep Query |tail -1|cut -d ' ' -f 4`
if [ $? -eq 0 ]
then
msg=`echo [{ \
"\"name\"":"\"dns.delay\"",\
"\"tags\"":{\
"\"domain\"":"\"$site\"",\
"\"dnsserver\"":"\"$dnsname\"" \
},\
"\"value\"":"$delay " \
}]`
else
msg=`echo [{ \
"\"name\"":"\"dns.delay\"",\
"\"tags\"":{\
"\"domain\"":"\"$site\"",\
"\"dnsserver\"":"\"$dnsname\"" \
},\
"\"value\"":"1000" \
}]`
fi
curl -i -X POST -s -d "$msg"
done
exit 0
效果:
阅读(2414) | 评论(0) | 转发(0) |