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.

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

Magath hat gesagt…

Vielen Dank erstmal für das Zuer verfügung stellen dieses wirklich praktischen Plugins.

Nun ist mir nur eine Kleinigkeit aufgefallen. Wir haben hier einige HP / Kyocera etc. Drucker die mit 4 Trays geladen werden. (Tray 1 die Ausklappbaren, Tray 2-4 Papierfächer).

Leider scheint das Tray 4 nicht, bzw. nicht korrekt, ausgelesen zu werden. Jedenfalls bekommen wir dort dann immer ein UNKNOWN - Tray 4 does not exist! zurück. Was der physikalischen Realität nicht entspricht :)

Evtl. hat jemand eine Idee oder das gleiche Problem?

Marcel hat gesagt…

Sehr tolles Tool! Darauf habe ich ewig gewartet! Vielen Dank!

hellgast hat gesagt…

I have problem with check_printer after debian 5->6 upgrade

./check_printer lp-chodba2 public alerts
UNKNOWN - Internal error

But counter num and toner levels works fine
./check_printer lp-chodba2 public counter 1
OK - Total: 69006

Printer is Ricoh Aficio MP C2800

Anonym hat gesagt…

Hallo zusammen,
gleicher Fall wie bei "hellgast" Bei den Kyocera's gleiche Meldung.

Bei den Samsung alles i.O. Jemand eine Idee an was dies liegen könnte ?

Anonym hat gesagt…

Hallo,

der Rückgabewert von snmpget war nicht mehr korrekt und wurde angepasst.

Die aktuelle Version liegt unter: http://www.ciphron.de/gfx/pool/check_printer


Gruß
Mirko

Anonym hat gesagt…

Hi,

es gab eine Änderung in Linux oder in der SNMP-Lib. Dadurch hat sich der Rükgabestring geändert. Das Skript wurde überarbeitet und funktioniert nun wieder.

Gruß
Mirko

andy232 hat gesagt…

Das Plugin klingt sehr vielversprechend. Gibt es einen Weg, es unter Windows laufen zu lassen ? Wir benutzen den NSClient++.
Wenn ich mir die PHP Binaries für Windows lade, kommt bei Ausführung von check_printer.php:

Fatal error: Call to undefined function snmp_set_quick_print()

Die PHP Doku sagt:
Die snmp_set_quick_print() Funktion ist nur bei Verwendung der SNMP Bibliothek verfügbar, jedoch nicht bei Verwendung der Windows SNMP Bibliothek.

Da gibts wohl keine Lösung oder ?

Torsten hat gesagt…

Hallo,

erst einmal vielen Dank für die Entwicklung des tollen Plugins!

Ich setze es hier unter Icinga 1.4.2 ein und es funktioniert eigentlich einwandfrei. Lediglich bei einem unserer Drucker habe ich das problem, dass sowohl Toner als auch die Papierfächer lediglich "UNKNOWN" zurückmelden. Der Drucker ist ein RICOH Aficio MP-2550. Bei allen anderen (HP-) Druckern geht es problemlos. Noch merkwürdiger ist es allerdings, wenn ich den Drucker mal von der Kommandozeile via "./check_printer public toner 1" anspreche. Dann bekomme ich ein "OK - Toner" zurück?! Gleiches gilt für die Papierfächer ...

Max Rößler hat gesagt…

Sehr gutes PHP Script. Es lief einwandfrei, nachdem ich das "php5-snmp" Paket für Debian Lenny nachinstalliert habe.

Bis auf ein Problem mit unseren Sharps MX2600N und Sharp MX2310U, bei dem der Wastetoner als Critical angezeigt wird, wenn der Status eigentlich OK sein sollte und als OK angezeigt wird, wenn der Status CRITICAL sein sollte. Unser Drucker meckerte einen vollen Resttonerbehälter an. Während dessen war der Status OK, nach dem Wechsel mit einem komplett leeren WasteToner änderte sich der Status in CRITICAL. Gibt es hier eine Möglichkeit dies abzuändern im Script. Ich habe schon selbst im Quellcode geschaut, aber noch keine Lösung gefunden. Kann es sein das es mit dem String "Waste" usw. zusammenhängt?

Anonym hat gesagt…

Hallo,
Vielen dank erstmal für das tolle plugin.
Habe es heute configuriert, nur leider bei den Tonerfüllständen der Richoh drucker zeigt es mir ok an, obwohl auf dem display bereits steht dass der Toner zu tauschen ist. Die Werte die SNMP Walk für die Toner zurückliefert sind auch komisch, für max bekomme ich für jeden Toner -2 und für cur -3. Gibt es hierfür eine Lösung?
Vielen Dank

Anonym hat gesagt…

Benutze heute zum ersten Mal Euer SuperTool, besten Dank schon mal dafür.

Folgendes kann ich jedoch nicht fehlerfrei ausführen:
"./check_printer 192.168.11.57 public hardware 2"

Ergebnis:
"PHP Notice: Undefined variable: val in /usr/local/nagios/libexec/check_printer
OK - Nonvolatile RAM Status=2 | data=0;"

D.h. grundsätzlich geht es ja, aber ich erkenne den Fehler nicht. Dies tritt bei hardware und parts gleichermaßen auf. Gerät ist ein Lexmark X736

Andreas hat gesagt…

Das Script hat mir einiges an Arbeit erspart - Danke.

Für meinen brother-hl5380dn musste ich die 0 bei den 'alerts' ignore_codes eintragen, damit OK-sleep statt Warning ausgegeben wurde.

Auch der Toner geht seltsame wege:
'toner 1' liefert Critical - Black Toner (obwohl gerade neu eingebaut)
'toner 2' liefert OK - Black Toner und 'toner 3' liefert OK-Drum Unit 18%.

Stephan hat gesagt…

Supertolles Plugin - Ich bedanke mich für die Info!!

Anonym hat gesagt…

Ich nutze dieses Tool erfolgreich bei Lexmark Druckern. Ab einem gewissen Toner Stand verschwinden die Perf Counter.

Wenn ich mir die SNMP Werte der Drucker anschaue bekomme ich bei leerem Toner den Wert: "-3"
Bei z.B. 93% : "9300"

Kann dieses irgendwie abgefangen werden?

Anonym hat gesagt…

Erst einmal, ein gutes Tool.

Folgender Fehler/Bug:

Lexmark Drucker

check_printer ip public toner 1
OK - Cyan Toner 93% (9300 of 10000 left) | toner=9300toner/ink;2000;0;0;10000

check_printer ip public toner 2
OK - Magenta Toner

Bei leerem Toner verschwinden die Perf-Counter, da der SNMP Wert dann "-3" beträgt.

Thomas Siebel hat gesagt…

Hallo zusammen.
Danke für das Script läuft super.
Nur bei Brother Druckern habe ich ein Problem bei den Alerts ich bekommme immer ein UNKNOWN - Internal errorconf zurück
hat jemand eine Idee?
Danke

Patronenmax hat gesagt…

@jk:
Top! Werden das Tool mal für unsere Testfarm in Gebrauch nehmen. Vielen Dank!

Toner-admin hat gesagt…

Super Plugin Danke für Entwicklung!