Log-Files
Zabbix:試圖監控一個腳本的執行時間,它是怎麼做的?
我是 Zabbix 的菜鳥,這是我的第一個任務……我需要使用 Zabbix 建構一個監視器並監視一個腳本執行多長時間。腳本如下所示:
device0="/home/build/aggregator/scripts/aggregator.lock" if [ -e "$device0" ] then echo process is already running else touch $device0 java -Xms6g -Xmx6g -jar /home/build/aggregator/aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar rm $device0 fi
該腳本創建一個名為
aggregator.lock
確保腳本只執行一次的文件,該腳本在 Crontab 中配置為每分鐘執行一次。我創建了下一個項目: 當aggregator.lock
文件存在時,Zabbixvfs.file.exists
返回:1。[root@zabbix ~]# zabbix_get -s 10.200.X.X -k vfs.file.exists[/home/build/aggregator/scripts/aggregator.lock] 1 [root@zabbix ~]#
並
vfs.file.time
檢查返回:1400057821(Unix 時間)。當
aggregator.lock
文件不存在時,Zabbix 返回:0。vfs.file.time
檢查返回:ZBX_NOTSUPPORTED。檢查每 30 秒執行一次,以盡量減少網路中的流量,但腳本每次執行大約 10-20 秒。所以我需要找到監控腳本執行時間的最佳方法,實現這一目標的最佳方法是什麼?
您是否需要監控流程執行的時間,或者您是否需要在流程執行時間過長時發出警報?
如果是前者,您可能希望修改腳本,以便它使用 發送有關執行時的資訊
zabbix_sender
,如下所示:#!/bin/bash date1=$(date '+%s') sleep 5 date2=$(date '+%s') duration=$(($date2-$date1)) zabbix_sender -z 127.0.0.1 -s 'my host' -k duration -o $duration
在這裡,“sleep 5”是你的“java”命令。
如果是後者,您可能希望修改腳本,使其在腳本啟動時發送值“1”,在腳本結束時發送值“0”,如下所示:
#!/bin/bash zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 1 sleep 5 zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 0
然後,您可以創建一個類似於以下內容的觸發器,以在流程耗時過長時發出警報:
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
如果修改腳本不是一個選項,那麼您可能希望使用 proc.num
$$ $$物品:
proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]
讓它每 15 秒檢查一次,警報是最後三個值(跨越 30 秒)表明程序正在執行:
{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1
這也可能是最簡單的解決方案。