Zabbix UserParameter 用户自定义监控项(Windows)

    这篇笔记介绍下自定义监控,目的就是通过zabbix agent执行本地的python脚本(理论上执行什么语言的脚本都可以,只是我使用的环境是python就用python来举例了)获取返回值。Python的测试脚本也就一句话:print('1234')输出结果就是1234。

安装agent的时候有一个选项,支持远程执行命令,因此完成这个任务的方法有两个,一个是UserParameter,另一个就是远程执行命令。

一、远程执行命令

比较简单,就是把需要在CMD里面执行的命令写到zabbix监控项里面:

    key值选择system.run[command,<mode>]

    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=<key>,<shell command>

    #

    # 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容