場景模擬:python
現象分析
使用過zabbix調用腳本的運維人員都知道的一個現象,就是若是腳本運行的時間超過30s秒,就會獲取該腳本執行的結果。
上述緣由是zabbix的內部源碼形成的,它限制了腳本執行的時間最多不超過30sshell
現象重現
咱們在/usr/local/zabbix/scripts/目錄下建立一個test目錄,並建立一個test.py腳本,(shell腳本也行)
咱們在腳本中加一個time.sleep(35),模擬腳本調用超時現象
執行改腳本。Time python test.py
從上圖能夠看出。手動執行改腳本是能夠輸出結果的。
接着在zabbix建立腳本,執行調用該腳本的操做 數據庫
調用腳本
上圖證實zabbix調用腳本有超時限制
解決方案
經過agent的內置鍵system.run+zabbix_sender結合實現,調用腳本並返回結果運維
第一步:
採用zabbix_agent內置鍵調用test.py腳本
System.run[command,nowait]
Command:要執行的命令或者腳本
Nowait:不等待用戶返回的結果,永遠返回1ide
圖中的{HOST.IP}zabbix的內置宏,他的做用是自動獲取該腳本的主機ip
注意:最好寫絕對路徑,不然可能出現報錯
圖中若是system.run的command參數中間有空格請加單引號或者雙引號server
第二步:
再次調用該腳本看一下
若是,此時腳本其實已經調用成功了,不會再出現超時提示。blog
第三步:
接收超時腳本的結果
建立一個zabbix採集器的監控項,命名爲test
調整test.py腳本結合zabbix_sender使用ip
總的過程就是經過system.run[command,nowait]內置鍵,觸發該腳本,而後test.py腳本執行完成後,把結果發送到監控主機上。
再次調用該腳本,永遠返回1.
檢查zabbix-server上的名稱爲test這個zabbix採集器的監控項有沒有clean finish的字符串,有則說明,zabbix調用腳本成功。
驗證成功。上述方法已經解決了腳本超時沒法執行的問題。字符串