分布式监控系统之Zabbix网络发现
前文我们了解了zabbix的宏,自定义item和模板的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14013331.html;今天我们来了解下zabbix的网络发现功能;
1、为什么要使用网络发现功能呢?
我们知道使用zabbix监控系统去监控一个集群,通常我们会使用各种信道去对应server上采集数据,这意味着每台server上必须能够支持zabbix上定义的信道去采集数据;比如我们使用zabbix agent这种信道去server上采集数据,那么对应server上就必须安装好zabbix agent;其次配置zabbix agent告诉它zabbix server是谁;然后我们才可以在zabbix 的web界面上配置添加对应主机使用zabbix agent信道去采集数据;在集群环境节点和server数量不多的情况下我们手动添加也到不是什么难事,试想一下,如果我们监控的server有20台,甚至更多,这意味着我们手动去添加主机,然后链接模板需要重复做20次,甚至更多;很显然这不是我们想要的方式;那有没有什么方式能够帮助我们去自动添加主机,并链接模板呢?这就是我们使用zabbix网络发现功能的目的;简单说zabbix的网络发现功能,它能帮助我们在我们指定的网段内扫描主机,当扫描到对应网段有符合我们定义的扫描规则时,它就会触发一个discovery事件,而对应action监听到对应的事件发生后,就能触发action的操作,比如把某主机添加到zabbix,然后链接指定的模板等等;这样一来我们要想去监控一个集群,我们只需要定义怎么去发现主机的规则和监听对应discovery事件的action,就能够完成一个集群的快速监控;
2、zabbix网络发现它是怎么去发现主机的呢?
zabbix的网络发现功能是通过扫描我们指定的网段,当然扫描肯定是有判断条件的,不是说在指定网段里的所有主机都能满足;那它是怎么判断的呢?我们知道要想被zabbix所监控,必须满足对应server支持指定的信道和zabbix server进行通信,将指定的指标数据响应或发送给zabbix server;如果说zabbix使用一种机制给指定的主机发送指定信道的某种请求,如果对应server能够正常响应,那么我们就可以理解为对应server支持该信道和zabbix server进行通信,这样一来zabbix server 就可以把对应的server添加进来进行监控;简单讲zabbix discovery功能是通过zabbix server 向指定网段中的所有主机发送某种信道的某种请求,如果对应server能够正常响应,那么zabbix server 就认为对应server满足加入zabbix监控系统,此时zabbix server 就会触发一个discovery事件;对于该事件发生后该采取什么措施,这取决于我们定义的action的操作;
示例:配置使用zabbix 网络发现功能发现指定网段内的主机
创建网络发现规则
提示:在zabbix web 界面的configuration--->discovery菜单找到create discovery rule,点击进入创建discovery rule界面;
提示:以上配置表示在192.168.0.44-50这个网段进行ICMP ping操作,如果有主机响应,则触发discovery 事件;当然checks可以配置多个,比如zabbix agent,snmp,ssh ,telnet,ftp等等;使用zabbix agent去check,如果对应主机能够给予响应,则表示对应主机上安装的有zabbix agent,如果使用snmp去check,如果对应主机能够响应,这表示对应主机支持使用snmp信道去采集数据;总之使用什么方式去扫描,就意味着对应主机上必须支持对应方式和zabbix server通信;zabbix server才会触发一个discovery事件;意思就是根据某种check去扫描指定网段内的主机发现了某某主机支持这种方式;至于后续该怎么处理这个事件,则由对应的action来处理就好;
验证:看看对应网段是否有符合icmp ping的主机呢?
提示:在monitoring--->discovery菜单下选择我们刚才定义的test_discovery规则,然后点击apply,就能够查看对应符合test_discovery规则的主机;从上面结果可以看到符合test_discovery规则的主机有4台;
更改test_discovery规则使用zabbix agent方式来扫描指定网段的主机
提示:以上配置表示使用zabbix agent的方式来扫描指定网段主机;向指定网段内的主机发送请求zabbix 内建的key system.uname,如果对应主机能够给予响应,则zabbix server 就触发discovery事件;
现在看看test_discovery 是否能够发现主机呢?
提示:现在看就只有node04被发现了,其他的主机都没有发现,这说明node04上安装的有zabbix agent ;同理我们在node05上如果安装上zabbix agent,是不是node05也会被发现呢?
复制zabbix.repo文件到node05
[root@node03 ~]# scp /etc/yum.repos.d/zabbix.repo node05:/etc/yum.repos.d/ zabbix.repo 100% 242 205.5KB/s 00:00 [root@node03 ~]#
在node05上安装zabbix agent
[root@node05 ~]# yum install -y zabbix-agent
启动zabbix-agent
[root@node05 ~]# systemctl start zabbix-agent.service [root@node05 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10050 :::* [root@node05 ~]#
再次查看zabbix server是否发现了node05呢?
提示:很显然没有发现node05;
手动在zabbix server上使用zabbix_get命令来获取node05上的system.uname看看是否能够正常获取?
[root@node03 ~]# zabbix_get -s node05.test.org -k 'system.uname' zabbix_get [1902]: Check access restrictions in Zabbix agent configuration [root@node03 ~]#
提示:它这里提示我们检查对应agent的配置;
在node05上配置zabbix agent,将server指向zabbix server ,然后重启zabbix agent
[root@node05 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf Server=192.168.0.43 ServerActive=127.0.0.1 [root@node05 ~]# systemctl restart zabbix-agent.service [root@node05 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10050 :::* [root@node05 ~]#
看看在node3上使用zabbix_get命令获取node05上的system.uname是否能够获取到数据?
[root@node03 ~]# zabbix_get -s node05.test.org -k 'system.uname' Linux node05.test.org 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 [root@node03 ~]#
提示:现在能够获取到数据了;
再次查看node05是否被发现了呢?
提示:可以看到node05已经被发现了;从上面实验可以总结,使用zabbix agent 来check,对应主机必须要安装zabbix agent并配置其Server的地址才能够被发现;
配置zabbix action监听discovery事件
提示:在configuration--->actions页面选择discovery事件源,然后点击create action进入新建discovery事件源的action;
填写action名称,以及触发条件
提示:以上添加了3个条件,第一个条件是discovery check必须是test_discovery:zabbix agent "system.uname";第二个是发现的主机状态必须是up,第三个条件是对应主机响应中包含Linux字串;通过上述三个条件,我们发现的主机一定是一个linux主机;那么接下来我们就可以将发现的主机添加到host,然后链接针对监控Linux主机的模板进行监控;
添加执行的操作
提示:以上添加了两个操作,第一个操作上将对应主机添加为zabbix监控的主机;第二个操作上将对应主机链接至template os linux模板;当然如果还有其他操作可以继续添加;这里的操作有很多,比如发邮件,远程执行命令,添加/移除主机,添加/移除主机到某个主机组,链接/取消链接某个模板等等操作;
验证:查看是否将node05添加至host并链接了Template OS Linux模板呢?
提示:可以看到node05已经加入到zabbix 的hosts中,并链接了Template OS Linux 模板;同时我们也可以发现node04也链接了Template OS Linux;这说明只要符合dicovery事件监听的action都会执行对应action定义的操作;
以上就是zabbix的网络发现功能的使用演示,在大规模网络环境中使用,需要注意扫描时间间隔,如果网段特别大,此时如果扫描的间隔时间密集可能造成网络拥堵,对集群网络有一定的影响;其次选择zabbix agent 做判断条件,需要在各个server上安装zabbix agent 并配置server指向zabbix server ;这个安装和配置可以使用自动化运维工具去搞,比如ansible ,puppet等等;当然也可以提前规划好,在装系统时直接安装并启动好;