openHAB, Icinga 2 - und HipChat

Diesen Beitrag schrieb ich 6 Jahre und 11 Monate zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

Atlassians HipChat ist ein Stück weit heißer Scheiß – also musste ich es mir natürlich anschauen!

Unter anderem einfach auch deshalb, weil ich Jira grundsätzlich mag, mittels Sourcetree mein Github-Repository pflegen kann (obgleich ich von git grundsätzlich wenig Ahnung hab) und für meine private Dokumentationswüste $10 in eine Mini-Confluence-Lizenz investiert habe. Ich allein bin zwar kein Team, aber zumindest kann ich ja meine Dienste Nachrichten schicken lassen – und hier zeige ich euch, wie ich Icinga 2 und openHAB zum Mitspielen bewege.

HipChat Token HipChat Token

Idealerweise wird für jeden Dienst ein eigenes Token eingerichtet; hierzu musst du dich auf der HipChat-Webseite anmelden, dann Rooms auswählen. Klicke auf den Raum, den du für diese Zwecke nutzen möchtest – meiner heißt Unixe – und dann links auf Tokens. Wähle unter Create new token „Send notification“ und vergib dem Token ein eindeutiges Label – das ist der Name, unter dem die Nachrichten später im Chat erscheinen werden. Zudem benötigst du die ID deines HipChat-Raumes: diese findest du unter Summary, Stichwort API ID. Sowohl Token als auch API-ID müssen in all meinen HipChat-Scripten eingesetzt werden.

Icinga 2

In meinem vorletzten Artikel habe ich euch schon meine grundsätzliche Vorgehensweise gezeigt, Benachrichtigungen über den Director zu erfassen und zu verwalten – im Prinzip mache ich hier nichts anderes. Ich habe mir zwei Scripte geschrieben – eines für Host-Notifizierungen und eines für die Services – und beide nach /etc/icinga2/scripts gepackt.

Anschließend habe ich für beide ein command erstellt, zuerst das für die Hosts…

object NotificationCommand "alarm-host-by-hipchat" {
    execute = PluginNotification
    command = [ "/etc/icinga2/scripts/host-by-hipchat.sh" ]
    arguments = {
        "-a" = "$address$"
        "-b" = "$notification.author$"
        "-c" = "$notification.comment$"
        "-l" = "$host.name$"
        "-o" = "$host.output$"
        "-s" = "$host.state$"
        "-t" = "$notification.type$"
    }
}

… und dann das für die Services:

object NotificationCommand "alarm-service-by-hipchat" {
    execute = PluginNotification
    command = [ "/etc/icinga2/scripts/service-by-hipchat.sh" ]
    arguments = {
        "-a" = "$address$"
        "-b" = "$notification.author$"
        "-c" = "$notification.comment$"
        "-e" = "$service.name$"
        "-f" = "$service.display_name$"
        "-l" = "$host.name$"
        "-o" = "$service.output$"
        "-s" = "$service.state$"
        "-t" = "$notification.type$"
    }
}

Die Konfiguration des einzelnen Hosts habe ich um das Attribut vars.notification_by erweitert – so kann ich leicht hinterlegen, dass Nachrichten immer dann rausgehen sollen, wenn host.vars.notification_by == "HipChat" gesetzt ist; der Übersichtlichkeit halber gibt es in meinem Setup auch einen User HipChat:

apply Notification "hipchat-host" to Host {
    import "hipchat-host-alarm"

    users = [ "HipChat" ]

    assign where host.vars.notification_by == "HipChat"
}

apply Notification "hipchat-service" to Service {
    import "hipchat-service-alarm"

    users = [ "HipChat" ]

    assign where host.vars.notification_by == "HipChat"
}

object User "HipChat" {
    import "generic-director-user"

    display_name = "HipChat"
}

Niedlich an HipChat ist, dass sich die Hintergrundfarbe einer Message (zumindest in gewissen Grenzen) anpassen lässt; alberne Smileys können auch mitgesendet werden. Ziemlich viele Möglichkeiten, sich auszutoben – aber halt auch, Information zusammenfließen zu lassen.

openHAB

Auch zu diesem Zweck habe ich ein kleines Script geschrieben – es muss unter $OPENHABHOME/configurations/scripts abgelegt und ausführbar gemacht werden. Außerdem wird ein Test-Switch benötigt – den habe ich in die $OPENHABHOME/configurations/items/default.items geworfen:

// Test
Switch  TestSwitchItem          "Notify"
...

Nun kann in $OPENHABHOME/configurations/rules/HipChat.rule eine erste Test-Regel erfasst werden:

rule "Eine Direktnachricht zum Testen"
when
  Item TestSwitchItem changed to ON
then
  var String sHipChatMsg = "\"Ich bin ein dummer Test\""
  executeCommandLine("/home/pi/bin/Msg-to-HipChat.sh red " + sHipChatMsg )
  logInfo("Test", "Ausgabe: " + sHipChatMsg )
end

Betätigen von TestSwitchItem kann nun auf der Konsole beobachtet werden, was openHAB daraus macht:

... [runtime.busevents             ] - TestSwitchItem received command ON
... [g.openhab.io.net.exec.ExecUtil] - executed commandLine '/home/pi/bin/Msg-to-HipChat.sh red "Ich bin ein dummer Test"'
... [org.openhab.model.script.Test ] - Ausgabe: "Ich bin ein dummer Test"

Fazit

Es funktioniert wirklich zuverlässig und gut; $wichtigen Nachrichten stelle ich ein @all bzw. ein @MarianneSpiller voran, und Raum bzw. App habe ich so konfiguriert, dass ich in diesen Fällen Push-Messages aufs iPhone erhalte bzw. mein Desktop-Icon wirr herumhüpft. Na, und über Sinn und Unsinn lässt sich – wie immer – trefflich streiten ;) Das muss so. Ich verabschiede mich jetzt jedenfalls ins Wochenende und wünsche euch eine gute Zeit!