2016-09-05 4 views
1

Ich versuchte zabbix zu konfigurieren, dass ein Wert von meinem Skript zu überwachen,zabbix Monitor benutzerdefinierten Skript Wert

Aber zabbix einen Fehler zurück:

Received value [200true] is not suitable for value type [Numeric (unsigned)] and data type [Decimal] 

Skript:

status=$(curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 | cut -d ' ' -f 2); 
if [ $status = "200" ]; then 
    exit 0 
else 
    echo 1 
fi 

Zabbix-Konfiguration:

key - system.run[/zabbix_scripts/myscript.sh] 
key type of information - numeric (unsigned) 
key data type - decimal 
trigger - {sso:system.run[/zabbix_scripts/myscript.sh].last()}=1 

Ich habe es vorher gemacht, aber irgendwie funktioniert dieses Skript nicht mit zabbix.

Bitte helfen, Danke!

+0

Was bringt dies auf dem problematischen System zurück? 'curl -I https://example.com/health_check.jsp 2>/dev/null | head -n 1 "- auch du mischst" echo "und" exit ". Während Sie wahrscheinlich "echo" meinten, wäre es in diesem Fall einfacher, nur den HTTP-Antwortcode auszugeben. – Richlv

Antwort

0

Obwohl die Fehlermeldung seltsam ist ("Received value [200true]" macht es so, als ob das Skript etwas seltsames ausgibt, obwohl es eigentlich nicht sollte), sehe ich ein Problem in der Verwendung von exit 0.

Zabbix wertet keine Exit-Codes externer Skripte/Binärdateien aus, es liest nur die Standardausgabe. es echo 0 Ändern Sie das Skript, um den Wert drucken somit nach stdout, sichtbar für zabbix machen, zum Beispiel:

status=$(curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 | cut -d ' ' -f 2) 
if [[ $status = "200" ]]; then 
    echo 0 
else 
    echo 1 
fi 
1

Während es wäre interessant, herauszufinden, warum Sie eine solche gebrochenen Ausgang bekommen, würde ich vorschlagen Ihr ganzes Skript dies zu ändern:

curl -s -I -o /dev/null -w "%{http_code}" https://example.com/health_check.jsp 

Beachten sie, dass es nur die HTTP-Response-Code wird ausgegeben, damit Ihre Trigger geändert werden müsste, für wobei der Wert nicht 200 überprüfen - #200 für Zabbix 2.2 und früher, <>200 für 2.4 und später.

0

Die Ausgabewerte, die von diesem Skript an den Server gesendet werden, weisen Datentypkonflikte auf.

Sie müssen das Skript wie folgt ändern: echo 0 oder echo 1, anstatt exit 0.

Wenn der Status 200 ist, ist die Ausgabe 0, wenn es 1 ist, können Sie eine Warnung auslösen.

status=$(curl -I https://example.com/health_check.jsp 2> /dev/null | head -n 1 | cut -d ' ' -f 2); 
if [ $status = "200" ]; then 
    echo 0 
else 
    echo 1 
fi