Zabbix: スクリプトの実行時間を監視したいのですが、どうすればよいですか?

Zabbix: スクリプトの実行時間を監視したいのですが、どうすればよいですか?

私は Zabbix の初心者で、これが初めての課題です... Zabbix を使用してモニターを構築し、1 つのスクリプトの実行時間を監視する必要があります。スクリプトは次のようになります。

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

このスクリプトは、スクリプトが 1 回だけ実行されるようにする というファイルを作成しますaggregator.lock。このスクリプトは、Crontab で 1 分ごとに実行されるように構成されています。次の項目を作成しました: ファイルが存在するここに画像の説明を入力してください ここに画像の説明を入力してくださいaggregator.lock、Zabbix はvfs.file.exists1 を返します。

[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 秒間実行されます。したがって、スクリプトの実行時間を監視する最適な方法を見つける必要があります。この目的を達成するための最適な方法は何でしょうか。

答え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[] item を使用することをお勧めします。

proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]

15 秒ごとにチェックし、最後の 3 つの値 (30 秒間) がプロセスが実行中であることを示すアラートを表示します。

{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1

これは最も簡単な解決策かもしれません。

関連情報