Zabbix:嘗試監控腳本的運行時間,是如何完成的?

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

檢查每 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

這也可能是最簡單的解決方案。

相關內容