Zabbix. Was ist, wenn der Drucker keine Informationen über SNMP weitergibt?

Schönen Tag!



BildKDPV



Dieser Artikel ist ein kleines Handbuch, das in einer etwas künstlerischen Form geschrieben wurde. Der Artikel enthält viele Bilder, die sorgfältig in Spoilern versteckt sind.



Für wen ist dieser Artikel? Für unerfahrene Systemadministratoren, die mit UNIX-Systemen noch wenig vertraut sind, Zabbix, aber zentral Informationen von Druckern sammeln möchten.



Einleitend. Verfügbar:



  • Zabbix 5.0
  • CentOS 8
  • Ein Drucker, der nicht die erforderlichen Informationen zu Verbrauchsmaterialien über SNMP sendet (in diesem Handbuch wird Oki C834 als Beispiel verwendet).
  • Praktisch fehlende Kenntnisse über Zabbix, UNIX-Systeme
  • Es besteht ein großer Wunsch, Informationen über Verbrauchsmaterialien von Druckern zentral zu sammeln.


Gehen!



Gründe und Gründe



Faulheit ist der Motor des Fortschritts. Eines schönen Morgens wurde mir klar, dass ich zu faul war, um die im Büro installierten Drucker zu umgehen, um den Status von Verbrauchsmaterialien wie Tonerkartuschen, Trommeleinheiten, Bändern und Öfen zu überwachen. Sammeln Sie von Zeit zu Zeit auch die Indikatoren der Zähler der gedruckten Seiten - auf deren Grundlage wird eine Entscheidung über die Wartung des Druckers getroffen.



"Nun, so viel Zeit können Sie sparen, wenn Sie solche Informationen zentral sammeln!" - Dieser Gedanke hat meinen Kopf nicht verlassen. Es wurde beschlossen, ein Überwachungssystem einzusetzen. Zabbix wurde mit einem Hinweis älterer Kameraden ausgewählt - mit der Erwartung, dass neben Druckern auch die Überwachung von Servern und Netzwerkgeräten schrittweise angeschlossen wird.



CentOS 8 wurde als Betriebssystem installiert - denn ich war zumindest ein wenig damit vertraut. Vielleicht schreibt gerade jemand, dass Sie ay-ay-ay UNIX-Systeme studieren müssen, wenn Sie bereits mit der Systemadministration begonnen haben. Meine Antwort lautet ja, Sie haben absolut Recht.



Das Studium der Handbücher zur Überwachung von Druckern versprach ein äußerst einfaches Verfahren - snmpwalk, Isolieren der erforderlichen Parameter, Verbinden der OID mit Zabbix, Gewinn. Die Realität hat dieses schöne Bild ein wenig erschüttert. Es gab keine Indikatoren für den Zustand der Verbrauchsmaterialien. Es gab nicht einmal annähernd ähnliche. Allgemein.



Artikel Abrufen von Statistiken von Kyocera-Geräten in Zabbixveranlasste die Suche nach proprietärer Software zur Überwachung des Druckers und zum Abfangen der Kommunikation zwischen der Software und dem Drucker. Es wurde gefunden - Configuration Tool, ein Dienstprogramm von Oki zur Überwachung des Status von Druckern. Herunterladen, ausführen und…. Über das SNMP-Konfigurationstool werden Informationen zum Druckernamen, zur MAC-Adresse und zur Softwareversion empfangen. Informationen zu Verbrauchsmaterialien werden im Hauptteil der TCP / IP-Pakete übertragen.



"Nun, großartig, das Abenteuer beginnt", dachte ich. Das Nachdenken über Lösungsoptionen führte zu der folgenden logischen Kette:



  1. Zu diesem Zeitpunkt weiß ich nicht, wie und wie die Anforderung, die das Konfigurationstool an den Drucker sendet, korrekt simuliert werden kann.
  2. Der Drucker verfügt über eine eigene Webseite, auf der Informationen zum Status der Verbrauchsmaterialien und zur Anzahl der gedruckten Seiten angezeigt werden
  3. Die Lösung für mein Problem besteht darin, Informationen nach einem Zeitplan von der Webseite des Druckers zu extrahieren (zu analysieren) und diese Informationen irgendwie an Zabbix zu übertragen.


Die Suche nach einem Parsing-Tool ergab die folgenden Ergebnisse:



  1. Bash
  2. PHP
  3. Python


Hinweis: Ich bin mir ziemlich bewusst, dass es mehr Parsing-Tools gibt, als in dieser Liste aufgeführt sind. Es macht jedoch keinen Sinn, alle anzugeben, und dann werden Sie verstehen, warum.



Ich habe mich für Bash entschieden - und hier ist der Grund:



  1. Auf den meisten UNIX-Systemen vorinstalliert. Ich muss keine zusätzliche Software installieren.
  2. Einfachheit. Die Befehle sind logisch und nach einigem Studium der Syntax durchaus verständlich.
  3. Die Notwendigkeit, UNIX-Systeme zu lernen. Offensichtlich ist es nicht überflüssig, die Befehlssyntax in dieser Richtung zu studieren.


Analysieren Sie eine Druckerwebseite



Bevor wir mit dem Parsen beginnen, schauen wir uns an, was eine Druckerwebseite ist.



Hinweis
, - . , , , -.



-



Drucker-Webseite
image



Beachten Sie, dass sich oben rechts auf der Seite Tonerstatusanzeigen befinden. Jetzt bleibt uns zu verstehen, wie diese Indikatoren auf der Webseite erscheinen. RMB-> Inspizieren. Das folgende Bild öffnet sich uns.



Überprüfung des Seitencodes
image

image



Beachten Sie, dass die Tonerwerte tatsächlich über die Seite /status.htm abgerufen werden.

Wir sehen, dass die Tonerwerte in Tags übertragen werden:



Anschließend werden die Werte mithilfe von JavaScript auf zehn gerundet und in die Seite eingefügt.



Gehen Sie zu Seite 192.168. ***. *** / status.htm - und ja, wir sehen die Tonerwerte, die wir wirklich brauchen, auf dieser Seite



status.htm
image



Wir wissen jetzt, wo die gewünschten Tonerstatuswerte gespeichert sind. Beginnen wir mit dem Parsen.



Parsing



Hinweis: Im Folgenden wird beschrieben, wie Sie ein Skript zum Parsen einer Seite mit Beispielen und Bildern erstellen. Ich werde versuchen, die Beschreibung auch für diejenigen klar zu machen, die mit Bash sehr wenig vertraut sind. Wenn Sie das Ergebnis bereits lesen möchten, scrollen Sie bitte weiter.

Also Bash. Der Rubikon wurde, wie vor zweitausend Jahren gesagt wurde, an den Ufern des gleichnamigen Flusses übergeben.

Zunächst schlage ich vor, dass Sie sich mit der Syntax der Sprache vertraut machen . Es ist extrem einfach und unkompliziert - aber es hilft uns bei der Skripterstellung und Automatisierung.



Als nächstes achten wir auf die cURL - Befehlszeile und das Tool, wie auf der offiziellen Website angegebendieses Werkzeug. cURL unterstützt eine Vielzahl von Protokollen, von denen wir Unterstützung für HTTP benötigen. Denken Sie daran, dass dies das Protokoll ist, das zur "Kommunikation" mit der Webseite des Druckers verwendet wird.

Schreiben wir die erste Anfrage:



$ curl 192.168.***.***/status.htm


Terminalausgang
image



Als Reaktion darauf wird eine große Menge an Informationen direkt in die Befehlszeile ausgegeben, was nicht sehr bequem zum Lesen im Terminal ist, ganz zu schweigen von der Verarbeitung dieser Informationen.

Lassen Sie uns die Ausgabe in eine Datei umleiten - dies ist natürlich bequemer. Das Sonderzeichen '>' hilft uns dabei.



$ curl 192.168.***.***/status.htm > Oki.txt


Öffnen Sie die resultierende Datei im Vi-Editor



$ vi Oki.txt


Oki.txt im Vi-Editor
image



Viel besser, nicht wahr? Wir brauchen jedoch sowieso nicht die gesamte Seite. Sie benötigen lediglich die Tonerstatuswerte. Wir beginnen die Daten zu isolieren. Hier hilft uns grep, ein Dienstprogramm, das nach Zeilen sucht, die einen Wert enthalten, der einem bestimmten regulären Wert entspricht.



Schauen wir uns die Tags an, die Tonerwerte enthalten. Wir sehen, dass wir in ihnen den gleichen Ausdruck 'value = ”***”' treffen.



Hinweis
? - 100.



Hinweis
, “hidden”. , . . – , ‘value=”***”’



image



Wir "rippen" die durch cURL erhaltenen Ergebnisse. Um den Prozess etwas zu beschleunigen und zu visualisieren, geben wir die Werte direkt an das Terminal aus.



$ curl 192.168.***.***/status.htm | grep ‘value=”***”’ 


Grep Ergebnisse
image



Ausgezeichnet. Prägnant genug Schlussfolgerung. Als nächstes müssen wir den Text entfernen und nur die numerischen Werte belassen.



Hinweis
, – « Zabbix’ !». , . – . .



Wir filtern Textdaten heraus und lassen nur numerische Werte übrig. Grep mit der -Eo-Flagge hilft uns wieder dabei. Es können nur numerische Werte angezeigt werden.



$ curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’


Zahlen ausgeben
image



Wir haben also die erforderlichen Zahlenwerte erhalten. Lassen Sie uns nun unsere Ausgabe in separaten Zeilen analysieren, damit wir sie separat in Textdateien speichern können. Hier bietet sich sed an, ein Dienstprogramm für den Stream-Texteditor. In unserem Fall ist das Wichtigste, dass sed einzelne Linien isolieren kann - genau das, was wir brauchen.



Curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p


Sed Ausgabe
image



Werfen wir einen Blick auf den sed-Teil. 1p - Ausgabe der ersten Zeile. -n - schließt alles außer der angegebenen Zeile aus. Wie Sie sehen können, zeigt die Ausgabe nach diesem Befehl nur den numerischen Wert des Cyan-Toner-Status an.



Beginnen wir nun mit dem Schreiben eines Skripts.



Bash-Skripte weisen im Vergleich zu denselben Bat-Skripten eine gewisse Besonderheit auf. Sie müssen mit einem Schebang beginnen - "#!". Weitere Zeilen, die mit # beginnen, werden als Kommentare interpretiert.



Das Skript sieht folgendermaßen aus:



#! /bin/bash 
#This script received toner level's from Oki_834
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p >/var/cyan.txt
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 2p >/var/magenta.txt
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 3p >/var/yellow.txt
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 4p >/var/black.txt


Fügen Sie die Skriptdatei zu crontab hinzu und automatisieren Sie dadurch deren Ausführung. Der Autor hat * / 15 * * * * - Ausführung alle 15 Minuten eingestellt.



Fazit: Die Webseite des Druckers wird automatisch analysiert. Wir erhalten die benötigten Zahlenwerte und speichern sie in dem von uns benötigten Verzeichnis.



Empfangene Werte an Zabbix übertragen



Kommen wir nun zur Datenübertragung an Zabbix.



Hinweis
, , . , , .



Lassen Sie uns ein neues Element erstellen. Wir nennen es wie wir wollen, wir geben den Typ Zabbix Agent an.



BEACHTUNG
Zabbix-server Zabbix-agent. , , Zabbix-agent.



Das Interessanteste und Wichtigste, was wir derzeit haben, ist der Schlüssel. Wir brauchen vfs.file.contents [Datei, <Kodierung>]. Datei ist der absolute Pfad zur Datei.



Erstellen Sie ein Element in Zabbix
image



Wir geben unseren Pfad zur Datei an und überprüfen die Richtigkeit. Auf der Testausgabe sollten wir unseren Schwarztonerwert sehen.



Test erfolgreich abgeschlossen
image



Fazit: Wir haben Daten nach Zabbix migriert und können jetzt den Status von Verbrauchsmaterialien zentral steuern.



Fazit



Wir haben es geschafft, Daten durch Parsen von Webseiten zu erhalten. In diesem Beispiel wurde der Oki 834-Drucker verwendet und die Tonerdatenerfassung war erfolgreich. Ich erkläre verantwortungsbewusst, dass dieselbe Methode verwendet wurde, um Daten über den Zustand von Trommeleinheiten, Band und Ofen zu erhalten.



Screenshot Beweise
image



image



So ist es möglich, Informationen über Verbrauchsmaterialien von fast allen Druckern und nicht nur über Drucker zu erhalten. Das Parsen ist ein ziemlich praktisches Tool, mit dem ich sehr gerne gearbeitet habe. Und wenn mein Artikel mindestens einer Person hilft, war er nicht umsonst.



Ich möchte auch meine tiefe Dankbarkeit ausdrückenRothaarige, akozhevnikov97und eine Person, die für ihre Hilfe beim Schreiben des Artikels anonym bleiben wollte. Danke an alle!



All Articles