公司买了域名,解析到公网Ip 域名为xxx.xxxx.work,公网地址xxxx.xxxx.xxxx.xxxx,我们需要需要使用zabbix来监控域名解析是否正常,即域名能否解析到正确的公网地址,一旦解析错误,则告警。
思路:
1、使用不同的DNS都能够正确解析ip地址,如114.114.114.114,202.103.24.68
2、编写脚本,判断解析是否正确,正确则输出1,不正确输出0
2、zabbix上创建监控项,能够传递不同参数作为键值
3、生成图形,告警
一、dig
dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常,它可以通过指定不同的DNS服务器来解析域名
dig命令 (选项) (参数)
@<服务器地址>:指定进行域名解析的域名服务器;
-b
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的DNS数据类型;
-x
-4:使用IPv4;
-6:使用IPv6;
-h:显示指令帮助信息。
+time= :指定超时时间(秒)
+short :只显示解析ip地址,不显示其他信息
为了测试,以下为通过114.114.114.114解析www.163.com的地址来说明:
dig www.163.com +time=3 +short @114.114.114.114
使用其他的DNS,如223.5.5.5
可见,使用不同的dns服务器解析域名很有可能会得到不同的公网地址
二、脚本编写
我们需要脚本能够传递参数,参数就是域名和DNS服务器地址,同时判断解析的公网地址是否正确
#!/bin/bash #srcipt name= dns_xxxx.xxxx.xxxx.xxxx.sh A=$(dig $1 +time=3 +short @$2) if [ $"$A"x = 'xxxx.xxxx.xxxx.xxxx'x ] #此处为正确的公网ip then echo 1 else echo 0 fi
执行脚本进行测试
bash dns_xxxx.xxxx.xxxx.xxxx.sh xxx.xxxx.work 202.103.24.68
可以看到脚本能够正常接收参数,而且输出正确结果
三、zabbix自定义监控
zabbix自定义的监控,在官网上有详细说明。
本次监控方法使用zabbix_agent方式,agent端和server端运行在一台服务器上,自己调用自己的监控项。
首先将脚本保存在/etc/zabbix下。其实这个路径可以随意指定
然后配置zabbix_agentd.conf
vim /etc/zabbix/zabbix_agentd.conf
在286行,将UnsafeUserParameters=0修改为UnsafeUserParameters=1,表示使用自定义监控项
在297行(根据情况)添加
UserParameter=dns_xxxx.xxxx.xxxx.xxxx[*],/etc/zabbix/dns_xxxx.xxxx.xxxx.xxxx.sh $1 $2
如下所示:
说明:
dns_xxxx.xxxx.xxxx.xxxx就是监控项名称,根据实际情况自定义
[*]代表使用任何参数
,逗号后/etc/zabbix/dns_xxxx.xxxx.xxxxx.xxxxx.sh 代表脚本路径
4.$1 $2代表输入的参数
在完成配置后,重启zabbix-agent生效
systemctl restart zabbix-agent
我们还需要使用zabbix-get方法来获取监控项的值,看是否能够正常
zabbix_get -s 127.0.0.01 -p 10050 -k "dns_xxx.xxxx.xxxxx.xxxx[xxx.xxxx.work,202.103.24.68]" #在本机获取监控项,[ ]中的参数用,逗号隔开
通过如上步骤,证明自定义监控项配置成功
四、配置zabbix图形及告警
在zabbix网页中,新建主机,地址选择127.0.0.1本机,如下所示:
创建监控项,按照如下方式进行
说明:
1、监控项名称随意,我的方式是域名@DNS服务器,如[email protected],表示通过DNS服务器解析域名
2、监控项严格配置,不能出错 dns_xxx.xxxx.xxxxx.xxxx[xxx.xxxx.work,202.103.24.68] ,不同参数用,逗号分开。不要多写和少些参数,参数顺序也不能错
3、信息类型选择数字,方便生成图形,只有1和0
4、更新间隔,推荐修改5分钟即300s,减少影响
完成监控项后,检查监控项无报错信息,同时在最新数据中,能够获取信息,则说明监控项配置完成
配置图形,选择监控项
完成图形配置后,隔一段时间则能获取正确的图形
最后配置触发器,比较简单,就是当平均5分钟内获取的值为0时告警,合适调整警告级别
最后完成效果如下:
五、合理监控
因为自定监控项可以传递参数,理论上,我可以使用同一个监控项的不同参数的键值来进行组合监控,省时省力。
例如
根据自己条件,合理监控,保证监控效果最好,监控最准确
六、脚本优化
修改脚本,可以接受三个参数$1,$2,$3,分别代表域名,dns服务器,解析的ip地址
#!/bin/bash A=$(dig $1 +time=3 +short @$2) if [ ${A} = $3 ] then echo 1 else echo 0 fi