Icinga 2: Notifications an Android Geräte schicken

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

Icinga 2 hat seine Benachrichtigungs-Logik so weit abstrahiert, dass diese über alle erdenklichen Wege transportiert werden können, zum Beispiel via E-Mail, SMS, Rauchzeichen oder Brieftaube. Bei den meisten Installationen ist Icinga 2 für den Versand via E-Mail konfiguriert.

Für mich war das aber keine Option, da ich ein erhöhtes E-Mail aufkommen habe und somit eine Nachricht vom Monitoring System eventuell nicht sofort gesehen wird. Deshalb wollte ich meine Nachrichten via Push-Notifications auf mein Android Handy.

Notify My Android

Ich benutze in anderen Setups von mir Notify My Android. Dieser Dienst hat eine öffentliche REST-API an die ich jede Art von Nachricht übergeben kann. Dieser Dienst übernimmt die Zustellung der Nachricht an mein Android Gerät. Auf diesem wird dann meine Nachricht in eine Push-Notification gewandelt.

Die Kommunikation ist nahezu in Echtzeit. Sollte mein Handy keine Verbindung zum Internet haben wird die Nachricht nicht verworfen, sondern gespeichert bis das Handy wieder ans Netz geht und danach zugestellt.

 

Man sollte bedenken, dass die Nachrichten nicht verschlüsselt sind. Lediglich die Verbindung zur API ist mit TLS abgesichert. Die Zustellung an das Android Gerät wird mit Hilfe von Google’s Cloud Messaging realisiert. Im Schlimmsten Fall liest also die NSA mit.

Setup mit Icinga 2

Script für die Kommunikation mit der REST-API

Notify my Android hat bereits mehrere Implementationen in den verschiedensten Sprachen. Die Übersicht dazu findet man hier. Ich verwende bei mir die Perl Implementierung und lade mir das entsprechende Script auf meinen Monitoring-Server:

:~$ cd /etc/icinga2/scripts
:~$ wget http://storage.locked.io/files/nma.pl

Das Script liefert nach Aufruf ohne Parameter eine kleine Übersicht:

root@monitoring:/etc/icinga2/scripts# perl nma.pl
nma.pl: Event name is required
Usage:
 nma.pl [options] event_information

 Options:
 -help Display all help information.
 -apikey=... Your NotifyMyAndroid API key.
 -apikeyfile=... A file containing your NMA API key.
 -developerkey=... Your developer key (optional)

 Event information:
 -application=... The name of the application.
 -event=... The name of the event.
 -notification=... The text of the notification.
 -priority=... The priority of the notification.
 An integer in the range [-2, 2].

Für den nächsten Schritt benötigt man auf jeden Fall einen API Key. Diesen kann man sich auf der Notify My Android Webseite generieren lassen. Dieser Key ist unbedingt geheim zu halten.

Integration in Icinga 2

Für das Notification-Objekt benötigt man das passend NotificationCommand-Objekt. Ich habe dazu in der Datei /etc/icinga2/conf.d/commands.conf folgenden Block eingefügt:

object NotificationCommand "notify-my-android" {
 import "plugin-notification-command"

 command = [ SysconfDir + "/icinga2/scripts/nma.pl" ]

 arguments = {
 "--apikey" = "deinAPIkey"
 "--application" = "$service.display_name$ on $host.display_name$"
 "--event" = "Status changed to $service.state$"
 "--notification" = "$service.output$"
 "--priority" = "$notification.vars.priority$"
 }
}

Ersetze deinAPIkey durch deinen API-Key. Die anderen Parameter kann man nach belieben abändern. Eine Vorschau des Aussehens findet man weiter unten. Sobald man das NotificationCommand hat kann man die eigentlichen Notification anlegen. Dazu habe ich in der Datei /etc/icinga2/conf.d/notifications.conf zwei Blöcke eingefügt:

apply Notification "notify-my-android-critical" to Service {
 import "mail-service-notification"
 users = [ "veloc1ty" ]
 command = "notify-my-android"

 types = [ Problem, Recovery, Acknowledgement ]
 states = [ Critical ]

 vars.priority = "2"
 interval = 0
 assign where host.vars.os == "Linux"
}

apply Notification "notify-my-android-warning" to Service {
 import "mail-service-notification"
 users = [ "veloc1ty" ]
 command = "notify-my-android"

 types = [ Problem, Recovery, Acknowledgement ]
 states = [ Warning ]

 vars.priority = "0"
 interval = 0
 assign where host.vars.os == "Linux"
}

Bei meinem Setup unterscheide ich absichtlich zwischen Stati Critical und Warning, da mir Notify My Android ebenfalls eine entsprechende Option bietet. In der App kann man Filtern und zum Beispiel einen Zeitraum definieren, in der nur Critical Notifications laut gebroadcastet werden.

Fazit

Nachdem man Icinga 2 neu startet sollte man beim Eintreffen entsprechender Nachrichten einen Eintrag in der Notification Bar erhalten. Zusätzlich werden alle empfangenen Nachrichten in der App gespeichert. Das sieht dann zum Beispiel so aus:

Screenshot_2015-08-20-16-35-04

Screenshot_2015-08-21-10-13-45


Du hast einen Kommentar, einen Wunsch oder eine Verbeserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück