Seite wählen

Telegram Notifications von Icinga 2

von | Okt 7, 2016 | Icinga, Monitoring & Observability

Ich nutze nun Telegram privat schon seit einiger Zeit, mir gefällt der Messenger und man kann dort auch sehr schön Bots einbinden.
Für meine privaten Systeme hat mich E-Mail für Notifications immer ein bisschen gestresst. Man möchte doch eigentlich nur kurz die Info sehen, was zählt ist doch eh der aktuelle Status im Dashboard. Mails muss man immer wegräumen/löschen.
Warum also nicht die Notifications via Bot an mich in Telegram schicken? Nichts einfacher als das.
In einem GitHub Repository habe ich alles nötige (auf Englisch) zusammengefasst. Doch hier gerne noch ein wenig auf Deutsch erklärt.

Was brauche ich:

  • Internetverbindung (zumindest https via Proxy)
  • Einen Telegram Bot (kann jeder anlegen)
  • Icinga 2 Konfiguration und Skripte

Bot erstellen

Es gibt eine Anleitung von Telegram zum erstellen von Bots, kurz zusammengefasst:
Telegram „User“ @BotFather suchen, und Bot erstellen:
telegram-bot-start telegram-bot-newbot
Wir haben nun einen HTTP API Token, dieser ist alles was gebraucht wird, um als Bot mit der Telegram API zu reden.
Den „User“ @MyCustomIcingaBot können wir nun auch anschreiben, dass muss man als User initial tun (/start oder start klicken) und irgendwas an den Bot schicken, wie „hallo“. Da wir allerdings nichts haben was als Bot Nachrichten abholt bleibt dies natürlich unbeantwortet.
Auf der Commandozeile kann man nun schon etwas abholen:

TOKEN="12345678:XXXXXXXX-XXXXXXX"
curl --silent "https://api.telegram.org/bot${TOKEN}/getUpdates"

Die Antwort enthält JSON und sagt uns welche User mit dem Bot kommuniziert haben.

{"ok":true,"result":[
{"update_id":12345678, "message":{"message_id":2,"from":{"id":12345678,"first_name":"Markus","last_name":"Frosch","username":"lazyfrosch"},
"chat":{"id":12345679,"first_name":"Markus","last_name":"Frosch","username":"lazyfrosch","type":"private"},"date":1475748165,"text":"hallo"}}
]}

Wichtig in dieser Info ist die Chat ID, diese sagt uns nämlich den „Channel“ in dem wir mit dem User reden können. Dies gilt z.B. auch für Gruppen, wenn man den Bot in die Gruppe hinzufügt.
Mit einem anderen Curl Befehl kann man nun auch Updates dorthin schicken:

/usr/bin/curl --silent --output /dev/null \
 --data-urlencode "chat_id=144840495" \
 --data-urlencode "text=Hallo welt" \
 "https://api.telegram.org/bot${TOKEN}/sendMessage"

Telegram sollte sofort eine Benachrichtigung bekommen.

Scripte für Icinga ablegen

Die beiden Skripte für Service und Host benachrichtigung bringen schön formatierte Nachrichten nach Telegram, auch mit dem Link zu icingaweb2.

Icinga für Telegram konfigurieren

Die Icinga 2 Konfiguration erfolgt nach gusto, wichtig ist nur:

  • ICINGAWEB2_URL
  • TELEGRAM_BOT_TOKEN (im Beispiel per const gesetzt)
  • TELEGRAM_CHAT_ID (kommt aus der Definition am User)

Ein Beispiel ist im GIT zu finden: icinga2-example.conf
Wie schon gesagt, eine Chat ID gibt es für:

  • Den persönlichen Chat zwischen User + Bot
  • Sowie einem Gruppen-Chat zu dem der Bot hinzugefügt wurde

Lesen sie auch

Wie schon in der README vermerkt gilt mein Dank Stefan Gehn für seinen Blogpost, auf dem meine (angepassten) Skripte aufbauen.
Fragen? Immer her damit, per Kommentar oder als GitHub Issue!

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Icinga | Monitoring & Observability

Herausforderungen beim Prometheus Scaling

Prometheus ist eine ausgezeichnete Monitoring-Lösung, wenn es um die Überwachung von Verfügbarkeit und Performance geht. Das initiale Deployment geht schnell und mit ein bisschen PromQL KnowHow hat man die Dashboards und Alarme schnell am Laufen. Schon steht die...