????這篇筆記介紹下自定義監(jiān)控,目的就是通過zabbix agent執(zhí)行本地的python腳本(理論上執(zhí)行什么語言的腳本都可以,只是我使用的環(huán)境是python就用python來舉例了)獲取返回值。Python的測試腳本也就一句話:print('1234')輸出結(jié)果就是1234害幅。
安裝agent的時(shí)候有一個(gè)選項(xiàng),支持遠(yuǎn)程執(zhí)行命令,因此完成這個(gè)任務(wù)的方法有兩個(gè)译红,一個(gè)是UserParameter,另一個(gè)就是遠(yuǎn)程執(zhí)行命令兴溜。
一侦厚、遠(yuǎn)程執(zhí)行命令
比較簡單,就是把需要在CMD里面執(zhí)行的命令寫到zabbix監(jiān)控項(xiàng)里面:
????key值選擇system.run[command,<mode>]
????command 就是需要執(zhí)行的命令
這里有坑:命令必須把python的絕對路徑寫上昵慌,否則執(zhí)行不成功假夺。害的我測試了好久才找到原因。
像這樣:C:\Users\XXX\AppData\Local\Programs\Python\Python38\python.exe C:\zabbixtest.py
二斋攀、UserParameter
這個(gè)需要在zabbix_agentd.conf文件里面添加對應(yīng)的配置,如下參考:
????### 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, 要執(zhí)行的命令已卷。
Zabbix上添加監(jiān)控項(xiàng)的時(shí)候key 就直接寫這個(gè) itemname就行了。這個(gè)也比較簡單淳蔼。
至此最基本的功能測試已經(jīng)完成侧蘸,完美。
但當(dāng)我把測試腳本改成自己的腳本時(shí)鹉梨,卻報(bào)了錯(cuò):“Timeout while executing a shell script”
此處又有一個(gè)坑:實(shí)際應(yīng)用的腳本執(zhí)行時(shí)間大概在10秒左右讳癌,Zabbix對于agent的超時(shí)時(shí)間默認(rèn)是3秒。需要同時(shí)修改服務(wù)器端的配置文件和客戶端的配置文件存皂。一開始只改了服務(wù)器端晌坤,測試又搞了我一下午。旦袋。骤菠。。疤孕。商乎。淚。祭阀。鹉戚。。专控。抹凳。
? ??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
至此各項(xiàng)測試完美,看著各個(gè)監(jiān)控項(xiàng)都有數(shù)踩官,不再丟圖却桶,爽!!颖系!
官方對于UerParameter高級應(yīng)用的解釋:
我對這個(gè)的理解就是動(dòng)態(tài)參數(shù)嗅剖,itemname[*]代表里面可以加任意多的參數(shù),是一個(gè)數(shù)組的形式嘁扼,中間可以用逗號隔開信粮。后面要執(zhí)行的命令可以調(diào)用前面的參數(shù)。$1是第一個(gè)參數(shù)趁啸,并非從0開始强缘。
例如配置文件里面寫:UserParameter=ping[*], echo $1
在zabbix添加監(jiān)控項(xiàng)的key ping[10.1.1.1] 或者ping[10.120.1.1,10.1.1.2,10.1.1.3] 最后執(zhí)行的時(shí)候都是 echo 10.120.1.1
在python腳本中可以用傳參數(shù)的方式在要執(zhí)行的腳本都把參數(shù)傳進(jìn)去,還拿之前舉過的例子不傅,監(jiān)控ACI設(shè)備內(nèi)存為例旅掂。我可以寫一個(gè)腳本登陸設(shè)備去查內(nèi)存,在這里的應(yīng)用就是把設(shè)備的IP地址做為參數(shù)傳進(jìn)去访娶。python的argv商虐,不會(huì)的可以去百度一下,還是比較簡單的崖疤。
舉個(gè)例子:
測試腳本如下:
? ??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')
執(zhí)行結(jié)果
我實(shí)際應(yīng)用:UserParameter=leafmem[*], C:\Users\XXX\AppData\Local\Programs\Python\Python38\python.exe C:\zabbix_sc_leafmem.py $1
完美秘车!