Ich bin ein absoluter Zabbix-Neuling und dies ist meine erste Aufgabe ... Ich muss mit Zabbix einen Monitor erstellen und überwachen, wie lange ein Skript läuft. Das Skript sieht folgendermaßen aus:
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
Das Skript erstellt eine Datei namens aggregator.lock
, die sicherstellt, dass das Skript nur einmal ausgeführt wird. Das Skript ist in Crontab so konfiguriert, dass es jede Minute ausgeführt wird. Ich habe die folgenden Elemente erstellt:
Solange die aggregator.lock
Datei vorhanden ist, gibt Zabbix vfs.file.exists
Folgendes zurück: 1.
[root@zabbix ~]# zabbix_get -s 10.200.X.X -k vfs.file.exists[/home/build/aggregator/scripts/aggregator.lock]
1
[root@zabbix ~]#
Und vfs.file.time
die Prüfung gibt zurück: 1400057821 (Unix-Zeit).
Solange die aggregator.lock
Datei nicht existiert, gibt Zabbix zurück: 0. Und vfs.file.time
die Prüfung gibt zurück: ZBX_NOTSUPPORTED .
Die Prüfung wird alle 30 Sekunden ausgeführt, um den Datenverkehr im Netzwerk zu minimieren, aber das Skript läuft jedes Mal etwa 10 bis 20 Sekunden. Ich muss also den besten Weg finden, die Laufzeit des Skripts zu überwachen. Was wäre der beste Weg, um dieses Ziel zu erreichen?
Antwort1
Müssen Sie überwachen, wie lange ein Prozess läuft oder müssen Sie eine Warnung ausgeben, wenn der Prozess zu lange dauert?
Wenn Ersteres zutrifft, möchten Sie das Skript möglicherweise so ändern, dass es Informationen zur Laufzeit sendet zabbix_sender
, etwa wie folgt:
#!/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
Hier ist „sleep 5“ Ihr „Java“-Befehl.
Wenn Letzteres zutrifft, möchten Sie das Skript möglicherweise so ändern, dass es beim Start des Skripts den Wert „1“ und beim Ende den Wert „0“ sendet, wie folgt:
#!/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
Anschließend können Sie einen Trigger ähnlich dem folgenden erstellen, der Sie warnt, wenn der Vorgang zu lange dauert:
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
Wenn das Ändern des Skripts keine Option ist, können Sie das Element proc.num[] verwenden:
proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]
Führen Sie alle 15 Sekunden eine Prüfung durch und geben Sie eine Warnung aus, wenn die letzten drei Werte (über einen Zeitraum von 30 Sekunden) anzeigen, dass der Prozess ausgeführt wird:
{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1
Dies könnte auch die einfachste Lösung sein.