Monitoring: Was macht ihr Netzwerk-Drucker ?

Monitoring: Was macht ihr Netzwerk-Drucker ?

Die Problematik

Ein Netzwerk-Drucker ist praktisch, nicht war ?
Dieser kann in ihrem Büro angeschlossen sein, in irgend einem anderen Lokal im Gebäude, irgendwo in der Stadt, … oder gar auf einem anderen Kontinent !
Wie kann man feststellen ob er funktionbereit ist, ob er genügend Papier beinhaltet, ob die Tinte ausreicht oder ob er keine Fehlfunktion aufweist ?
Es wäre sicher besser er sei erreichbar, aber das kann er nicht für jedermann sein.
“Hallo, wir möchten ein Mailing von 1500 Verträge von ca. 20 Seiten ausdrucken und es bleiben nur noch etwa 6000 Seiten in seinen Magazinen. Könnt ihr vor 19 Uhr nachladen ?”
klingt doch besser als :
“Hallo, wir hatten gestern Abend einen Druckvorgang von 1500 Verträge mit jeweils 20 Seiten, aber es gab ein Papiermangel. Könnt ihr von diesem nachladen, wir müssen auf neu anfangen.!”

Die Lösung

Die meisten Drucker können mit dem SNMP Protokol angesprochen werden. Dazu werden alle Infos die sie mitteilen können in einer MIB-Datenbank gespeichert, deren Inhalt über OID-Adressen vom Typ “1.3.6.1.2.1.2.2.1.6” baumartig aufgebaut ist. Beim ansprechen dieser Adresse gelingt man an deren Inhalt, und weiterhin an den Inhalt deren Tochter-Abzweigungen, je nach Art der Befragung.

Die Durchführung

Der Baum (oder die MIB-Adressen) ist nicht so ganz standartmäßig aufgebaut, schon deshalb weil nicht jeder Drucker die gleichen Funktionen besitzt.

Man muss also zunächst das Buch auffinden in dem die OID-Adressen für jenen bestimmten Drucker geschildert werden :

  1. Manche Hersteller bieten dies auf ihrer Installation-CD neben den notwendigen Treibern. Aber meistens ist dies nur für industrielle Modelle gängig.
  2. Es gibt kleine Softwaren die direkt den Drucker ansprechen und dessen OID-Baum aufzeichnen können zu einer Liste, Tabelle, mit deren Beschreibung und Inhalt.
  3. Unter Linux gibt es Befehle die dies bewerkstelligen. Danach muss man die Ergebnisse noch filtern und formatieren, was manche Lernseiten im Internet vorschlagen.
    Zum Teil jetzt auch diese !

Linux-Befehle

Der Befehl “snmpwalk” ermöglicht es den MIB-Baum zu durchgehen. Man installiert ihn unter Fedora (und wahrscheinlich unter allen RPM-Distributionen) mit dem Paket “net-snmp-utils”.

Beispiel (IP-Adresse des Druckers : 192.168.0.146)

Das Ergebnis ist eine recht beeindruckende Shrittrolle von Zeilen die man nun analysieren muß. Mit einer Ergänzung des Befehls kann man das Ergebniss in einer Text-Datei (*.txt) speichern und es mit einem Text-Editor(z.B.: gedit oder kate) nach Suchbegriffe durchforschen.

In meinem Fall enthällt die Datei folgendes

Daten Formatierung : die Analyse

Beim durchgehen der Zeilen fällt einem schnell auf das sie auf folgender weise aufgebaut sind :

Feldbezeichnung = Format : Inhalt.

Beispiel:

  • hrSystemUptime.0 = Timeticks: (282364664) 32 days, 16:20:46.64
    Diese Zeile verrät das der Drucker seit 32 Tagen, 16 Stunden, 20 Minuten und 46,64 secondes durchgehen läuft.
  • Folgende Zeilen geben Erkenntniss über die Füllrate der Tintepatronen :
    mib-2.43.11.1.1.9.1.1 = INTEGER: 97
    mib-2.43.11.1.1.9.1.2 = INTEGER: 70
    mib-2.43.11.1.1.9.1.3 = INTEGER: 82
    mib-2.43.11.1.1.9.1.4 = INTEGER: 77

Also, wenn man nun bei jeder Zeile die Feldbezeichnung und dessen Inhalt in einer Hash-Tabelle speichert, kann man diese durch einen einfachen, aber universalen Befehl abfragen, und das für jeden beliebigen Bedarf.
Um dies zu erreichen kann man natürlich von dieser Text-Datei ausgehen, aber weil Perl SNMP-Module besitzt braucht man sich dazu keinen Zwang anlegen.
In dem man die Optionen des Befehls ändert kommt man zu brauchbarere Ergebnisse:

Der Inhalt wirkt leicht verschieden :

  • Die Zeilen von 620 bis 623 weisen auf die OID-Adressen der Farben der Tintepatronen :
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: “R..servoir noir”
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 = STRING: “R..servoir jaune”
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.3 = STRING: “R..servoir cyan”
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.4 = STRING: “R..servoir magenta”
  • Daraus kann man schließen das die Zeilen von 632 bis 635 auf deren Füllrate aufweisen :
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: 97
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.2 = INTEGER: 70
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.3 = INTEGER: 82
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.4 = INTEGER: 77

Skript : die Bash-Version

Es gibt immer mehrere möglichkeiten ein Programm aufzubauen. Es hängt vor allem von den Entscheidungen des Programmierers ab. Soll es sehr spezifisch oder etwas mehr universal und anpassbar sein, mit externen Objekten wie Dateien oder einer Datenbank ausgestückt sein ?

Und hier das Ergebniss im Terminal !

Jetzt ist es auch gut machbar Benachrichtigungen für einen Nagios-Monitor einzubauen.

Skript : die PERL Version

Dank eines Moduls wird der Drucker direkt angesprochen ohne daß das Ergebnis in einer Datei zwischen gespeichert werden muß. Die Ausführung gewinnt dadurch an Zeit, was in einer Umgebung mit einem Nagios-Monitor eine große Rolle spielt.

Darunter das Ergebniss angezeigt im Terminal-Fenster!

Zum Beachten : die Tinte hat zwischen den beiden Skript-Versionen etwas abgenommen …

Skript : Die Python-Version

Wie in der Perl-Version wird man hier ein zusätzliches Modul nutzen, und zwar PySNMP, das zuvor installiert werden muss. Es wird im Skript mit dem Befehl “import” gerufen.

Es verbleibt das Resultat noch lesbarer zu gestallten.I

Monitoring : Webseiten (oder Webapplikationen) Überprüfung

Netzwerküberwachung: Prüfung von Webseiten (oder Web-Applikationen)

Das Problem

Wie stellt man sicher ob die Authentifizierung auf einer Webseite richtig funktioniert und ob der Inhalt der entsprechend ausgeblendende Webseite den programmierten Entwartungen entspricht ?

Die Lösungen

  1. Man kann sich anmelden und die Webseite überprüfen.
    Wenn die Authentifizierung fehlschlägt ist man bereits gewarnt : das fängt ja schon gut an !
  2. Im Falle eines Erfolgs muss man nun überprüfen ob der ausgeblenden Inhalt allen programmierten Erwartungen entspricht, ob alle Bilder angezeigt werden, ob keine Sprachfelher seit dem letzten Eingriff aufgetreten sind, u.s.w. . Dies kann langwierig und anspruchvoll werden, vor allem wenn, wie in diesem Fall, die Seite auf mehreren Servern (Produktion, Experimentell, Test, …) überprüft werden soll.
  3. Warum nicht diesen Auftrag dem Nagios-Monitor überlassen ?
    Ich habe dafür den folgenden Perl-Skript erstellt damit Nagios diese Aufgabe ausführt, und daß in geraumer Zeit als es auszuprechen !

Der Perl-skript

Er stellt die Verbindung zu einer Web-Seite her, die eine HTML-Authentifizierung benötigt (Andere Arten sind durch die Installation von weiteren Perl-Modulen möglich).Sein Ziel ist :

  • Funktioniert die Authentifizierung ?
  • Befindet sich die Antwortzeit in akzeptablen Grenzen ?
  • Ist der Seiteninhalt im Einklang mit den Erwartungen ? (gleiche Größe, gleichen Inhalt, …) ?
  • Ist eventuell die Seite gleich mit deren auf einem Spiegelserver ?

Prinzip :

Ohne zu sehr ins technische Detail zu gehen …

  • Man verbindet sich an einer Webseite mit der erforlichen Authentifizierung, in dem man den Benutzername und das Passwort überbringt. Es wird bevorzugt für diese Verbindung einen eigentlichen Benutzer zu definieren.
  • Man muß auch für die Dauer dieser Verbindung ein Sitzungscookie verwalten.
  • Um zu der ersehnten Webseite zu gelangen muß man, je nach Gestalltung, Menüs auswählen, auf Links klicken oder auch Formulare ausfüllen können.
  • Während einer ersten manueller Verbindung wird eine Referenzdatei(Modell) der zu analysierenden Webseite erstellt. Natürlich sollte diese das erste Mal von ihrem Autor überprüft werden.
  • Bei den folgenden Verbindungen wird die Seite in einer Tabelle gezwängt. Das ermöglicht den Einsatzt von erweiterten Perl-Funktionen.
  • Schließlich werden die Ergebnisse in einer von Nagios interpertierbaren Nachricht überbracht, damit dieser sie auf seiner Schnittstelle und parametrierten E-mails anzeigen kann.

Der Skript

Der Skript ist anonymiert ! Es wird daher notwendig sein, die IP-Adressen, das “Login”, das “Password” (Kennwort) und den “User” durch die geeigneten Werte zu ersetzen.

Man muß wahrscheinlich auch an des Struktur des Skriptes nacharbeiten, um den Weg zu der analysierenden Web-Seite nach zu vollziehen.