我對 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
。
檢查每 30 秒運行一次,以最大程度地減少網路流量,但腳本每次運行約 10-20 秒。所以我需要找到監控腳本運行時間的最佳方法,而實現這一目標的最佳方法是什麼?
答案1
您是否需要監控進程運行的時間,或者是否需要在進程運行時間過長時發出警報?
如果是前者,您可能希望修改腳本,以便它使用 發送有關運行時的信息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
這也可能是最簡單的解決方案。