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