
Manchmal müssen Sie schnell eine Überwachung für einen neuen Dienst durchführen, aber es steht keine vorgefertigte Infrastruktur / Expertise zur Verfügung. In diesem Handbuch implementieren wir in einer halben Stunde ein Tool zum Überwachen von Webdiensten, das nur die integrierten Ubuntu-Tools verwendet: bash, cron und curl. Wir werden Telegramm verwenden, um Warnungen zu liefern.
"Cherry on the cake" wird die emotionale Beteiligung der Benutzer sein. Es wird auf Menschen überprüft - es funktioniert.
Als wir im Telemedizin-Service von Doctor Near einen Chatbot erstellt haben, um den Grad des Benutzerstresses zu bestimmen, mussten wir ihn überwachen. In wenigen Stunden wurde ein Miniprojekt erstellt, das nicht nur großartig funktioniert, sondern auch positive Rückmeldungen liefert.
Holen Sie sich zunächst ein Repository mit Skripten:
git clone https://github.com/rshekhovtsov/msms.git
Gehen Sie zum Ordner msms und arbeiten Sie darin.
Wenn das Telegramm blockiert ist, verwenden Sie einen Proxy. Die einfachste und zuverlässigste Option sind Torsocks:
sudo apt install tor sudo apt install torsocks
Als Beispiel konfigurieren wir die Überwachung der Startseite von google.com in drei Schritten.
SCHRITT 1. Erstellen Sie einen Bot im Telegramm und erhalten Sie die Benutzer-ID
Um einen neuen Empfänger hinzuzufügen, müssen Sie ihn bitten, den Bot im Telegramm zu starten, recipient-setup.sh auszuführen und der Datei die ID hinzuzufügen.
SCHRITT 2. Überwachung konfigurieren
Die Beschreibung des Dienstes erfolgt durch Erstellen einer INI-Datei im Ordner "servies". Es müssen fünf Parameter eingestellt werden:
- MSMS_SERVICE_NAME : Dienstname - wird in Warnungen und Überwachungsprotokollen verwendet.
- MSMS_SERVICE_ENDPOINT : Der Endpunkt des Dienstes, mit dem wir uns bei curl on in Verbindung setzen.
- MSMS_CURL_PARAMS : Zusätzliche Curl-Parameter, siehe Beispiel unten.
- MSMS_EXPECTED : erwartete Serviceantwort. Wird verwendet, wenn die Antwort kurz ist.
- MSMS_EXPECTED_FILE : Dateiname mit der erwarteten Serviceantwort. Wenn angegeben, wird MSMS_EXPECTED überschrieben.
- MSMS_RECIPIENTS : Datei mit einer Liste der Benachrichtigungsempfänger.
Die Anfrage auf google.com gibt einen festen HTML-Code mit einer Weiterleitung zurück. Wir verwenden diesen als erwartete Serverantwort:
curl google.com > services/google-response.html
Erstellen Sie die Datei services / google.ini:
MSMS_SERVICE_NAME='google front page'
In
MSMS_CURL_PARAMS
Sie alles angeben, was Curl tun kann, einschließlich:
- Deaktivieren Sie die Curl-Meldungen, um die Konsole und das Protokoll nicht zu verstopfen:
-s
--connect-timeout 3
Zeitlimit für die Verbindung mit dem zu überprüfenden Dienst ein (in Sekunden): --connect-timeout 3
- Antwort-Timeout einstellen:
-m 7
- Deaktivieren Sie die Zertifikatüberprüfung für SSL (z. B. wenn ein selbstsigniertes Zertifikat verwendet wird): -
--insecure
- Geben Sie den Typ der http-Anforderung an:
-X POST
- Geben Sie die Überschriften an:
-H "Content-Type: application/json"
- Geben Sie den Anforderungshauptteil als Zeichenfolge oder Datei an. Beispiel für die Datei:
-d @request.json
Wir haben Benachrichtigungen deaktiviert und eine Zeitüberschreitung von 3 Sekunden festgelegt. bei Verbindung und 7 sek. um eine Antwort vom Dienst zu erhalten.
Achtung : Geben Sie die Parameterwerte wie im Beispiel in einfachen Anführungszeichen an. Leider ist Bash in diesem Sinne ziemlich zerbrechlich, und ein
versehentlich an die falsche Stelle
geflogener Schmetterling kann
mit schwer zu diagnostizierenden Fehlern zum
Tod des Universums führen.
Wir richten die Überwachung ein. Überprüfen Sie, ob alles in Ordnung ist:
sudo chmod +x ./monitoring.sh torsocks ./monitoring.sh
Das Skript sollte eine Nachricht des Formulars anzeigen:
2020-01-10 12:14:31 health-check "google front page": OK
SCHRITT 3. Passen Sie den Zeitplan an
Richten Sie einen Überwachungsplan in cron ein:
sudo crontab -e
Fügen Sie jede Minute eine Zeile hinzu, um google.com zu überprüfen:
*/1 * * * * torsocks < >/monitoring.sh >> < >/monitoring.log 2>&1
Fügen Sie jeden Tag um 11.00 Uhr einen Alarm hinzu, um die Überwachung selbst zu bestätigen. Übergeben Sie dazu den Parameter DAILY an das Skript:
0 11 * * * torsocks < >/monitoring.sh DAILY >> < >/monitoring.log 2>&1
2>&1
- Standardtechnik zur Umleitung von Fehlern in den Hauptausgabestream. Infolgedessen werden sie auch in das Überwachungsprotokoll aufgenommen.
Speichern Sie die Änderungen und rufen Sie sie mit dem folgenden Befehl auf:
sudo service cron reload
Weitere Informationen zum Konfigurieren von cron finden Sie beispielsweise
hier .
Daher wird jede Minute ein Überwachungsskript gestartet, auf das über gol auf google.com zugegriffen werden kann. Wenn die empfangene Antwort von der erwarteten abweicht, sendet das Skript eine Benachrichtigung im Telegramm an die Empfängerliste. Das Überwachungsprotokoll wird in der Datei monitoring.log verwaltet
Wenn Sie einen weiteren Dienst hinzufügen müssen, erstellen wir einfach eine neue Ini-Datei für diesen Dienst im Dienstordner und erstellen gegebenenfalls eine separate Empfängerliste. Alles andere wird automatisch funktionieren.
Wenn der überprüfte Dienst nicht mehr verfügbar ist, wird jede Minute eine Warnung gesendet. Wenn Sie den Dienst nicht schnell wiederherstellen können, können Sie Benachrichtigungen in den Bot-Eigenschaften im Telegramm vorübergehend deaktivieren.
Schauen wir uns nun die zusätzlichen Funktionen und die Implementierung von Skripten genauer an.
Nachrichtenvorlagen und emotionales Engagement
Um die Kommunikation mit dem Bot lebendiger zu gestalten, haben wir ihn Manechka genannt, den entsprechenden Bild-Avatar hinzugefügt und professionelle PR-Spezialisten mit der Erstellung von Nachrichtentexten beauftragt. Sie können unsere Leistungen nutzen oder nach Ihrem Geschmack verändern.
Zum Beispiel so:
oder auch so:
Warum nicht?
Der
Botname und der Avatar werden über
@botfather eingestellt .
Nachrichtenvorlagen befinden sich im
Vorlagenordner :
- curl-fail.txt : Nachricht, die gesendet wird, wenn curl einen Fehlercode ungleich Null zurückgibt . Spricht normalerweise über die Unmöglichkeit, den Dienst zu erreichen.
- daily.txt : tägliche Nachricht, die bestätigt, dass die Dienstüberwachung funktioniert.
- service-fail.txt : Nachricht gesendet, wenn die Serviceantwort anders als erwartet ist.
Lassen Sie uns die Anpassungsmöglichkeiten am Beispiel der eingebauten Nachrichtenvorlagen untersuchen.
Die Vorlagen verwenden Emojis. Habr zeigt sie leider nicht an.
Um Emojis auszuwählen, ist es bequem, die Suche auf
emojipedia.org zu verwenden :

Sie kopieren einfach das entsprechende Zeichen und fügen es in den Text der Vorlage ein (dies ist der übliche Unicode).
- curl-fail.txt:
, ... \"$MSMS_SERVICE_NAME\" \`CURL EXIT CODE: $EXIT_CODE\`
Wir haben den von uns angegebenen MSMS_SERVICE_NAME
( MSMS_SERVICE_NAME
Variable) und eine interne MSMS_SERVICE_NAME
mit dem Curl-Beendigungscode ( EXIT_CODE
) verwendet. Wir haben die Nachricht auch mit dem Telegramm-Mark-Down- Markup formatiert: Die Zeichen `` '' haben einen Rahmentext mit fester Breite. Da Anführungszeichen und Apostrophe offizielle Bash-Zeichen sind, werden sie mit dem Zeichen "\" maskiert. Variablennamen wird ein "$" vorangestellt.
Ergebnis:

- service-fail.txt:
, ... \"$MSMS_SERVICE_NAME\" , : \`$RESPONSE\`
Ergebnis:

Hier verwenden wir eine andere RESPONSE
: RESPONSE
. Es enthält die Antwort des Dienstes.
- daily.txt:
, ! , c : \"$MSMS_SERVICE_NAME\" ... ?
Ergebnis:

Fahren wir mit der Skriptimplementierung fort.
Überwachungsskript
monitoring.sh macht die automatische Erkennung einfach - entnimmt alle ini-Dateien aus dem Ordner services und führt für jede Datei das Hauptskript mit der Logik zum Prüfen und Senden von Warnungen aus:
Um eine tägliche Nachricht über den Überwachungsstatus zu generieren, kann dem Skript der Parameter DAILY übergeben werden.
Bitte beachten Sie, dass beim Start des Skripts der aktuelle Ordner in Dienste geändert wird. Dies ermöglicht es ini-Dateien, Dateipfade relativ zu Diensten anzugeben.
Skript zum Prüfen und Versenden von Alarmen
msms.sh enthält die grundlegende Logik zum Überprüfen eines Dienstes und zum Senden von Warnungen.
Mit Telegramm arbeiten:
Wir erstellen eine URL für den Zugriff auf die Telegramm-REST-API mit dem in der Datei gespeicherten privaten Schlüssel.
Die Funktion send_message verwendet curl, um Nachrichten an diese REST-API zu senden. Dabei wird die Empfänger-ID aus der in ini angegebenen Datei übernommen. In den Daten, die wir senden, geben wir an, dass wir das Nachrichten-Markup verwenden:
parse_mode="Markdown"
.
Drucken Sie die aktuelle Uhrzeit aus und laden Sie die Ini-Datei.
echo $(date '+%Y-%m-%d %H:%M:%S')
Die magische Linie
. $2
. $2
führt die als zweiter Parameter übergebene ini-Datei als normales Skript aus und trägt die darin angegebenen Werte in Umgebungsvariablen ein.
Laden Sie die erwartete Antwort aus der Datei herunter, wenn der Parameter
MSMS_EXPECTED_FILE
angegeben ist:
if [ -n "$MSMS_EXPECTED_FILE" ]; then MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")" fi
Führen Sie bei Bedarf eine Serviceprüfung durch, indem Sie Warnmeldungen senden:
RESPONSE="$(eval curl $MSMS_CURL_PARAMS \"$MSMS_SERVICE_ENDPOINT\")" EXIT_CODE=$? if [[ $EXIT_CODE != 0 ]]; then echo health-check \"$MSMS_SERVICE_NAME\" FAILED: CURL EXIT WITH $EXIT_CODE MESSAGE="$(cat ../templates/curl-fail.txt)" MESSAGE=$(eval echo $MESSAGE) send_message "$MESSAGE" elif [[ "$RESPONSE" != "$MSMS_EXPECTED" ]]; then echo health-check \"$MSMS_SERVICE_NAME\" FAILED: "$RESPONSE" MESSAGE="$(cat ../templates/service-fail.txt)" MESSAGE=$(eval echo $MESSAGE) send_message "$MESSAGE" else echo health-check \"$MSMS_SERVICE_NAME\": OK fi
Zuerst weisen wir die Variable
RESPONSE
dem Ergebnis des Befehls curl für diesen Dienst zu.
Ausdruck
EXIT_CODE=$?
Setzt das Ergebnis des letzten Befehls, d. h. locken. Wenn Sie eine Warnung senden müssen, wird die Vorlage aus der entsprechenden Datei gelesen und der Versand an die Empfänger
send_message
mit
send_message
.
Der letzte Block verarbeitet den Parameter DAILY:
if test "$1" = "DAILY"; then echo health-check \"$MSMS_SERVICE_NAME\" DAILY MESSAGE="$(cat ../templates/daily.txt)" MESSAGE=$(eval echo $MESSAGE) send_message "$MESSAGE" fi
Es wird eine Nachricht gesendet, die den Zustand der Überwachung selbst bestätigt.
Liste der Benutzer-IDs abrufen
recipient-setup.sh ruft die Telegramm-API auf, um die neuesten Nachrichten an den Bot zu senden:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates \ | python recipients-setup.py
Es verwendet Python-Magie, um die Ausgabe schön aufzulisten. Dies ist optional, Sie können einfach die gewünschte ID von json nehmen, die der Befehl ausgibt:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
Fazit
Auf diese Weise können Sie vorgefertigte Skripts und Nachrichtenvorlagen verwenden und nur beobachtbare Dienste und Listen für Benachrichtigungen einrichten. Sie können eine neue "Identität" für den Bot erstellen. und Sie können Ihre Entscheidung auf der Grundlage des Vorschlags treffen.
Als Optionen für die Weiterentwicklung bietet sich die Konfiguration und Verwaltung der Überwachung im Bot selbst an, auf Python kann man hier jedoch nicht verzichten. Wenn jemand die Hände vor mir hat, weißt du, wo du die Pull-Anfrage hochladen musst :-)