check_smart mit check_mk ausführen – Debug-Modus wäre wunderbar [Update]

23. April 2010 | Von | Kategorie: Admin | Monitoring | Availability

Neulich bin ich beim Einsatz von Nagios-Plugins mit check_mk auf eine interessanten Umstand gestoßen.

Was habe ich gemacht? Da ich mittels check_smart den S.M.A.R.T.-Health-Status meiner Festplatten prüfen wollte habe ich check_smart auf das Zielsystem kopiert. Hierfür habe ich auf den entsprechenden System das Verzeichnis /usr/lib/check_mk_agent/nagios-plugins/ erstellt. Also schnell das Plugin und auch die utils.pm aus dem Nagios-Paket kopiert. Dann noch ebenso fix die Konfiguration von MRPE angepasst und das Plugin sollte mir den Status der Festplatten liefern – denkste. Mal eben schnell war vorbei und ein wenig mehr Rumgesuche nach der Ursache angesagt. Statt mir den Status der Platten auszugeben, habe ich stattdessen immer einen Status 2 – UNKNOWN  und ohne jegliche Ausgabe erhalten.

Also geht es an die manuellen Aufrufe des check_mk_agent auf dem Remotesystem.

# check_mk_agent
...
<<<mrpe>>>
(check_smart) S.M.A.R.T._sda 2
(check_smart) S.M.A.R.T._sdb 2
(check_mailq) MailQueue 2

Nicht sehr erhellend das ganze. Keinen Plugin-Output für unterschiedliche Plugins – naja, dann sowol erstmal den check_mk_agent analysieren.

# vim /usr/bin/check_mk_agent
...
# MK's Remote Plugin Executor
if [ -e "$MK_CONFDIR/mrpe.cfg" ]
then
 echo '<<<mrpe>>>'
 grep -Ev '^:space:*($|#)' "$MK_CONFDIR/mrpe.cfg" | \
while read descr cmdline
 do
 PLUGIN=${cmdline%% *}
 OUTPUT=$(eval $cmdline)
 echo -n "(${PLUGIN##*/}) $descr $? $OUTPUT" | tr \\n \\1
 echo
 done
fi
...

Sieht soweit ganz gut. Die mrpe.cfg-Konfigurationsdatei wird zeilenweise ausgewertet und die Plugins ausgeführt. Die Ausgaben und der Rückgabestatus werden anschließend nach StdOut geschrieben. Nur kommt keine Ausgabe und auch der Exit-Code passt nicht. Bei einem manuellen Aufruf des Plugins klappt jedoch alles:

# cd /usr/lib/check_mk_agent/nagios-plugins/
# ./check_smart -d /dev/sda -i ata
WARNING: Sectors pending re-allocation|Raw_Read_Error_Rate=17 Spin_Up_Time=5056 Start_Stop_Count=27 Reallocated_Sector_Ct=0 Seek_Error_Rate=0 Seek_Time_Performance=0 Power_On_Hours=31751 Spin_Retry_Count=0 Calibration_Retry_Count=0 Power_Cycle_Count=27 Temperature_Celsius=22 Hardware_ECC_Recovered=574392014 Reallocated_Event_Count=0 Current_Pending_Sector=1 Offline_Uncorrectable=0 UDMA_CRC_Error_Count=0 Multi_Zone_Error_Rate=0 Soft_Read_Error_Rate=0 TA_Increase_Count=0

Aber das macht mich nun noch nicht wirklich schlauer. Also um dem Fehler auf die Spur zu kommen, muss ich die Fehlermeldungen des Plugin-Aufrufes finden, aber wo?

Einen Debug-Modus für den Aufruf des Agents gibt es bisher nicht – wäre aber eine feine Sache in dieser Situation. Also auf die Suche gemacht wo denn die Fehlermeldungen bleiben. Mathias unterdrückt die Fehlermeldungen auch sinnigerweise, damit diese nicht zu sehr komischen Ergebnissen im Nagios führen.

# vim /usr/bin/check_mk_agent
...
# close standard input (for security reasons) and stderr
exec <&- 2>/dev/null
...

Nach dem Auskommentieren der exec-Zeile führt der manuelle Aufruf des Agenten mich auch auf die Spur für meinen Fehler – hat nämlich so garnix mit check_mk zu tun.

# check_mk_agent
...
<<<mrpe>>>
Can't locate utils.pm in @INC (@INC contains: /usr/local/nagios/libexec/ /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/lib/check_mk_agent/nagios-plugins/check_smart line 20.
BEGIN failed--compilation aborted at /usr/lib/check_mk_agent/nagios-plugins/check_smart line 20.
(check_smart) S.M.A.R.T._sda 2

Das Problem besteht ganz einfach darin, das meine Perl-Nagios-Plugins das Perl-Modul utils.pm nicht finden – obwohl ich es extra mitkopiert haben. Der Aufruf des Plugins erfolgt in einem anderen Kontext, so dass das Modul nicht gefunden wird. Also im Plugin den Wert „/usr/local/nagios/libexec/“ in „/usr/lib/check_mk_agent/nagios-plugins/“ abändern. Oder aber utils.pm nach  /usr/local/nagios/libexec/ kopieren.

Unabhängig davon kann es immer mal sein, dass ein Debug-Modus für den check_mk_agent benötigt wird, daher hier ein kleiner Patch meinerseits:

< exec <&- 2>/dev/null
---
> if [ "$1" != "-d" ]; then
>     exec <&- 2>/dev/null
> fi

[UPDATE]

Fast vergessen, der Debug-Modus funktioniert dann über check_mk_agent -d

[Update 2]
Matthias Kettner hat den Debug-Modus wie beschrieben ab der Version 1.52 aufgenommen.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Ping.fm Post to Reddit

Tags: | | |

Schreibe einen Kommentar

Fühle dich ermuntert einen Kommentar, Anmerkungen, Hinweise oder deine Ideen zum Thema zu hinterlassen. Wir freuen uns über deine Rückmeldung.