[HowTo] Monitoring Notifications via Telegram

Lesenswerte Artikel, Anleitungen und Diskussionen
User avatar
rudelgurke
Systemtester
Systemtester
Posts: 400
Joined: 2008-03-12 05:36

[HowTo] Monitoring Notifications via Telegram

Post by rudelgurke » 2018-09-15 17:05

Hat man ein Monitoring System (im Beispiel ist es ein Icinga) am Laufen bekommt man Monitoring Meldungen meist per Mail.
Hat man gerade weder Lust noch Zeit jedes Mal das Mail-Programm zu öffnen und möchte auch kein GSM Modem für SMS an das Monitoring System anschließen, besteht noch die Möglichkeit das Ganze via Telegram zu organisieren.
Wenn gerade der Mailserver ein Problem hat bekommt man so zumindest noch eine Meldung.
Die Nachteile sind dass man auf dem Telefon Telegram benötigt, natürlich das Monitoring System Internet benötigt und auf dem Client Gerät Empfang gegeben sein muss.

Zuerst erstellt man, direkt in der App, seinen eigenen Bot, wie hier (https://core.telegram.org/bots#6-botfather) beschrieben.
Mit diesem erhält man einen Token, der später noch benötigt wird. Ist der Bot soweit einsatzbereit, benötigt man noch eine "Chat ID" welche man mittels:

Code: Select all

curl https://api.telegram.org/bot<TOKEN>/getUpdates
Erhät. Hat man Beides, geht es an das Monitoring Tool.

Unter Icinga wird ein neues Kommando definiert:

Code: Select all

define command {                                                                                          
 command_name notify-host-by-telegram                                                                     
 command_line /usr/local/bin/curl -X POST --data chat_id=<CHAT ID>
  --data text="Host: $HOSTNAME$%0AGroup:
  $HOSTGROUPNAME$%0AState: $HOSTSTATE$%0AAddress: $HOSTADDRESS$%0AInfo:
 $HOSTOUTPUT$%0A%0ADate/Time:
 $LONGDATETIME$%0A%0AAck
 by: $HOSTACKAUTHOR$%0AAck reason: $HOSTACKCOMMENT$%0Astate change
 %: $HOSTPERCENTCHANGE$%0AA"
 "https://api.telegram.org/bot<TOKEN>/sendMessage"                
}

define command {                                                                                          
 command_name notify-service-by-telegram                                                                  
 command_line /usr/local/bin/curl -X POST --data chat_id=<CHAT ID>
 --data text="Notification Type: $NOTIFICATIONTYPE$%0A%0AService:
 $SERVICEDESC$%0AHost: $HOSTALIAS$%0AAddress: $HOSTADDRESS$%0AState:
 $SERVICESTATE$%0A%0ADate/Time: $LONGDATETIME$%0A%0AAdditional Info:%0A%0A$SERVICEOUTPUT$%0A"  "https://api.telegram.org/bot<TOKEN>/sendMessage"                                             
}
TOKEN und CHAT ID entsprechend ersetzen. Beide Kommandos (notify-service-by-telegram / notify-host-by-telegram) können dann entsprechend verwendet werden.

Ein Beispiel für Monit, wenn irgendetwas klemmt:

Code: Select all

check host localhorst with address 254.255.256.257
 if failed icmp type echo count 2 with timeout 45 seconds then exec "/usr/local/bin/alert_telegram.sh"
Und das Shell Script enthält eine Curl Aufruf, ähnlich oben:

Code: Select all

/usr/local/bin/curl -X POST --data chat_id=<CHAT ID>
 --data text="Monit Meldung - 254.255.256.257 hat ein Problem"  "https://api.telegram.org/bot<TOKEN>/sendMessage"
Das Ganze kann beliebig erweitert werden.

Ein Hinweis, komplett auf Mails zu verzichten ist keine gute Idee, daher ist das Ganze als zusätzliche Methode zu verstehen.

Probleme / Fragen / Kommentare - immer her damit