公司买了域名,解析到公网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:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;

-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

image.png

使用其他的DNS,如223.5.5.5

image.png

可见,使用不同的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

image.png

可以看到脚本能够正常接收参数,而且输出正确结果


三、zabbix自定义监控

zabbix自定义的监控,在官网上有详细说明。

本次监控方法使用zabbix_agent方式,agent端和server端运行在一台服务器上,自己调用自己的监控项。

首先将脚本保存在/etc/zabbix下。其实这个路径可以随意指定

image.png


然后配置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

如下所示:

zabbix上使用自定义监控项监控域名_第1张图片

说明:

  1. dns_xxxx.xxxx.xxxx.xxxx就是监控项名称,根据实际情况自定义

  2. [*]代表使用任何参数

  3. ,逗号后/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]" #在本机获取监控项,[ ]中的参数用,逗号隔开

image.png

通过如上步骤,证明自定义监控项配置成功


四、配置zabbix图形及告警

在zabbix网页中,新建主机,地址选择127.0.0.1本机,如下所示:

zabbix上使用自定义监控项监控域名_第2张图片

创建监控项,按照如下方式进行

zabbix上使用自定义监控项监控域名_第3张图片

说明:

1、监控项名称随意,我的方式是域名@DNS服务器,如[email protected],表示通过DNS服务器解析域名

2、监控项严格配置,不能出错 dns_xxx.xxxx.xxxxx.xxxx[xxx.xxxx.work,202.103.24.68] ,不同参数用,逗号分开。不要多写和少些参数,参数顺序也不能错

3、信息类型选择数字,方便生成图形,只有1和0

4、更新间隔,推荐修改5分钟即300s,减少影响


完成监控项后,检查监控项无报错信息,同时在最新数据中,能够获取信息,则说明监控项配置完成

zabbix上使用自定义监控项监控域名_第4张图片


配置图形,选择监控项

zabbix上使用自定义监控项监控域名_第5张图片

完成图形配置后,隔一段时间则能获取正确的图形

最后配置触发器,比较简单,就是当平均5分钟内获取的值为0时告警,合适调整警告级别

zabbix上使用自定义监控项监控域名_第6张图片

最后完成效果如下:

zabbix上使用自定义监控项监控域名_第7张图片


五、合理监控

因为自定监控项可以传递参数,理论上,我可以使用同一个监控项的不同参数的键值来进行组合监控,省时省力。

例如

[email protected]

[email protected]

根据自己条件,合理监控,保证监控效果最好,监控最准确


六、脚本优化

修改脚本,可以接受三个参数$1,$2,$3,分别代表域名,dns服务器,解析的ip地址

#!/bin/bash
A=$(dig $1 +time=3 +short @$2)
if [ ${A} = $3 ]
then
  echo 1 
else
  echo 0
fi