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!

Markus Frosch

Autor: Markus Frosch

Markus arbeitet bei NETWAYS als Principal Consultant und unterstützt Kunden bei der Implementierung von Nagios, Icinga und anderen Open Source Systems Management Tools. Neben seiner beruflichen Tätigkeit ist Markus aktiver Mitarbeiter im Debian Projekt.