下图是一个已配置并启用的自动发现规则:
应用到165.194这个主机后,自动发现的监控项:
服务端配置
- 创建Template
- 创建Discovery rule
键值readPorts
跟被监控端配置的参数有关,下面再提。
- 创建监控项原型
宏引用符号{ #SERVICE }和{ #TCP_PORT }跟被监控端返回的json数据有关。net.tcp.listen[<port>]
表示监听目标机器的<port>
端口状态,返回值为0或1,0表示Down,1表示Up。另外,$1
表示键值里的第一个参数,即<port>
。
- 创建触发器原型
添加完监控项和触发器原型的样子:
添加主机并关联此模板
此略。
被监控端配置
首先,看一下/etc/zabbix目录下的文件。scripts目录是新加的,zabbix_agentd.conf也作了修改。
使用自动发现功能,需要返回符号zabbix要求的json数据:
例如:
1 | { |
其形式大致如下:
1 | { |
readPorts.sh脚本的内容很简单,就是读取已准备好的json数据文件ports.json,作为返回给zabbix server的值:
1 | [root@172 scripts]# cat readPorts.sh |
为了返回给server端,需要再zabbix_agentd.conf中配置:
这样,server端就可以使用readPorts
这个键值,以获取写在ports.json中的数据。readPorts
下面定义的getPorts、getAllPorts
是另外两个可用的自定义键值。
自动发现需监控的服务/端口,难点不在于读取,而在于自动生成json数据文件。此处的ports.json是根据ports.ini转换而来的。
ports.ini文件需人工填写:
getPorts.py脚本如下,用于转换ports.ini为ports.json:
1 | #!/usr/bin/env python |
转换ports.ini为json形式:
至于getAllPorts.py,它的功能是直接返回主机上实际开放的端口数据: