Mittwoch, 16. Juli 2008

check_printer – Überprüft Papierfächer, Toner, Tinte und Kostenstellen bei Druckern

Für einen größeren Kunden entstand ein Nagios Plugin um eine größere Anzahl von Druckern und Kopierer im Blick zu haben. Besonderen Augenmerk wurde bei der Entwicklung auf die Kompatibilität mit verschiedenen Druckern gelegt ohne dabei Features einzusparen. Als wichtigsten Punkt bietet das Plugin den System Status des Druckers. Es zeigt alle Systemmeldungen aus dem SNMP. Dabei filtert es unwichtige Meldungen wie „Standby“ aus und bewertet die Meldungen nach Wichtigkeit, damit der Nagios nicht unnötig Alarm schlägt. Dabei werden sowohl die „Servity“ im Codes als auch die Ricoh Codes mancher Geräte ausgewertet. Sollte das nicht ausreichen ist können zusätzlich Listen für unwichtige oder kritische Meldungen gepflegt werden.

Weiterhin ist es möglich die Füllstände aller Toner/Tinenpatronen zu überwachen. Meistens kann man an dieser Stelle auch Teile wie den Tonerrestbehälter einsehen. Natürlich liefert das Plugin auch perfdata damit man auch später auswerten kann, wie lange der Toner gehalten hat oder wie viele Seiten in diesem Zeitraum gedruckt wurden. Die Anzahl der bearbeiteten Seiten kann über die internen Counter ausgelesen werden. Natürlich wird auch hier perfdata geliefert. Viele Drucker und Kopierer enthalten eine ganze Menge verschiedener Zähler für verschiedene Fächer und Drucktypen.

Zusätzlich kann das Plugin auch alle Papierfächer und Einzüge überwachen und die Daten als perfdata ausgeben. Oft lassen sich allein damit präzise formulierte Beschwerde begegnen wie „Der Drucker druckt nicht“. Auch herausgezogene oder falsch bestückte Papierfächer kann man so aus der ferne erkennen.

Als kleines Goodie am Schluss kann das Plugin auch Kyocera Kostenstellen / Accounting auslesen. Die Entwicklung dieses Programmteils war etwas aufwändiger, weil die Authentifizierung etwas kryptisch funktioniert und ich keine brauchbare Dokumentation gefunden habe. Es scheint auch generell keine Programme zu geben die Kostenstellen unter Linux auslesen können. Aber für unsere Kunden scheuen wir natürlich keine Mühen ;-).

Wer Interesse an dem Plugin hat kann es gerne auf unserer Website im Downloadbereich herunterladen. Für Verbesserungsvorschläge und Anregungen bin ich dankbar.

21 Kommentare:

prego hat gesagt…

Supertolles Plugin! Danke dafuer!! :-)

prego hat gesagt…

aehm, zeile 258, "magios" ich vermute da einen tippfehler :-)

lg /me

jk hat gesagt…

Vielen dank für den Hinweis! Den Fehler hab ich behoben,

Ich hab eine neue Version hochgeladen, welche noch ein paar geänderte SNMP Warn/Critical Codes enthält (Zeile 213/233). Im Laufe der Zeit haben verschiedene Codes beim Kunden zu Fehlalarmen geführt, so dass wir einige entfernen mussten. Über Feedback zu SNMP Codes sind wir jederzeit dankbar!


Gruß,
Jan

woweil hat gesagt…

Das Tool ist vom Prinzip her extrem praktisch, da man es auch scriptgesteuert zur Auswertung von Druckerzuständen nutzen kann.

Ein wichtiges Kriterium fehlt jedoch meines Erachtens: Bspw. die Seriennummer des Toners oder auch anderer Austauschteile.
Ein Aufruf von bspw. ./check_printer.sh 22.1.133.30 public toner 1 0.2 ergibt
OK - Black Print Cartridge HP C8550A 71% (17750 of 25000 left) | toner=17750toner/ink;5000;0;0;25000

Hier wäre es sehr praktisch, wenn man die Seriennummer des Toners -für dieses Beispiel- angezeigt würde.

Ebenso wäre es schön, wenn sich mehrere Parameter zeitgleich aufrufen ließen (bspw. hardware toner)

Mit freundlichen Grüßen

Wolfram

Anonym hat gesagt…

Hi, ich habe mal eine Frage, wie funktioniert das Plugin hinter einem Print Server? ich kriege da nur unknown zurück
Mit freundlichem Gruß,
jj

Nudge hat gesagt…

Ein sehr cooles Teil! :-)

Lutz Walther hat gesagt…

Hallo,

vielen Dank für ein vielseitiges Tool. Leider hat es kleine Schwächen
(die hier dargestellten Meldungen entstammen einem leicht modifizierten Plugin;
die Zeilen 57 bis 78 wurden auskommentiert):

1. nicht abgefangene PHP-Fehler
===============================
"HP Color LaserJet 2600N", Abfrage "counter 1"
-->
PHP Warning: snmpget(): Error in packet: (noSuchName) There is no such variable name in this MIB. in /usr/local/lib/nagios/plugins/check_printer.php on line 99
PHP Warning: snmpget(): This name does not exist: SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 in /usr/local/lib/nagios/plugins/check_printer.php on line 99
UNKNOWN - Counter 1 does not exist!

"oce CS173" im Ruhezustand, Abfrage "alerts"
-->
PHP Notice: Undefined offset: 1 in /usr/local/lib/nagios/plugins/check_printer.php on line 279
OK - Low Power( 4 3 5 -1 122748928 504)

"Lexmark E342n" mit leerem Papierfach, Abfrage "alerts"
-->
PHP Notice: Undefined offset: 1 in /usr/local/lib/nagios/plugins/check_printer.php on line 279
OK - Fach 2 auffüllen A4( 3 3 8 2 -2 808)

2. nicht erkannte Druckerfunktionen
===================================
"oce 3165", Abfrage "toner 1"
-->
UNKNOWN - Toner/Ink 1 does not exist!

"HP Color LaserJet 2600N" und "oce CS173", Abfrage "paper 1"
-->
UNKNOWN - Tray 1 does not exist!

3. Unerklärliches/Unverständliches
==================================
"HP Color LaserJet 2600N", Abfrage "toner 1"
-->
zwei unterschiedliche Reaktion bei verschiedenen Exemplaren:
OK - Black Toner Cartridge HP Q6000A 68% (34 of 50 left)
UNKNOWN - Toner/Ink 1 does not exist!

"Lexmark E342n", Abfrage "paper 3"
-->
zwei unterschiedliche Reaktion bei verschiedenen Exemplaren
(nicht überprüft, aber mit hoher Wahrscheinlichkeit
auch beim zweiten Drucker kein Papier in manueller Zufuhr):
Critical - Manual Paper 0% (0 of 1 left)
OK - Manual Paper

Viele Grüße

Lutz Walther

sh hat gesagt…

@lutz walther:

danke fuer das feedback! ich mach da ein ticket fuer unsere entwicklung raus, damit das in der naechsten version besser laeuft.

wuerden sie zum testen zur verfuegung stehen?

Lutz Walther hat gesagt…

@sh
Gerne.
Lutz Walther

R. Müller hat gesagt…

uhm ... genau das Plugin, dass ich gesucht habe!

Wir verwenden im Netzwerk verschiedene Drucker von verschiedene Hersteller. Bei bedarf könnte ich für Sie diverse Anpassungen Testen!

Canon Drucker werden noch nicht komplett Ausgelesen.

^_^

Andi hat gesagt…

Ich finde das Tool klasse. Konntet Ihr mittlerweile die Fehler beheben und gibt es eine neuere Version?
Gruß
Andi

Christian Berendt hat gesagt…

Funktioniert hier wunderbar mit diversen HP und Brother Modellen.

Danke fuer die Arbeit und bitte in der Zukunft weiterpflegen :)

Marvin hat gesagt…

Hallo, ich hab auch das PlugIn installiert, jedoch hab ich eine Frage. Und zwar geht es um den Hardware-Check. Bei einigen Druckern zeigt er mir dort einen WARNING an mit Status 3. Was bedeutet dieser Status 3??

Vielen Dank!

jk hat gesagt…

Hi Marvin,

das kommt auf den Drucker an. Bei manchen Modellen sind die Ausgaben relativ sinnfrei. Oft handelt es sich um Erweiterungen (RAM, Duplexer) oder auch Klappen am Gerät.


Gruß,
Jan

Marvin hat gesagt…

Hallo, danke für die Antwort!
Wir haben es jetzt super am laufen, würden jetzt jedoch z.B. den Wert für einen Warning beim Toner ändern. Der steht zur Zeit auf 3000. Ich möchte aber, dass bei 3000 ein Critical entsteht... Wie und wo muss ich das ändern?

Vielen Dank!

Marvin hat gesagt…

Hallo, danke für die Antwort!
Wir haben es jetzt super am laufen, würden jetzt jedoch z.B. den Wert für einen Warning beim Toner ändern. Der steht zur Zeit auf 3000. Ich möchte aber, dass bei 3000 ein Critical entsteht... Wie und wo muss ich das ändern?

Vielen Dank!

MaikelR2000 hat gesagt…

Hallo, brauche hilfe!

icinga:/usr/local/nagios/locallibexec$ sudo ./check_printer.sh
PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/mcrypt.ini on line 1 in Unknown on line 0
PHP Fatal error: Call to undefined function snmp_set_quick_print() in /usr/local/nagios/locallibexec/check_printer.sh on line 82


was mache ich falsch????

Thomas hat gesagt…

Hallo,
ich würde diese Tool auch gerne nutzen. Nur wie implementiere ich das. Habe gerade ein Brett vorm kopf :-( ..

Anonym hat gesagt…

Hallo,

der status wird bei mir immer mit unkown angezeigt und folgender Meldung:

/usr/lib/nagios/plugins/check_printer ip community command

ip community und command habe ich jedoch eingegeben.

shell hat gesagt…

Habe das Plugin auch gerade mal getestet.

Wenn ich die Alerts abrufe, erhalte ich folgende Meldungen:

/usr/lib/nagios/plugins/check_printer 192.168.37.222 public alerts
PHP Notice: Undefined offset: 1 in /usr/lib/nagios/plugins/check_printer on line 279
PHP Notice: Undefined offset: 1 in /usr/lib/nagios/plugins/check_printer on line 279
Warning - 31 Remplacer la cartouche défectueuse( 3 4 11 11 -2 1) Fach 1 fast leer( 4 3 8 8 -2 807)

Mario hat gesagt…

Hallo,
das Plugin funktioniert einwandfrei. Zumindestens habe ich bisher noch nichts Fehlhaftes finden können :-)
Allerdings habe ich eine Frage, bzw. ich würde gerne folgendes ändern wollen (für mich):

Bei der Ausgabe von "alerts" werden nahezu alle Ereignisse ausgegeben. Einige hast du schon rausgenommen, wie bspw. Energiesparmodus.
Besteht die Möglichkeit diese "Liste" zu bearbeiten. In der .php habe ich folgendes gefunden:

--------------
$critical_codes = array ( 8, 1101, 1102, 1112, 1114, 1115 );
$ok_codes = array ( 4, 6, 7, 19, 20, 23, 24, 25, 27, 35, 36, 37, 38, 502, 503, 504, 505, 506, 507, 802, 803, 804, 805, 806, 807, 808, 809, 810, 1001, 1002, 1005, 1106, 1107, 1108, 1111, 1113, 1302, 1304, 1501, 1502, 1503, 1504, 1505, 1506, 1509 );
$location_ignore_codes = array ( 10003, 10033, 10034 );
$location_ok_codes = array ( 13100, 13200, 13300, 13400, 13500 );
$ignore_codes = array ();

--------------

Reicht es hier aus, die Nummern (codes) einfach in den arrays zu tauschen?
Wenn ja, welche Nummer steht für welches Ereignis. Wie kann ich das rausfinden.

Besten Dank im voraus,
Mario