Zabbix Aktionen alarm ausloesen

Alarmierung gleich Aktion

Wenn Sie in der Zabbix-Weboberfläche nach einem Menüpunkt „Alarmierung“ oder „Benachrichtigung“ suchen, werden Sie nichts finden. Für viele Benutzer ist die Alarmierung im Fehlerfall der Haupteinsatzzweck von Zabbix, trotzdem gibt es keine Möglichkeit, Alarme zu konfigurieren. Zabbix verfolgt einen universellen Ansatz. Das bedeutet, Trigger lösen Aktionen aus. Deshalb finden Sie im Hauptmenü auch den Eintrag „Actions“. Das Senden einer Mail ist nur eine von vielen Aktionen, die ein Trigger auslösen kann. Streng genommen ist auch das nicht korrekt. Das Senden einer Nachricht ist eine Aktion, und „E-Mail“ ist der Medientyp der Nachricht. Bei den Aktionen wird zwischen zwei Typen unterschieden:

  • Senden einer Nachricht (Send Message)
  • Ausführen von Kommandos auf dem Host, welcher den Trigger auslöst (Remote Command)

Zum Senden einer Nachricht müssen zuvor Medien eingerichtet werden, zum Beispiel E-Mail oder SMS. Solange keine Medien eingerichtet wurden, können Sie „Send Message“ nicht als Aktion einrichten.

Zum Ausführen von Kommandos auf einem entfernten Host ist der Zabbix-Server auf die Hilfe des Zabbix-Agenten angewiesen. Der Server übergibt dem Agenten die Aufgabe, ein Kommando auf seinem Host auszuführen.

Interne Abläufe, damit ein Alarm ausgelöst wird

Eine neue Aktion anlegen

Sobald Sie mindestens ein Medium, zum Beispiel E-Mail, eingerichtet haben, können Sie den Zabbix-Server damit beauftragen, Nachrichten zu schicken.

Sie richten eine neue Aktion über das Menü Configuration|Action|New Action ein. Jede Aktion braucht einen Namen, mit dem sie in der Liste der Aktionen später identifiziert wird. Wählen Sie einen aussagekräftigen Namen, wie zum Beispiel „Send E-Mail to Admin Staff“.

Für die Einrichtung einer Alarmierung wählen Sie als „Event Source“ „Triggers“ aus. Das bedeutet, die Aktion wird ausgeführt, sobald ein Trigger seinen Wert ändert. Sie erinnern sich, dass ein Trigger ausgeführt bzw. ausgewertet wird, sobald der Wert eines Items aktualisiert wird. Daraus ergibt sich eine Kette von Prozessen, die sofort hintereinander abfolgen:

  1. Wert eines Items aktualisieren,
  2. Trigger auswerten,
  3. Aktion auslösen.

Was es mit den Quellen „Autodiscovery“ und „Auto registration“ auf sich hat, erfahren Sie im Kapitel Autodiscovery.

Die Checkbox „Enable escalations“ aktivieren Sie erst einmal nicht. Dem Thema Eskalation ist ein Extraabschnitt gewidmet. Eskalationen sollten Sie erst dann einrichten, wenn Sie mit der allgemeinen Funktionsweise der Aktionen und dem Zusammenspiel von Aktion und Medium vertraut sind.

Nachrichtenvorlage erstellen und Platzhalter verwenden

Im Eingabefeld „Default Subject“ tragen Sie den Betreff der Nachricht ein. Wenn die Nachricht über das Medium E-Mail versendet wird, ist „Default Subject“ gleich dem Betreff der Mail. Wenn Sie als Medium ein benutzerdefiniertes Skript auswählen, dann wird das „Default Subject“ als zweiter Parameter dem Skript übergeben.

Im Eingabefeld „Default message“ können Sie festlegen, wie die Nachricht aufgebaut werden soll und welche Informationen sie enthält. Im Eingabefeld „Default Message“ legen Sie den Nachrichtentext (Body) fest. Wenn Sie als Medium ein externes Skript auswählen, wird der Nachrichtentext als dritter Parameter, $3 bei Shell-Skripten, übergeben.

Zum Aufbau von Betreff und Nachricht verwenden Sie sogenannte Makros. Dies sind Variablen, die durch die gemessenen Werte des betroffenen Hosts ersetzt werden.

Im Eingabebereich „Action conditions“ können Sie Bedingungen definieren, wann eine Aktion ausgelöst werden soll. Das Anlegen einer Bedingung ist optional. Wenn Sie keine Bedingung anlegen, wird die Aktion immer ausgelöst, sobald ein Trigger (unabhängig vom Host oder der Hostgruppe) seinen Wert ändert. Das bedeutet, dass die Aktion ausgelöst wird, wenn ein Problem auftritt und auch wenn es wieder verschwindet.

Recovery-Messages

Nun können Sie sich fragen, warum es die Checkbox „Recovery message“ gibt, wenn die Aktion, in der Regel das Senden einer Nachricht, doch per Standard auch dann ausgelöst wird, wenn ein Problem gelöst ist. Wenn Sie die Option „Recovery message“ aktivieren, öffnet sich ein weiteres Eingabefeld, in dem Sie nur für die „Alles-ist-wieder-gut-Meldung“ einen anderen Text definieren können als für die Problemmeldung. In vielen Fällen müssen Sie diese Option aber nicht nutzen, denn in der Standardmeldung ist das Makro {TRIGGER.STATUS} enthalten, welches zu „Problem“ bzw. „OK“ aufgelöst wird.

Ohne das Einrichten der Recovery-Message würden Sie zum Beispiel Meldungen mit folgenden Betreffs erhalten:

Fehler tritt auf: Problem Host mond.int few discspace
Fehler verschwindet: OK Host mond.int few discspace

Die Nachrichtentext wäre bei beiden Nachrichten identisch.

Durch das Einrichten einer expliziten Recovery-Message bekommen Sie die Möglichkeit, zwei getrennte Nachrichten zu hinterlegen.

Wenn Sie die Option „Recovery message“ aktivieren, müssen Sie zwingend die Bedingung „Trigger Value = PROBLEM“ hinzufügen. Tun Sie dies nicht, werden Sie keine Recovery-Meldung erhalten. Nur anhand der Bedingung „Trigger Value= PROBLEM“ weiß Zabbix, dass eine Aktion eine Problemmeldung ist. Und nur auf Problemmeldungen kann eine Wiederherstellungsmeldung folgen.

Intern wird automatisch für die Recovery Meldung der Kondition „Trigger Value = OK“ verwendet.

Bedingungen für Aktionen

Im Bereich „Action conditions“ können Sie noch weitere Einschränkungen einrichten, zum Beispiel dass eine Aktion nur bei Problemen mit Hosts einer bestimmten Gruppe oder einer Applikation ausgelöst werden sollen. Oder Sie können festlegen, dass Aktionen nur zu bestimmten Uhrzeiten ausgelöst werden dürfen. Beachten Sie, dass Sie die Einschränkungen auf Host, Hostgruppen und Uhrzeiten an zwei Stellen vornehmen können. Sie können es in der Konfiguration der Aktion einstellen. Oder Sie können es in der Benutzerverwaltung pro Benutzer einstellen. Die Einstellungen in der Aktion haben dabei den Vorrang. Wenn Sie zum Beispiel einstellen, dass Alarmmeldungen nur zwischen 8 und 17 Uhr rausgehen sollen, dann wird außerhalb dieser Zeiten niemand eine Mail bekommen. Stellt ein User in seinem Profil ein, dass er rund um die Uhr Alarmmeldungen empfangen möchte, hat das keine Auswirkungen.

Wenn Sie hingegen einstellen, dass eine Aktion, zum Beispiel eine Alarm-E-Mail, rund um die Uhr versendet wird, bedeutet dies nicht, dass auch alle User rund um die Uhr diese Meldungen erhalten. In diesem Fall haben die persönlichen Einstellungen Vorrang. Stellt ein Benutzer ein, er möchte nur zwischen 9 und 13 Uhr Mails erhalten, dann werden die globalen Einstellungen der Aktion dies nicht überschreiben.

Leider verwendet Zabbix in Bezug auf die Trigger keine durchgehend einheitliche Terminologie. An einigen Stellen werden die Trigger-Status mit TRUE oder FALSE bezeichnet. An anderen Stellen, zum Beispiel bei der Konfiguration der Aktionen, werden die Trigger-Status mit „OK“ oder „PROBLEM“ bezeichnet.

„Trigger gleich True“ bedeutet Trigger Value gleich Problem.

„Trigger gleich False“ bedeutet kein Problem, Trigger Value gleich OK.

Aktion auslösen oder eine Nachricht schicken

Nachdem Sie nun für eine Aktion Name, Betreff, Text und ggf. Bedingung eingegeben haben, müssen Sie noch die eigentliche Aktion definieren. Dazu klicken Sie in der rechten Fensterhälfte auf „Action operations->New“.

Jetzt entscheiden Sie sich zwischen den zwei Aktionstypen „Send Message“ und „Remote Commands“. Zuerst sollten Sie eine Aktion vom Typ „Send Message“ einrichten. „Remote Command“ wird an anderer Stelle erklärt.

Über die Auswahl „Send message to“ legen Sie fest, ob die Nachricht an eine Gruppe oder einen einzelnen Benutzer gesendet wird. Die Option „Nachricht an alle“ gibt es nicht. Dazu müssten Sie eine Gruppe anlegen, in der alle Benutzer Mitglied sind.

Sofern Sie mehrere Medien konfiguriert haben, zum Beispiel Mail, SMS und Jabber-Chat, können Sie über das Dropdown-Menü „Send only to“ einschränken, über welches Medium die Nachricht versendet werden soll. Beachten Sie auch wieder das Zusammenspiel von den globalen Einstellungen der Aktion und den persönlichen Einstellungen des Benutzers. Wenn Sie einstellen, dass ein bestimmter Benutzer Meldungen erhalten soll, kann der Benutzer dies in seinen Einstellungen trotzdem verhindern.

Wenn Sie einen einzelnen Benutzer ausgewählt haben, werden die persönlichen Einstellungen zum Empfang von Nachrichten des Benutzers in der Konfiguration der Aktion eingeblendet. Diese Benutzereinstellung können Sie an dieser Stelle nicht ändern. Sie können aber sofort erkennen, dass ein Benutzer zum Beispiel die Alarmierung per Mail ausgeschaltet hat und Sie die Alarme deshalb vielleicht besser an eine Gruppe anstatt an einen einzelnen Benutzer schicken.

Anlegen einer Benachrichtigung per E-Mail

Nachrichtentexte weiter individualisieren

Wenn Sie den Haken „Default message“ entfernen, haben Sie die Möglichkeit, für eine Gruppe oder einen Benutzer einen abweichenden Text zu hinterlegen.

Eine sinnvollere Anwendung für abweichende Mail-Texte ist die Kommunikation von Zabbix mit anderen automatischen Systemen per Mail. Zum Beispiel kann Zabbix per E-Mail Trouble-Tickets in Systemen wie OTRS, Redmine, Jira etc. auslösen. Solche Systeme können Mails sehr präzise verarbeiten, wenn diese einer bestimmten Form folgen und spezielle Stichworte enthalten.

Eine andere Anwendung für abweichende Mail-Texte sind mehrsprachige Teams. So können Sie zum Beispiel die Standardmeldungen in Englisch verfassen. Für das spanischsprachige Team hinterlegen Sie aber eine spanische Nachricht.

Achten Sie darauf, dass Sie jeden Teilbereich des Formulars zum Einrichten einer Aktion mit den Buttons „Add“ bzw. „Save“ speichern. Final müssen Sie dann alle Einstellungen über den Button „Save“ im linken Formular im Kasten „Action“ speichern. Siehe Screenshot.
Die Eingabefelder sind sehr klein ausgefallen, und der Text wird nicht in einer Monospace-Schriftart dargestellt. Das erschwert das saubere Formatieren einer E-Mail-Vorlage. Abhilfe schafft hier das Firefox-Plugin „It's all Text“. Ist das Plugin installiert, können Sie die Eingaben und Änderungen in allen Eingabefeldern vom Typ Textarea in Ihrem Lieblingseditor vornehmen.

Eskalation

Einen Alarm auslösen und eine Nachricht schicken ist gut. Doch schnell kann man so eine Nachricht übersehen. Oder der Akku des Handys ist leer, und die SMS kommt nicht an. Auch für solche Fälle hat Zabbix eine Lösung: Eskalation. Über die Funktion „Eskalation“ können Sie für ein Problem (Trigger) mehrere Aktionen hintereinander auslösen. So ist es möglich, eine Kette von Aktionen auszulösen, wobei jede einzelne Aktion wieder an Bedingungen geknüpft ist. Wenn also der Admin vom Notdienst auf eine SMS nicht reagiert, indem er die Störung und damit den Erhalt der SMS bestätigt, wird nach 10 Minuten ein Telefonanruf ausgelöst. Bleibt auch der Anruf ohne Reaktion, wird nach einer weiteren Zeitspanne der Chef vom Notdienst verständigt.

Sie aktivieren die Eskalation in der Konfiguration einer Aktion durch Setzen des Hakens bei „Enable escalations“. Dies aktiviert weitere Konfigurationsmöglichkeiten auf der rechten Seite im Bereich „Action operations“. Bevor Sie die einzelnen Schritte der Eskalation anlegen, müssen Sie festlegen, wie viel Zeit zwischen den Aktionen vergehen muss. Tragen Sie dazu eine Anzahl von Sekunden (mindestens 60) in das Feld „Period“ direkt unter der Checkbox „Enable escalations“ ein. Es ist später möglich, zwischen den Aktionen eine flexible Zeitspanne verstreichen zu lassen. Wenn Sie also als Zeitspanne 300, also 5 Minuten, eintragen, wird alle fünf Minuten geprüft, ob eine neue Stufe der Eskalation erreicht wurde. Jede Aktion kann diesen Wert überschreiben und festlegen, wann die nächte Stufe ausgelöst werden soll.

Nachdem Sie sich für eine Periode entschieden haben, können Sie die erste Aktion anlegen. Die Aktionen werden angelegt wie jede andere Aktion auch (siehe oben). Allerdings müssen Sie bei aktivierter Eskalation festlegen, beim wievielten Durchlauf der Schleife die Aktion erfolgen soll. Für die erste Aktion tragen Sie bei „Step From“ 1 ein. Wenn Sie nur „Step To“ gleich 0 setzen (= endlos) wird zum Beispiel eine Nachricht, sofern Sie Period gleich 300s gewählt haben, alle fünf Minuten verschickt, solange der Trigger ein Problem meldet. Wenn Sie als Bedingung „Event acknowledged = Not Ack“ hinzufügen, hört die wiederholte Alarmierung auf, sobald das Problem bestätigt wird.
Sie können nun weitere Aktionen hinzufügen, zum Beispiel können Sie mit „Step From = 2, Step To = 0“ nach 10 Minuten weitere Personen in den Kreis der Alarmierten aufnehmen.
Beim Anlegen einer Aktion können Sie außerdem festlegen, wann die nächste Stufe ausgelöst werden soll. Wenn Sie Null auswählen, wird die voreingestellte Standardzeitspanne verwendet.

Im unten gezeigten Beispiel wird bei einem Problem sofort und einmalig der „Admin of the day“ informiert. Nach 5 Minuten (Vorgabewert) wird die Gruppe „Network administrators“ alarmiert. Nach weiteren 3 Minuten wird die Chefetage benachrichtigt.

Anlegen einer Eskalation. Mehrere Personen werden nacheinander benachrichtigt, wenn die Kollegen nicht reagieren.

Makros für Aktionen

Makros sind Platzhalter für dynamisch eingefügte Inhalte in Nachrichten und Remote-Kommandos. Sie werden in geschweifte Klammern gesetzt und in Großbuchstaben geschrieben. Makros werden je nach Kontext in spezifische Werte aufgelöst. Makros, die kein Dollar-Zeichen enthalten, beispielsweise {ITEM.NAME}, sind interne Makros, deren Werte Sie nicht überschreiben können. Zusätzlich gibt es noch User-Makros, deren Werte Sie an verschiedenen Stellen selbst setzen können. Die User-Makros enthalten immer ein Dollar-Zeichen, beispielsweise {$LOCATION}. Mehr zum Thema User-Makros finden Sie im Kapitel Templates individualisieren mit Makros.


Die nachfolgenden Makros können Sie zum Erstellen und Individualisieren von Nachrichten verwenden. Die komplette Liste aller verfügbaren Makros finden Sie online in der offiziellen Zabbix-Dokumentation.

Die Angabe der Nummern 1-9 sind nur dann notwendig, wenn ein Trigger mehrere Items oder Hosts gleichzeitig auswertet. Ist dies nicht der Fall, brauchen Sie keine Nummern angeben. {ITEM.NAME} reicht also aus, um in einer Nachricht den Namen des Items zu senden.

Makros mit Informationen über den Host
{HOSTNAME<1-9>} Name des Hosts, welcher den Alarm auslöst. Entspricht dem Namen, den Sie beim Anlagen des Hosts als Name (nicht verwechseln mit DNS-Hostname) angelegt haben. In der Regel verwenden Sie das Makro {HOSTNAME}.
{HOST.CONN<1-9>} Variable, über die der Host kontaktiert wird. In der Regel die IP-Adresse des Hosts. Wenn Sie im Host „use DNS“ ausgewählt haben, enthält das Makro den DNS-Namen.
{HOST.DNS<1-9>} Konfigurierter DNS-Name
{IPADDRESS<1-9>} Konfigurierte IP-Adresse des Hosts
{NODE.ID<1-9>} Nummer des Nodes beim Einsatz von „Distributed Monitoring“
{NODE.NAME<1-9>} Name des Nodes beim Einsatz von „Distributed Monitoring“
{PROXY.NAME<1-9>} Name des Proxys, über den der Host überwacht wird
Makros mit Informationen über die Items
{ITEM.LASTVALUE<1-9>} Wert der letzten Messung des Items. Einheiten und Value Mappings werden berücksichtigt.
{ITEM.NAME<1-9>} Name des Items, entspricht dem, was Sie im Feld „Description“ beim Anlegen des Items angegeben haben
{ITEM.VALUE<1-9>} Synonym für {ITEM.LASTVALUE<1-9>}
Makros mit Informationen über das ausgelöste Event
{ESC.HISTORY} Eskalationsverlauf, Auflistung der bereits gesendeten Nachrichten
{EVENT.ACK.HISTORY} Historie, wer wann Alarme für einen Host bestätigt hat
{EVENT.ACK.STATUS} Status, ob der Alarm schon bestätigt (acknowledged) wurde (sinnvoll bei Eskalationen und mehrfacher Alarmierung)
{EVENT.AGE} Wie lange besteht das Problem schon? Ausgabe wird automatisch in Sekunden, Minuten oder Stunden inklusive Einheit ausgegeben.
{EVENT.DATE} Datum, wann das Event (Problem) das erste Mal auftrat, Format YYYY.MM.DD
{EVENT.ID} ID des Events
{EVENT.TIME} Uhrzeit, wann das Event (Problem) das erste Mal auftrat, Format HH.MM.SS
Makros mit Informationen über den Trigger, der die Aktion auslöst
{TRIGGER.ID} Numerische ID des Triggers, welcher die Aktion auslöst
{TRIGGER.NAME} Name (Beschreibung) des Triggers
{TRIGGER.NSEVERITY} Numerische Dringlichkeit des Triggers (severity), mögliche Werte: 0 - Not classified, 1 - Information, 2 - Warning, 3 - Average, 4 - High, 5 - Disaster.
{TRIGGER.SEVERITY} Dringlichkeit des Triggers in Textform (severity), mögliche Werte: Not classified, Information, Warning, Average, High, Disaster, Unknown
{TRIGGER.STATUS} Trigger-Status, mögliche Werte: PROBLEM oder OK
{TRIGGER.URL} Trigger-URL, die Sie ggf. bei der Einrichtung des Triggers hinterlegt haben
{TRIGGER.VALUE} Aktueller Wert des Triggers: 0 - trigger is in OK state, 1 – trigger is in PROBLEM state, 2 – trigger UNKNOWN
{TRIGGER.COMMENT} Kommentare, die beim Anlegen des Triggers hinterlegt wurden
{TIME} Die aktuelle Uhrzeit des Zabbix-Servers
Hinterlegen Sie bei jedem Trigger Hinweise, wie man das Problem beheben kann. Solche Hinweise sind besonders wertvoll, wenn ein Problem nicht über die gewohnten Standardwege behoben werden kann.

Beispiel:

Trigger-Name: Apache Webserver not running
Comment:      Do not use /etc/init.d/apache2 restart. 
              Our custom Initscript is /etc/init.d/my_apache restart

Nicht alle oben genannten Makros stehen in älteren Versionen von Zabbix zur Verfügung. Die ofizielle Zabbix-Dokumentation gibt Auskunft, ab welcher Version die Makros verfügbar sind.

Alle Makros, für die keine Werte ersetzt werden können, liefern „*UNKNOWN*“ zurück.