????这篇笔记介绍下自定义监控,目的就是通过zabbix agent执行本地的python脚本(理论上执行什么语言的脚本都可以,只是我使用的环境是python就用python来举例了)获取返回值。Python的测试脚本也就一句话:print('1234')输出结果就是1234。
安装agent的时候有一个选项,支持远程执行命令,因此完成这个任务的方法有两个,一个是UserParameter,另一个就是远程执行命令。
一、远程执行命令
比较简单,就是把需要在CMD里面执行的命令写到zabbix监控项里面:
????key值选择system.run[command,
????command 就是需要执行的命令

key

添加item
这里有坑:命令必须把python的绝对路径写上,否则执行不成功。害的我测试了好久才找到原因。
像这样:C:\Users\XXX\AppData\Local\Programs\Python\Python38\python.exe C:\zabbixtest.py

测试结果
二、UserParameter
这个需要在zabbix_agentd.conf文件里面添加对应的配置,如下参考:
????### Option: UserParameter
????# User-defined parameter to monitor. There can be several user-defined parameters.
????# Format: UserParameter=
????#
????# Mandatory: no
????# Default:
????# UserParameter=
? ??UserParameter=zabbixtest, C:\Users\XXXX\AppData\Local\Programs\Python\Python38\python.exe C:\zabbixtest.py
格式就是这样?UserParameter=itemname, 要执行的命令。
Zabbix上添加监控项的时候key 就直接写这个 itemname就行了。这个也比较简单。

item

graph
至此最基本的功能测试已经完成,完美。
但当我把测试脚本改成自己的脚本时,却报了错:“Timeout while executing a shell script”
此处又有一个坑:实际应用的脚本执行时间大概在10秒左右,Zabbix对于agent的超时时间默认是3秒。需要同时修改服务器端的配置文件和客户端的配置文件。一开始只改了服务器端,测试又搞了我一下午。。。。。。泪。。。。。。
? ??zabbix_server.conf file
????# Specifies how long we wait for agent response (in sec)
????# Must be between 1 and 30
????Timeout=30
? ??zabbix_agentd.conf
????### Option: Timeout
????# Spend no more than Timeout seconds on processing.
????#
????# Mandatory: no
????# Range: 1-30
????# Default:
? ? #Timeout=3
????Timeout=30

结果
至此各项测试完美,看着各个监控项都有数,不再丢图,爽!!!
官方对于UerParameter高级应用的解释:

官方解释及举例各个
我对这个的理解就是动态参数,itemname[*]代表里面可以加任意多的参数,是一个数组的形式,中间可以用逗号隔开。后面要执行的命令可以调用前面的参数。$1是第一个参数,并非从0开始。
例如配置文件里面写:UserParameter=ping[*], echo $1
在zabbix添加监控项的key ping[10.1.1.1] 或者ping[10.120.1.1,10.1.1.2,10.1.1.3] 最后执行的时候都是 echo 10.120.1.1
在python脚本中可以用传参数的方式在要执行的脚本都把参数传进去,还拿之前举过的例子,监控ACI设备内存为例。我可以写一个脚本登陆设备去查内存,在这里的应用就是把设备的IP地址做为参数传进去。python的argv,不会的可以去百度一下,还是比较简单的。
举个例子:
测试脚本如下:
? ??import sys
????print(str(sys.argv))
????print(sys.argv[0])
????print(sys.argv[1])
????print(len(sys.argv))
????if len(sys.argv)>=2:
? ? ????print('>=2')
执行结果

python传参数
我实际应用:UserParameter=leafmem[*], C:\Users\XXX\AppData\Local\Programs\Python\Python38\python.exe C:\zabbix_sc_leafmem.py $1

item
完美!

graph