Erstellen einer Vorlage für Zabbix am Beispiel des DVR Trassir SDK

Der Zweck der Erstellung der Vorlage besteht darin, die Überwachung von Videoüberwachungssystem-Servern basierend auf Trassir-Registraren unter der Kontrolle der gleichnamigen Linux-basierten Software über den SDK-Webserver zu automatisieren.

Das Trassir SDK ist in den Webserver-Einstellungen enthalten. Dort müssen Sie auch ein Kennwort angeben. Gemäß der Dokumentation des Herstellers müssen Sie kein separates Konto erstellen, um Messwerte über den Server zu erhalten.

Das Trassir SDK bietet auf Anfrage Zugriff auf den Serverstatus

https://{ip   }:{ }/health?password={ SDK} 

Wenn Sie diesen Link über einen Browser öffnen, wird eine Meldung angezeigt, dass das verwendete Zertifikat unsicher ist und Sie den Anweisungen des Browsers folgen müssen, um fortzufahren.

Für ein bestimmtes Beispiel erhalten wir im Antworttext Folgendes:

 { "disks": "1", "database": "1", "channels_total": "13", "channels_online": "13", "uptime": "882232", "cpu_load": "33.96", "network": "1", "automation": "1", "disks_stat_main_days": "16.41", "disks_stat_priv_days": "0.00", "disks_stat_subs_days": "16.41" } /* Meanings of values: -1 - undefined value 0 - bad health (error) 1 - good health (ok) Values for channels are channel counters. Value of cpu_load is given in percents. 

Der erste Teil der Ausgabe vom Zeichen {zum Zeichen} entspricht der Dokumentation und ist eine standardisierte Ausgabe des JSON-Formats, die der Dokumentation entspricht, und dann gibt es eine Beschreibung der Ausgabe, die nicht dem Standard entspricht.

Zuvor mussten Sie, um diese Ausgabe im Zabbix-Überwachungssystem zu verwenden, ein eigenes Skript schreiben, das auf dem Agenten verwendet wurde, um die erforderlichen Daten abzurufen. Bei diesem Ansatz müssen Sie entweder die Antwortdatei speichern und ihre Relevanz überwachen oder jedes Element separat anfordern, d. H. Verwenden Sie 11 Abfragen anstelle von 1.

In der Version von Zabbix 4.0 wurde ein Agent-Agent-Datenelementtyp angezeigt, der es ermöglicht, Daten über http- und https-Protokolle zu empfangen und zu verarbeiten sowie abhängige Elemente, die aus den Hauptprotokollen berechnet werden.

Die Idee ist, eine Serverantwort in ein Textdatenelement zu bekommen und dann die erforderlichen Datenelemente daraus auszuwählen.

Zunächst definieren wir Makros für die Portnummer und das Passwort für die Vielseitigkeit und Sicherheit unserer Vorlage.

Wir erstellen eine Vorlage und fügen ein Datenelement mit dem Typ "HTTP-Agent", einen gewünschten Schlüssel, die URL https: // {HOST.IP}: {$ TRASSIR_SDK_PORT} / health und das Kennwortanforderungsfeld {$ TRASSIR_SDK_PASS} hinzu. Hier ist {HOST.IP} ein Makro, das beim Hinzufügen einer Vorlage zum Host in die Host-IP-Adresse konvertiert wird.

Wie wir bereits zuvor experimentell herausgefunden haben, entspricht diese Anforderung nicht vollständig dem JSON-Format und funktioniert einfach nicht, um Daten daraus zu extrahieren.

Wir werden die neue Zabbix-Funktionalität verwenden und den regulären Ausdruck \ {(\ n |.) * \} Auf der Registerkarte "Vorverarbeitung" der Datenelementvorlage mit der Ausgabe \ 0 hinzufügen, die nur Daten im JSON-Format zurückgibt.

Wen interessiert es, warum das so ist?
Das Entwickeln solcher Ausdrücke für Anfänger ist im visuellen Editor viel einfacher. In diesem Ausdruck suchen wir nach einem bestimmten Zeichen für die öffnende geschweifte Klammer. Da diese Klammern in regulären Ausdrücken verwendet werden, muss vor dem Zeichen ein Backslash angegeben werden. Die JSON-Daten können beliebige (in der Tat nein, aber lassen Sie uns diesen Moment weglassen) Zeichen sowie einen Zeilenvorschub enthalten. Diese Zeichenoptionen, die einen Punkt oder ein Zeilenvorschubsteuerzeichen angeben \ n, sind in Klammern mit einem vertikalen Balken angegeben. Hinter den Klammern befindet sich ein Sternchen, das angibt, dass das gefundene Zeichen oder der Zeilenvorschub unendlich oft wiederholt werden kann. Als nächstes kommt die Verschlussklammer. Die Ausgabe \ 0 bedeutet, dass alle gefundenen Sequenzen angezeigt werden.

Als nächstes wird ein abhängiges Datenelement erstellt, für das das Hauptdatenelement die zuvor im JSON-Format empfangene Antwort angibt, und die Vorverarbeitung wird mit dem Schritt "JSON-Pfad" angezeigt, mit dem Sie auf jedes Datenelement zugreifen können, indem Sie den JSON-Pfad angeben. In unserem Beispiel befinden sich alle Daten auf der obersten Ebene, daher geben wir für alle Elemente $ .disks usw. an.

Es müssen nur noch Trigger erstellt werden, die nach neuen Daten, deren Eingabe in normale Bereiche sowie optionalen Grafiken suchen.

Es stellt sich heraus, dass wir mit regulären Methoden von Zabbix sehr einfach und schnell Daten von einem externen System erhalten haben, dessen Ausgabe nicht vollständig dem Standard entspricht. Das Fehlen externer Skripte vereinfacht das Verständnis des Überwachungssystems und erhöht die Wartungsfreundlichkeit.

Die angegebene Vorlage ist auf dem Austauschportal share.zabbix.com verfügbar .

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


All Articles