Wie ich Zabbix beigebracht habe, meinen Knoten im Auge zu behalten und Probleme zu melden

Hallo Habr!

Ich arbeite derzeit mit einem Team meiner Kollegen an einem Blockchain Messenger-Projekt. Wen kümmert es - sehen Sie die Links im Profil oder fragen Sie in den Kommentaren.

Die Blockchain-Entwicklung ist ein neues und unbekanntes Gebiet, daher müssen Sie manchmal sehr ungewöhnliche Tools verwenden. Wo ist das Mikroskop und die Nägel! Deshalb habe ich mich entschlossen, diesen Blog zu behalten, um verschiedene interessante Fälle aus der Praxis zu erzählen. In dem heutigen Beitrag geht es darum, wie ich sofortige Benachrichtigungen über den Status meines Knotens einrichte, damit ich ihn in diesem Fall schnell wieder zum Leben erwecken kann.



Der Plan, dem ich folgte


Die Aufgabe, die ich mir selbst gestellt habe, war folgende: Jedes Mal, wenn ein Knoten abstürzt oder nicht mehr funktioniert, sollte ich sofort benachrichtigt werden. Aber wir leben in einem fortschrittlichen Zeitalter und sind es gewohnt, alle wichtigen Informationen sofort zu erhalten, oder?

Ich habe beschlossen, dass ich Zabbix an Slack befestigen werde, um diese Aufgabe zu erfüllen (wir haben ein funktionierendes Projektwerkzeug). Dementsprechend überwacht Zabbix den Knoten und sendet mir Fehlermeldungen in Slacks PM.

Implementierung: Schritt für Schritt


Schritt 1: Zabbix


Natürlich verfügt Zabbix nicht über vorkonfigurierte Standardüberwachungstools für unseren Knoten. Daher bestand der erste Wunsch darin, die Verfügbarkeit des Knotenports mithilfe des Schlüssels net.tcp.listen[port]. zu bestimmen net.tcp.listen[port].

Aber es gibt ein "aber": Es kommt vor, dass der Knoten aktiv ist, er überwacht den Port, aber er funktioniert nicht richtig. Und hier wurde ich mit der Tatsache konfrontiert, dass Sie das Hauptzeichen für die Leistung eines Knotens bestimmen müssen.

Was soll Noda tun? Richtig, wachsen. Hier wird Wachstum das Hauptzeichen sein. Deshalb habe ich mich für den Schlüssel system.run[command, mode] .

Zusammen mit curl -s http://127.0.0.1:36666/api/blocks/getHeight .

Als Ergebnis haben wir eine Zeichenfolge im JSON-Format des Formulars erhalten

 {"success":true,"nodeTimestamp":XXXXXXX,"height":XXXXXXX} 

Das jq-Paket (https://stedolan.imtqy.com/jq/) half bei der Lösung des JSON-Parsing-Problems. Eine einfache Ergebnisübertragung über Pipe curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height {6666 / api / blocks / getHeight curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height und anstelle der lang erwarteten Höhe erhielten wir eine Antwort mit Informationen zum Befehl curl .



Die redundanten Informationen mussten entfernt werden, und dann kam ein Assistent - der -s , auch bekannt als -silent . Verwenden Sie daher den Zabbix-Schlüssel system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height] system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height] wir die system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height] der gewünschten und für die Überwachung bequemen Ansicht XXXXXXXXX.



Ein Auslöser war auch erforderlich, um die geplante Warnung zu konfigurieren. Der Plan war folgender: Vergleichen Sie den letzten und den vorherigen Wert, damit der Auslöser funktioniert, wenn das Wachstum kleiner als eins ist.

{ADAMANT Node Monitoring:system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height].change()}<1

Schritt 2. Zabbix to Slack




Die nächste Aufgabe besteht darin, den Auslöser in Slack zu benachrichtigen. Als Grundlage habe ich das Material https://github.com/ericoc/zabbix-slack-alertscript genommen .

Die Anweisungen sind klar, aber die Verwendung von Emoticons zur Unterscheidung zwischen Schweregrad ist nicht ernst. Die Hervorhebung von Farben ist viel interessanter. Nach der Verarbeitung des Skripts bleibt Folgendes:

  url='********************************' username='Server' to="$1" subject="$2" recoversub='^RECOVER(Y|ED)?$' if [[ "$subject" == 'Warning' ]]; then color='#EBFF00' elif [ "$subject" == 'Not classified' ]; then color='#D8E3FF' elif [ "$subject" == 'Information' ]; then color='#0049FF' elif [ "$subject" == 'Average' ]; then color='#FFC200' elif [ "$subject" == 'High' ]; then color='#FF5500' elif [ "$subject" == 'Disaster' ]; then color='#FF0000' else color='#00FF06' fi message="${subject} \n $3" payload="payload={\"attachments\": [{\"color\": \"${color}\", \"text\": \"${message}\"}]}" curl -m 5 --data-urlencode "${payload}" $url 

Schlussfolgerungen


Aus moralischen Gründen ein paar Worte, warum eine bequeme Überwachung so wichtig ist. Je schneller Sie die Situation kennenlernen, desto schneller werden Sie sie korrigieren und desto weniger ausgeprägt sind die Folgen. Wie sie sagen, wird die erhöhte Zeit nicht als gesunken angesehen. In Slack gibt es unter anderem Gruppenchats, damit das Team eine Verbindung herstellen kann, um das Problem zu beheben und Aktionen zu koordinieren. Unser Projekt hat übrigens Open Source Code und wir respektieren andere Open Source Projekte sehr. Mein Experiment hat einmal mehr gezeigt, dass Open Source gut ist.

Source: https://habr.com/ru/post/de440216/


All Articles