ZABBIX全栈级监控实践——(四)基于自动发现的自动化监控


《ZABBIX全栈级监控实践》系列将由浅入深探讨如何实现ZABBIX全栈级别的监控。

本文是《ZABBIX全栈级监控实践》的第四篇:主要讨论使用Zabbix自带的Auto-Discovery功能对监控Host进行模板关联,从而提升监控和运维效率。


一、概述

作为运维人员,面对的系统往往是多种多样的,比如这样……


当然,我们可以为上述监控对象一个一个的分别套用模板,分别为他们设定各自的监控项(Item)和触发器(Trigger)。但是监控需求如此复杂和数量庞大,难免会发生下列问题:

1、套用错误模板,导致大量not support的监控项。

2、为监控对象逐个关联模板,耗费大量的时间。

3、新上线的监控对象,未及时添加监控或者关联正确的模板。

4、已有监控对象的角色发生了变化(如原有的Windows上,增加了IIS的角色),未能及时关联相应的监控模板。

……

上述这些问题都可能会造成无效的监控,一方面增加了监控噪音,另一方面会发现很多该要监控的东西,未得到有效的监控。

我们该如何解决这个问题呢?

二、配置自动发现(auto-discovery)功能

个人觉得:Zabbix虽然在使用方面有很多不够人性化的地方,但是对于Zabbix而言,最高效、最值得称道的功能有两个,一个是低级别发现(low-level discovery),另一个是自动发现(auto-discovery)。两者的区别是:低级别发现是自动发现一个监控主机(host)下同一类的监控项(如磁盘、网卡等),并添加为监控项;而自动发现是指Zabbix通过特定的规则(如端口,SNMP等),发现网络中符合该规则的监控主机,并添加到Zabbix中。本文主要讨论的是使用Zabbix的自动发现(Discovery)功能。

自动发现的原理是按照特定的规则去发现网络上的监控主机,如FTP服务器一般使用21端口,Tomcat的端口一般为8080,所有的监控主机都可以被Zabbix ping通等。自动发现的前提是标准化,对于使用个性化配置的监控主机,不适合用自动发现功能。

自动发现的实现逻辑如下:


本文中,以自动发现Windows服务器,为Windows服务器套用对应模板为例,描述具体的实现过程。

1、登陆Zabbix Web,找到Configuration->Discovery标签页。

2、Discovery Rules中默认会有一条发现规则。这条规则是已经禁用的。我们需要按需新建一条发现规则,点击右上方的Create discovery rule,如下图新建一条发现规则。


我们可以直接通过Zabbix server或者proxy来发现监控主机(在Discovery by proxy中选择)。要注意的是,这个发现的操作是由这台server或者proxy发起的,因此在IP range中的网段范围必须可以被server或者proxy访问。如果不需要使用proxy,选择No proxy即可。

IP range中,可以填写单个IP(这个并没什么太大的意义,因为自动发现希望达到批量添加的效果),或者IP段。

IP段的格式:192.168.1-10.1-255 IP range的覆盖地址的总数量必须小于64000个。

IP掩码:192.168.4.0/24

支持的掩码为

/16 - /30    IPv4 addresses

/112 - /128    IPv6 addresses

IP列表:192.168.1.1-255, 192.168.2.1-100, 192.168.2.200, 192.168.4.0/24

Zabbix 3.0.0后的版本,这个参数支持空格,TAB制表位和多行分割。

Delay参数代表发现轮询的时间,默认为3600秒。

最重要的部分在于Check,它指定了发现规则。发现规则非常丰富,从常用的ICMP PING,到端口检测,以及网络设备常用的SNMP,都支持。同时支持集中检查规则组合使用。

对于检测一台监控主机是否为Windows,我们使用Zabbix agent的检查类型,Key为system.uname。即让Zabbix agent去获取system.uname的值。

点击Add保存该发现规则。

至此,我们已经指定了发现范围和发现规则。

三、配置发现(Discovery)事件的动作(Action)

接着,我们要发现后的动作。对于被发现的Windows服务器,我们要自动为其关联Windows模板。

在Configuration->Actions下,新建一个发现事件的动作。

按下图方式配置这个Action:



还记得刚才我们在配置的system.uname吗? 如上图所示,当system.uname的返回值(Received Value)中包含(like)Windows时,自动添加主机,并关联Template OS Windows模板。

其实Zabbix中发现事件的动作有很多种类型,以上只是最为简单的一种方法。

三、验证配置

在Monitoring->Discovery中,可以查看发现的设备。第一次在这个页面中看到结果,需要在完成第一次轮询(Delay)。网络中不存在的地址不会在此显示。

该页面中,我们可以看到Host的上线时间(以Zabbix第一次扫描到的时间为起点)。

可以看到,11.0.0.1这台Host,已经被Zabbix自动添加到了监控。可以在Configuration->Hosts中看到,已经成功关联了Windows模板。

四、总结

第三篇中,我们讲到了如何为Windows平台部署Zabbix Agent。本篇我们讲到了如何将已安装Zabbix Agent的客户端,按一定的规则添加到Zabbix监控平台中。结合这两部操作,基本上解决了我们Zabbix Agent客户端部署和Zabbix Web端监控添加的问题。大大提高了Zabbix监控平台的部署效率,降低了人工介入的失败情况的发生。

Zabbix自动发现是非常强大的一个功能。类似于手机端的效率管理软件IFTTT。实现的逻辑很简单:

如果符合某个/些特定条件,那么就执行某个/些动作。

由于条件和动作的种类非常丰富,所以可以创造各种可能自动化运维的动作。当然,后期如果可以结合API或者脚本实现命令调用的话,Zabbix还能做到一些简单的配置管理功能。

本文抛砖引玉,希望给各位看官到来更多的启发:)

推荐阅读更多精彩内容