为了方便公司内部访问jira、wiki等内网应用服务,我们搭建了DNS服务,为全公司提供域名解析服务,重要性可想而知,因此,有了监控的需求,这里记录下使用zabbix来监控dns的过程。
监控DNS分为三部分
- 端口监控(53)
- 日志监控(/var/log/messages中出现named.*fatal)
- 解析域名监控(脚本定时dig www.baidu.com)
监控实施:
为了方便迁移,结构清晰,使用创建模板,在模板中定义监控项(Items)、触发器(trigger),然后在主机中链接模板。这样以后再增加或者迁移dns服务,直接套用模板就行了。
端口监控
配置—模板–创建模板—-输入模板名称,然后点保存。
模板创建成功后,开始创建监控项:
配置—模板—DNS模板—-监控项—-创建监控项
填写名称、类型、键值,其他默认即可。创建完成后,点保存。
创建监控项,监控项可以去获取数据了。但是想要报警还需要添加触发器(trigger)来触发报警。
配置—-模板—DNS模板—触发器—创建触发器
日志监控
同样在DNS模板中创建日志的监控项。
这里需要重点说一下监控项中的:键值(key)
log[/var/log/messages,named.*fatal,,skip,]
zabbix的日志文件监控,它最主要的是监控日志文件中有没有某个字符串的表达式,对应日志轮转与否,zabbix都支持。
在配置Item的时候,类型选择Zabbix agent (active),这里主要需要配置的是键值(Key)。下面是监控日志的两种key——log和logtr。
log[/path/to/some/file,
监控原理及注意事项
1、Zabbix Server和Zabbix Agent会追踪日志文件的大小和最后修改时间,并且分别记录在字节计数器和最新的时间计数器中。
2、Agent会从上次读取日志的地方开始读取日志。
3、字节计数器和最新时间计数器的数据会被记录在Zabbix数据库,并且发送给Agent,这样能够保证Agent从上次停止的地方开始读取日志。
4、当日志文件大小小于字节计数器中的数字时,字节计数器会变为0,从头开始读取文件。
5、所有符合配置的文件,都会被监控。
6、一个目录下的多个文件如果修改时间相同,会按照字母顺序来读取。
7、到每个Update interval的时间时,Agent会检查一次目录下的文件。
8、Zabbix Agent每秒发送日志量,有一个日志行数上限,防止网络和CPU负载过高,这个数字在zabbix_agentd.conf中的MaxLinePerSecond。
9、在logtr中,正则表达式只对文件名有效,对文件目录无效。
好,配置好监控项后,我们来配置触发器:
表达式内容说明:如果监控项获取的数据中出现了fatal则为1(真),如果60s之内没数据,则为0(假),也就是说只有60s内出现了新数据,并且出现了fatal,这个时候触发器表达式成立,才会触发报警。
域名解析监控(dig)
测试DNS解析域名功能,这个zabbix自带的监控项已经无法实现了。这时需要我们来自定义监控项。
自定义监控的配置过程如下:
- 编写监控脚本,获取监控项的具体值
- 在zabbix_agentd.conf文件中定义UserParameter
- 在界面配置item
4.添加触发器(Trigger)
编写监控脚本
#!/bin/bash
URL=`dig www.baidu.com +time=3 +short @10.0.254.113|head -1`
# 以10.0.254.113为dns服务器,解析www.baidu.com 超时3s。
if [ $"$URL"x = 'www.a.shifen.com.'x ]
then
echo 1
else
echo 0
fi
判断得到的域名是不是百度的cname,这里要注意后边都有个x,这个是重点,如果dig命令得到的结果为空的话,就是x = 'www.a.shifen.com.x',但如果没有这个x,那么' ' = 'www.a.shifen.com.x' 这样会报错的。
在zabbix_agent.conf.d目录下创建一个zabbix_checkdns.conf的文件
cat /home/ddd/zabbix_agent/etc/zabbix_agentd.conf.d/zabbix_dns.conf
UserParameter=chk.dns[*],/bin/bash /home/ddd/zabbix_agent/etc/scripts/zabbix_checkdns.sh
chk.dns就是在添加监控项(items)时的键值(key),当zabbix配置chk.dns这个key的时候,就会执行后边配置的命令:/bin/bash /home/ddd/zabbix_agent/etc/scripts/zabbix_checkdns.sh,
而chk.dns[]表示[]可以接受参数,比如chk.dns[www.baidu.com,192.168.30.1],这时候执行脚本的时候就变成了 /bin/bash /home/ddd/zabbix_agent/etc/scripts/zabbix_checkdns.sh www.baidu.com 192.168.30.1,chk.dns[]中的值对应执行脚本的时候就会变成2.。。,
这个大家可以根据需求在自定义脚本的时候使用。
在界面配置items:
这个就非常简单了。
添加触发器
最近三次的值都为0,则触发器成立,触发报警。