Nagios und EventHandler via NRPE

Bei meiner VM auf der dieser Blog laeuft ist in den letzten Tage oefter mal MySQL abgestuerzt. Das ist ziemlich aergerlich da dann der Blog und einige andere Dinge auch nicht mehr funktionieren. Da ich nur eingeschraenkt vor dem Rechner sitze und es ueber mein Handy sehr umstaendlich ist mittels MidpSSH sich einzuloggen und den Dienst neuzustarten, hab ich mich kurz mit den EventHandlern bei Nagios auseinandergesetzt und im folgenden eine kurze Anleitung was ich gemacht habe:

Lesen: das und das und viele andere Dinge bis ich schliesslich bei dem Artikel „Event Handlers heute mal dynamisch“ (PDF) von RomanK im Nagios-Portal Forum gelandet bin.

Alle im folgenden hier genannten Skripte sind nicht mein Werk, sondern stammen aus besagtem Artikel und wurden von mir auf die Debian-Verhaeltnisse meines Servers und auf meine Problematik angepasst.

Definition des Befehls in der /etc/nagios3/commands.cfg:

define command{
	command_name	do_event
	command_line	/usr/lib/nagios/libexec/event/run_command  $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ $ARG1$
	}

Das Skript run_command in dem Ordner /usr/lib/nagios/libexec/event/ ablegen:

#!/bin/bash
case "$1" in
 
OK)
	;;
 
WARNING)
	;;
 
UNKNOWN)
	;;
 
CRITICAL)
 
	case "$2" in
	SOFT)
 
		case "$3" in
 
		3)
		echo -n "Restarting Service (3rd soft critical state)..."
		/usr/lib/nagios/plugins/check_nrpe -H "$4" -c "$5"
			;;
			esac
		;;
	HARD)
		echo -n "Restarting Service..."
		/usr/lib/nagios/plugins/check_nrpe -H "$4" -c "$5"
		;;
	esac
	;;
esac
exit 0

Auf dieser VM habe ich dann zwei neue NRPE-Checks in der /etc/nagios/nrpe_local.cfg eingerichtet, einen zum ueberpruefen ob MySQL laeuft, und einen der als Event Handler ausgefuehrt wird:

command[check_mysql]=sudo /usr/lib/nagios/plugins/check_mysql
command[restart_mysqld]=sudo /etc/init.d/mysql restart

und die dafuer erforderlichen Eintraege in der /etc/sudoers:

nagios     pregos =  NOPASSWD: /usr/lib/nagios/plugins/check_mysql
nagios     pregos =  NOPASSWD: /etc/init.d/mysql

Nun auf dem Nagios-Server den Servicecheck mit entsprechendem Event Handler definieren:

define service{
        use                             jan-service
        host_name                       pregos.info
        service_description             MySQL
        max_check_attempts              4
        event_handler                   do_event!restart_mysqld
        check_command                   check_nrpe_1arg!check_mysql
        }
}

Nun kann man noch ueberpruefen ob das ganze funktioniert, indem man einfach den MySQL-Dienst beendet und per Webinterface einige male hintereinander den Servicecheck manuell anstoesst.
Wenn man an der max_check_attempts in der config was aendern will, muessen natuerlich auch evtl. Aenderungen in der run_command bei der case-Anweisung gemacht werden.

Nagios -> S.M.A.R.T-Werte von HDDs an 3ware RAID-Controler

Das meiste steht bereits in der Ueberschrift. Ich wollte mit Nagios einige Festplatten im RAID 5 im Auge behalten. Den RAID-Controler selber ueberwache ich bereits mit dem Plugin check_3ware, das mal von Matthias veraendert wurde, aber nen Diff kann ich leider nicht bieten. Funktioniert jedoch wunderbar!

Um an die S.M.A.R.T-Werte der Festplatten zu kommen kann man nicht einfach ein smartctl -a /dev/hdaX machen, da sie ueber den RAID-Controler angesteuert werden und nicht als eigenes Device existieren. Der Befehl dafuer lautet jeh nach RAID-Controler entweder smartctl -a -d 3ware,0 /dev/twa0, oder evtl. auch /dev/twe0. Die Plugins die z.B. bei MonitoringExchange existieren koennen aber alle nicht mit einem zusaetzlichen Deviceparamter umgehen, oder akzeptieren nur „ata“ bzw. „scsi“ als Devicetyp fuer smartctl. Ueber diesen Blogeintrag bei ostlogd und das erste Kommentar dort mit dem Diff fuer das check_smart-Plugin waren dann alle Probleme geloest. Works like a charm :-D

Windows Maschinen mit Nagios NRPE ueberwachen

Auch wenn man es gerne wuerde, man kommt um Microsoft Produkte im Leben einfach nicht herum.  Die von mir betreuten Linux-Server ueberwache ich alle mit Nagios und sammel die Daten via NRPE. Das gleiche wollte ich auch fuer eine neue Windows-Maschine machen. Der Weg ist recht simpel wenn man sich mit Nagios bereits auskennt. Hier nun der Weg in kuerze festgehalten:

  • Download des aktuellen NRPE-NT Dienstes von http://www.miwi-dv.com/nrpent/
  • Entpacken der Datei, verschieben und umbenennen des Unterordners bin nach C:\NRPE
  • Download der Basic NRPE-NT Plugins
  • Entpacken der Datei, verschieben des Unterordners bin nach C:\NRPE\bin

Nun muss der Dienst installiert, konfiguriert und gestartet werden. Dafuer in der Windows Eingabeaufforderung in das Verzeichnis C:\NRPE wechseln und den Dienst installieren

 nrpe_nt -i

Nun die C:\NRPE\nrpe.cfg mit WordPad oeffnen und unter allowed hosts= die IP-Adresse des Nagios-Servers angeben der darauf zugreifen darf. Wenn die Windows Firewall aktiv ist, diese ebenfalls entsprechend Konfigurieren. Am einfachsten fuegt man eine Ausnahme fuer den Port hinzu.

  • Name: Nagios NRPE-NT
  • Port: 5666
  • Bereich aendern -> Benutzerdefinierte Liste: -> Gleiche IP-Adresse eingeben wie unter allowed_hosts

Das war es auch schon fast.  Die checks werden genauso definiert wie unter Linux. Fuer mich ist interessant ob der Lizenzmanager-Dienst laeuft und ob es Windows-Updates gibt die ich installieren muss. Deswegen habe ich z.B. die folgenden beiden Checks definiert:

command[nt_service_sentinel]=C:\NRPE\bin\service_nrpe_nt.exe "Sentinel RMS Developer Kit License Manager"
command[windows_updates]=C:\Windows\System32\cscript.exe //NoLogo //T:120 C:\NRPE\bin\check_windows_updates.wsf /w:0 /c:1

Das Skript fuer die Windows-Updates checks habe ich von da.

Zum Schluss muss der Dienst natuerlich noch gestartet werden. Das geht entweder ueber GUI, in den Windows Diensten taucht er auf unter dem Namen „Nagios Remote Plugin Executor for NT/W2K„, oder auch einfacher ueber die Eingabeaufforderung mit dem Befehl:

net start nrpe_nt

Viel Spass und Erfolg beim Monitoren von Windows-Hosts! :-)

Zum festhalten…

So viel passiert in den letzen Tagen und so wenig Zeit sich damit zu beschaeftigen und anzugucken

noch was vergessen? Bestimmt! Aber erstmal wird Werder Bremen heute Abend ins UEFA-Cup Finale einziehen! ;-)