Log-Files

Zabbix:試圖監控一個腳本的執行時間,它是怎麼做的?

  • May 14, 2014

我是 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

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

引用自:https://serverfault.com/questions/594990