Zabbix ignorierte Alarme erneut alarmieren

Keinen Alarm verpassen oder ignorieren

Je nachdem wie Sie sich oder ihre Mitarbeiter alarmieren lassen, man kann immer mal einen Alarm übersehen oder überhören. Eine erneute Alarmierung sollte erfolgen, sobald auf den ersten Alarm keine Reaktion erfolgte.

Neben der Standard-Eskalation der Zabbix Alerts finden Sie im folgenden Artikel eine weitere und sehr flexible Möglichkeit Alarme zu eskalieren.

Dabei werden die ausgelösten Trigger, welche nicht bestätigt wurden, wieder als neues Item in Zabbix angelegt. Nun können Sie flexible neue Trigger erstellen, wenn zum Beispiel in der letzten Stunde Trigger der Wichtigkeit "High" ignoriert wurden.

Aktive Trigger als Item anlegen

SQL-Query als externer Check

Legen Sie folgendes Skript als Datei ignored_triggers.sh in den Ordner, welchen Sie für die externen Checks im Zabbix-Server konfiguriert haben.

#!/bin/bash

HOST=$1

# Strip unwanted chars and set priotities
PRIORITIES=$(echo $2|sed s/"[^0-9,]"//g)

# Strip unwanted chars and set time
TIME=$(echo $3|sed s/"[^0-9]"//g)

if [ -z $PRIORITIES ] || [ -z $TIME ] || [ -z $HOST ]
then
    echo "Usage $0 <db_host> <priorities> <time>"
    echo "priorities is a list a comma seperated numbers, time is min age of trigger in sec"
    exit 1
fi

# mysql client and credentials and default database
MYSQL="/usr/bin/mysql -h ${HOST} -u zabbix_ro -pgeheim -N zabbix"

# execute the query and print result to stdout
echo "SELECT count(t.triggerid) AS counter
FROM triggers t 
JOIN functions f ON (f.triggerid = t.triggerid)
JOIN items i     ON (i.itemid = f.itemid)
JOIN hosts h     ON (h.hostid = i.hostid)
JOIN events e    ON (e.objectid = t.triggerid)
WHERE t.lastchange = e.clock
  AND h.status = 0
  AND t.value = 1
  AND t.status = 0 
  AND i.status = 0
  AND t.lastchange <(UNIX_TIMESTAMP()-${TIME})
  AND e.acknowledged = 0
  AND t.priority IN (${PRIORITIES})"|$MYSQL
  • Passen Sie das Passwort für den Zugang zur Zabbix-Datenbank an.
Verwenden Sie einen Benutzer, welcher nur Lese-Rechte auf der Zabbix-Datenbank hat. Mit
GRANT SELECT ON zabbix.* TO zabbix_ro identified by 'geheim'
können Sie einen Benutzer ohne Schreibrechte anlegen.
  • Machen Sie das Skript ausführbar und testen Sie es.
./ignored_triggers.sh 127.0.0.1 4 300

Sie sollten nur die Anzahl der "High" (Priority=4) Trigger zurückgeliefert bekommen, die älter als 300 Sekunden sind und die nicht bestätigt wurden (Acknowledged=0).

Die Priotities können auch als kommagetrennte Liste übergeben werden. zum Beispiel

./ignored_triggers.sh 127.0.0.1 3,4,5 3600

Sie sollten nur die Anzahl der "Warning" (Priority=3), "High" (Priority=4) oder "Disater" (Priority=5) Trigger zurückgeliefert bekommen, die älter als eine Stunde sind und die nicht bestätigt wurden

Item anlegen

Nun können Sie für den Host Zabbix-Server Items anlegen, welche die Anzahl der ignorierten Trigger in einem gewünschten Zeitraum zurückliefern.

Der erste Parameter des Items ist die Wichtigkeit (Priority). Der zweite Parameter das minimale Alter des Triggers. Das bedeutet, der Alarm muss für mindestens X Sekunden bestehen.

Die Parameter für Items vom Type "External Check" werden mit Leerzeichen, und nicht wie von anderen Items gewohnt, mit Komma getrennt.

Ignored high triggers.png

Nachdem Sie die Items eingerichtet haben, sollten Sie unter "Latest Data" nun die Anzahl der aktiven und ignorierten Alarme (Trigger) finden. Ignored triggers data.png

Trigger einrichten

Nach Sie nun die ignorierten Alarme als Items eingerichtet haben, können Sie wie gewohnt Trigger einrichten.

Wenn zum Beispiel Alarme der Wichtigkeit "High" für länger als eine Stunde ignoriert werden, wird ein "Disater" Alarm daraus.

Ignored trigger trigger.png