Wie ich ein einfaches Monitoring von Kanälen mit Benachrichtigungen an Slack ohne Erfahrung gemacht habe
Arbeiten im technischen Support brachte zusätzlich zu allen Aufgaben die Pflicht mit sich, die Kommunikationskanäle zu überwachen. Dies wurde über den Grafana-Dienst realisiert, der die erforderlichen Metriken aus Zabbix bezog. Da die Art der Arbeit jedoch bedeutete, dass man nicht immer an seinem Arbeitsplatz sitzt, kam mir die Idee, dies ein wenig zu automatisieren und Benachrichtigungen auf das Telefon oder zum Beispiel in einen Messenger zu erhalten, falls ein Kommunikationskanal ausfällt. Allerdings hatte ich keinen Zugriff auf das Zabbix-System und auch keinen erweiterten Zugriff auf Grafana.
Also habe ich mir überlegt, wie ich das machen könnte. Nach einigem Nachdenken fand ich eine Lösung. Ich verstehe, dass meine Lösung nichts Revolutionäres ist, aber vielleicht wird sie für einige nützlich sein oder jemand wird etwas vorschlagen. Oder vielleicht wird auch jemand sagen, dass alles schlecht ist.
Die Funktionsweise ist einfach: Ich überprüfe mit dem Ping-Befehl die Erreichbarkeit des Kanals, und wenn der Ping nicht erfolgreich ist, ist der Kanal zu 99% nicht verfügbar.
Zuerst habe ich den Bot selbst über die Slack-API erstellt.
Ich bin auf die Slack-API gegangen: https://api.slack.com/apps
Habe die Seite "Ihre Apps" geöffnet
Einen Bot erstellt
Anschließend habe ich einen Webhook erstellt und den Kanal ausgewählt, mit dem er interagieren soll. Es sah ungefähr so aus: https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxx
Außerdem wurde automatisch ein Bash-Code generiert, mit dem verschiedene Nachrichten vom Terminal aus gesendet werden können, zum Beispiel "Hello World". Wir werden diesen Code verwenden, um Benachrichtigungen zu senden.
Als nächstes erstellen wir das Skript, das die erforderliche Arbeit für uns erledigt.
#!/bin/bash
provider1=xxx.xxx.xxx.xxx
if /bin/ping -c 2 $sevlig > /dev/null 2> /dev/null
then
echo 'канал в норме';
else
curl -X POST -H 'Content-type: application/json' --data '{"text":" недоступен канал provider1"}' https://hooks.slack.com/services/xxxx/xxxx/xxxxxx;
fi
Erläuterungen zum Code:
#!/bin/bash —
Dies gibt an, in welcher Shell das Skript ausgeführt werden sollprovider1=xxx.xxx.xxx.xxx —
Hier werden Variablen mit Werten zugewiesen, in diesem Fall die IP‑Adresse des Providersif /bin/ping ‑c 2 $sevlig > /dev/null 2> /dev/null —
Hier starten wir den Ping‑Befehl/bin/ping ‑c 2 —
Dies ist der eigentliche Ping‑Befehl, wir senden zwei Pakete und warten auf eine Antwort> /dev/null 2> /dev/null —
Die Ausgabe des Befehls wird in null umgeleitet, da uns der Ausführungstext des Befehls nicht interessiert, sondern nur der Rückgabecode
Wenn der Rückgabecode 0 ist, bedeutet dies, dass alle Pakete ohne Verluste zugestellt wurden.
then echo 'Der Kanal funktioniert einwandfrei';
In diesem Fall gibt das Skript eine Meldung aus, dass der Rückgabecode 0 war, d.h. es gab keinen Verlust, und dann endet die Ausführung des Skripts.
else curl -X POST -H 'Content-type: application/json' --data '{"text":" Der Kanal von provider1 ist nicht erreichbar."}' https://hooks.slack.com/services/xxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxx;
Wenn der Rückgabecode nicht 0, sondern ein anderer ist, d.h. es gab Verluste, bedeutet dies, dass es Probleme mit der Erreichbarkeit des Kanals gibt. In diesem Fall wird der zweite Teil des Befehls ausgeführt, und es wird über Curl über den Webhook eine Nachricht an den Slack-Kanal gesendet.
fi
- Dies ist der Abschluss des Skripts.
Wir speichern dies alles als Bash-Skriptdatei und machen sie ausführbar.
Dann automatisieren wir die Ausführung des Skripts, damit es alle 10 Minuten selbstständig gestartet wird. Dafür habe ich "crontab" verwendet.
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/10 * * * * /home/us/1.sh
Und hier sehen wir im Slack im Falle eines Kanalausfalls Folgendes:
Vielen Dank, dass Sie meinen Artikel gelesen haben.
Ich habe auch diesen Artikel auf Russisch in meinem Profil