5.5.2018 Linux Monitoring Telegram

Nagios ist unter den Monitoring-Systemen ein alter Hase. Das liegt daran, dass sich Nagios hauptsächlich auf einfache Kommandozeilenbefehle begrenzt und den Status eines Hosts oder eines Services über Exit-Codes des Skripts bestimmt. Nagios sendet dann in der Standardeinstellung eine E-Mail an den hinterlegten Admin-Kontakt mit einer entsprechenden Warnung oder Entwarnung.

Andere Monitoring-Systeme, um hier als Beispiel einmal Netdata zu nennen, bieten an, ihre Alerts auch über andere Nachrichten-Dienste, wie Telegram zu versenden. Um das Nagios beizubringen sind ein paar Schritte nötig, aber es bleibt “einfach”.

Telegram Bot erstellen

Damit Nagios später etwas versenden kann, muss natürlich ein entsprechender Bot für Telegram erstellt werden. Das funktioniert ganz einfach über den @BotFather)

Ist der Bot erstellt erhält man einen Token für die HTTP API von Telegram. Den brauchen wir gleich für den Nagios-Command. Damit Nagios später weiß, wo die Nachrichten später landen sollen, braucht man noch die eigene Telegram-ID. Die bekommt man am schnellsten durch den @IDBot.

Nagios Command erstellen

Jetzt bringen wir Nagios den Telegram-Befehl bei. Da die Telegram API auf HTTP basiert muss auf dem Nagios-Server nur curl installiert sein. Dann öffnen wir die Konfigurationsdatei für die Kommandos mit dem Namen commands.cfg. Diese sollte im Standard-Konfigurationsverzeichnis von Nagios unter objects liegen. Unter den Kommandos für notify-service-by-email können wir jetzt unsere eigenen Telegram Befehle einfügen:

# 'notify-host-by-telegram' command definition
define command{
    command_name    notify-host-by-telegram
    command_line    /usr/bin/curl -X  POST --data chat_id=$CONTACTPAGER$ --data parse_mode="markdown" --data text="🖥️*:* %60$HOSTNAME$%60 %0A%0A🔎*:* $OTIFICATIONTYPE$ %0A🎚️*:* %60$HOSTSTATE$%60 %0A🔗*:* %60$HOSTADDRESS$%60 %0A💬*:* %60$HOSTOUTPUT$%60" https://api.telegram.org/bot<BOT_TOKEN>/sendMessage
}

# 'notify-service-by-telegram' command definition
define command{
    command_name    notify-service-by-telegram
    command_line    /usr/bin/curl -X  POST --data chat_id=$CONTACTPAGER$ --data parse_mode="markdown" --data text="🖥️*:* %60$HOSTNAME$%60 %0A%0A🔎*:* $OTIFICATIONTYPE$ %0🛠*:* %60$SERVICEDESC$%60 %0A🔗*:* %60$HOSTADDRESS$%60 %0*:* %60$SERVICESTATE$%60 %0A💬*:* %60$SERVICEOUTPUT$%60" https://api.teleram.org/bot<BOT_TOKEN>/sendMessage

Natürlich muss hier anstelle des <BOT_TOKEN> der gerade eben erstellte Token des BotFathers rein. Außerdem enthält das hier gewählte Format Emojis zur Abkürzung. Der Text, der später gesendet wird kann natürlich im Parameter text den eigenen Wünschen angepasst und auch in Markdown formatiert werden.

Eine Nachricht des Bots mit dem Befehl von oben könnte so aussehen:

🖥️: Web-Server

🔎: PROBLEM 
🎚️: DOWN 
🔗: 192.168.178.100 
💬: CRITICAL - Host Unreachable (192.168.178.100)

Kontakt-Person anpassen

Jetzt muss nur noch der Nagios-Kontakt mit Telegram verbunden werden. Das Beispiel hier benutzt die Pager-Nummer von Nagios, sodass diese im Kontakt verändert werden muss. Dazu muss die contacts.cfg-Datei, die im gleichen Ordner wie oben liegt, verändert werden:

define contact{
        contact_name                    admin
        use                             generic-contact
        alias                           Super Admin
        email                           admin@example.com
        pager                           <TELEGRAM_ID>
        service_notification_commands   notify-service-by-telegram
        host_notification_commands      notify-host-by-telegram
}

An der Stelle wo jetzt notify-service-by-telegram steht, stand wahrscheinlich vorher notify-service-by-email. Das kann einfach mit einem Komma wieder hinzugefügt werden, wenn auch weiterhin E-Mails von Nagios kommen sollen. Der Platzhalter <TELEGRAM_ID> sollte natürlich durch die ID vom IDBot ersetzt werden.

Ist alles eingetragen muss Nagios nur noch neugestartet werden und Nagios sendet seine Nachrichten auch per Telegram raus.

Nach oben