Nagios3 unter Debian Linux
Installation Nagios3
aptitude install nagios3 nagios3-common nagios-plugins nagios-plugins-basic nagios-plugins-standard
Aktivieren der nagios.cmf
Kommt es zu folgender Fehlermeldung beim Anstoßen eines Nagios Checks:
Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!
Helfen folgende Befehle:
/etc/init.d/nagios3 stop
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
/etc/init.d/nagios3 start
Debugging Refresh Problem bei Nagios 3.2
Bei Nagios 3.2.x gibt es das Problem, dass wenn man auf Refresh im Browser klickt, man immer auf der Startseite landet. Dieser Bug kann folgendermaßen behoben werden:
Debug Lösung 1
Folgende Zeile der Nagios index.php an oberster stelle hinzufügen:
/usr/share/nagios3/htdocs/index.php
<?php header("Cache-Control: max-age=7200,> public"); ?>
sieht dann so aus:
<?php header("Cache-Control: max-age=7200,> public"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<title>Nagios Core</title>
<link rel="shortcut icon" href="images/favicon.ico" type="image/ico">
</head>
<?php
.....
Dann ganz wichtig den Browsercache leeren oder den Browser neustarten. Und schon sollte es gehen, falls nicht probiert die Debug Lösung 2
Debug Lösung 2
mv /usr/share/nagios3/htdocs/index.php /usr/share/nagios3/htdocs/index.html
In folgender Datei die index.html als DirectoryIndex hinzufügen:
/etc/apache2/conf.d/nagios3.conf
DirectoryIndex index.php index.html
und nun den Apache neustarten:
apache2ctl restart
Konfiguration Nagios3
chmod +s /usr/lib/nagios/plugins/check_icmp
/etc/nagios3/nagios.cfg
check_external_command=1
/etc/init.d/nagios3 stop
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
/etc/init.d/nagios3 start
Performance Tuning
was ein wenig Performance bringt ist das Überprüfen der Hosts mit check_host
und nicht mit check_ping
:
/etc/nagios-plugins/config/ping.cfg
# 'check-host-alive' command definition define command{ command_name check-host-alive #command_line /usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% -p 1 command_line /usr/lib/nagios/plugins/check_host -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% -p 1 }
Das zusätzliche erstellen eines Ping oder ICMP Services für einen Host ist nicht nötig!
Enable Performance Tweaks:
/etc/nagios3/nagios.cfg
# LARGE INSTALLATION TWEAKS OPTION # This option determines whether or not Nagios will take some shortcuts # which can save on memory and CPU usage in large Nagios installations. # Read the documentation for more information on the benefits/tradeoffs # of enabling this option. # Values: 1 - Enabled tweaks # 0 - Disable tweaks (default) use_large_installation_tweaks=1
NConf Installation
Webseite des Herstellers: http://www.nconf.org
Abhängigkeiten installieren
Folgende Pakete müssen vor der Installation auf dem System vorhanden sein:
- Apache Webserver
- PHP4.4 oder höher mit php-mysql (bei LDAP Auth auch php-ldap)
- MySQL 5.0.2 inkl. InnoDB
- Perl 5.6 oder höher mit perl-DBI und perl-dbd-mysql
- ein Nagios Binary
Diese können mittels aptitude ggf. nachinstalliert werden.
Datenbank vorbereiten
am Datenbankserver anmelden:
mysql -u root -p
Und nun die Datenbank anlegen:
create database nconf; grant select, insert, update, delete, create, drop, alter ON `nconf`.* to 'nconf'@'hostname' identified by 'nconfpass';
Nconf Installieren
Zuerst von der Downloadpage des Herstellers auf den Server laden und entpacken:
cd /usr/src/ wget http://sourceforge.net/projects/nconf/files/nconf/1.2.6-0/nconf-1.2.6-0.tgz/download tar -xzvf nconf-1.2.6-0.tgz
Nun in den Apache vhost kopieren und die richtigen Rechte setzten:
mv nconf /var/www/ cd /var/www/ chown www-data:www-data ./config ./output ./temp
Nun kann die Datenbank gefüttert werden:
mysql -u root -p -D nconf < /var/www/INSTALL/create_database.sql
Nconf Konfigurieren
Zum konfigurieren kann nun folgender Pfad in einem Browser geöffnet werden:
http://<HOSTNAME>/nconf/INSTALL.php
Hier werden dann die Abhängigkeiten geprüft und bei einem Klick auf next kommt man zur Datenbankeinrichtung. Bei einem weiteren Klick auf next prüft er die Datenbankverbindung. Ist diese erfolgreich gelangt man weiter zur General configuration. Diese habe ich auf den Default Werten stehen gelassen. Genau wie die nächste Seite Authentication configuration, hier brauche ich nichts einstellen, da der ganze vhost eh Passwortgeschützt ist. Nachdem nochmals alles geprüft wird und die Configfiles angelegt wurden sollten folgende Dateien gelöscht werden:
cd /var/www/nconf rm INSTALL.php rm UPDATE.php rm -rf INSTALL rm -rf UPDATE
Nun noch das Nagios Binary in den richtigen Ordner kopieren:
/var/www/nconf/bin/nagios
Dieses sollte bei einem nagios3 unter /usr/sbin/nagios3 zu finden sein.
Nconf starten
Beim folgendem Aufruf begrüßt einen die NCONF Startpage:
http://<HOSTNAME>/nconf/
Autodeployment
Hier der Link zur Dokumentation, wie man direkt von NConf deployen kann.
NRPE - Der Linux Nagios Client
Installation:
aptitude install nagios-nrpe-server
Konfiguration:
/etc/nagios/nrpe_local.cfg
allowed_hosts=127.0.0.1,192.168.50.10 command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 10% -c 5% command[check_apt_distupgrade]=/usr/lib/nagios/plugins/check_apt -d command[check_mysql_cmdlinecred]=/usr/lib/nagios/plugins/check_mysql -H localhost -u username -p password command[check_mailq_postfix]=/usr/lib/nagios/plugins/check_mailq -w 3 -c 5 -M postfix command[check_clamav]=/usr/lib/nagios/plugins/check_clamav -w 3 -c 4 command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20% -c 10% command[check_ntp]=/usr/lib/nagios/plugins/check_ntp_time -H 0.debian.pool.ntp.org
NSClient - Der Windows Nagios Client
Herunterladbar ist er hier:
hier dann das aktuelleste .msi Pakete herunterladen und installieren.
Bei Allowed Hosts die Nagios Server Ip eintragen. Passwort kann leer bleiben, dann den Haken bei nsclient setzten. Zum Schluss den Haken setzten Start the Service.
USV mit apcupsd und Nagios überwachen
Zuerst das check_apcupsd Plugin in den Ordner /usr/lib/nagios/plugins herunterladen:
Download Link: http://wiki.laub-home.de/images/1/15/Check_apcupsd.zip
cd /usr/src/ wget http://wiki.laub-home.de/images/1/15/Check_apcupsd.zip unzip Check_apcupsd.zip cp check_apcupsd /usr/lib/nagios/plugins/ chmod +x /usr/lib/nagios/plugins/check_apcupsd
Nun die Plugin Konfigdatei erstellen:
/etc/nagios-plugins/config/apcupsd.cfg
# 'check_apcupsd' command definition define command{ command_name check_apcupsd command_line /usr/lib/nagios/plugins/check_apcupsd }
und zum Schluss noch den Service Check dem Host hinzufügen:
# check usv define service { host_name Rechnername service_description USV Test check_command check_apcupsd use shorttime-service notification_interval 0 ; set > 0 if you want to be renotified }
Webseite hinter Digest Auth überwachen
Hat man eine Webseite welche per Digest Passwortschutz geschützt ist, so kann man das folgende Plugin verwenden:
ESX Server mit Nagios und dem check_esx3 Plugin überwachen
Das Überwachen einer VI bzw. eines ESX Server ist mittels des check_esx3.pl Plugins von OP5 möglich:
Das Plugin benötigt das VMWare PerlToolkit. Hier die Anleitung zur Installation:
Das Plugin dann einfach herunterladen und in den Nagios Plugin Ordner /usr/lib/nagios/plugins kopieren und dem Plugin nachträglich das Ausführrecht geben:
chmod +x /usr/lib/nagios/plugins/check_esx3.pl
der folgende Aufruf des Skriptes liefert einem die kompletten Optionen des Plugins:
/usr/lib/nagios/plugins/check_esx3.pl --help
Ich habe folgende Nagios Plugin Konfigurationsdatei angelegt:
/etc/nagios-plugins/config/esx3.cfg
#Commands for ESX(i) servers or data center define command { command_name check_esx3_host_cpu_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l cpu -s usage -w $ARG3$ -c $ARG4$ } define command { command_name check_esx3_host_mem_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l mem -s usage -w $ARG3$ -c $ARG4$ } define command { command_name check_esx3_host_swap_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l mem -s swap -w $ARG3$ -c $ARG4$ } define command { command_name check_esx3_host_net_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l net -s usage -w $ARG3$ -c $ARG4$ } define command { command_name check_esx3_host_vmfs command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l vmfs -s $ARG3$ -w $ARG4$ -c $ARG5$ } define command { command_name check_esx3_host_runtime_status command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l runtime } define command { command_name check_esx3_host_runtime_issues command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l runtime -s issues } # Commands for virtual hosts define command { command_name check_esx3_vm_cpu_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l cpu -s usage -w $ARG4$ -c $ARG5$ } define command { command_name check_esx3_vm_mem_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l mem -s usage -w $ARG4$ -c $ARG5$ } define command { command_name check_esx3_vm_swap_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l mem -s swap -w $ARG4$ -c $ARG5$ } define command { command_name check_esx3_vm_net_usage command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l net -s usage -w $ARG4$ -c $ARG5$ } define command { command_name check_esx3_vm_runtime_cpu command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s cpu -w $ARG4$ -c $ARG5$ } define command { command_name check_esx3_vm_runtime_mem command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s mem -w $ARG4$ -c $ARG5$ } define command { command_name check_esx3_vm_runtime_status command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s status } define command { command_name check_esx3_vm_runtime_state command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s state } define command { command_name check_esx3_vm_runtime_issues command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s issues } define command { command_name check_esx3_vm_runtime_tools command_line /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s tools }
In der Host Konfigurationsdatei habe ich dann folgende Monitore eingerichtet:
#Überprüft die CPU Usage (Alarmierung bei 95% Last) define service { host_name ESXSERVER service_description CPU Usage check_command check_esx3_host_cpu_usage!esx_user!esx_pass!85!95 use longtime-service notification_interval 0 ; set > 0 if you want to be renotified } # Überprüfung der Ramauslastung (Alarmierung bei 95%) define service { host_name ESXSERVER service_description Memory Usage check_command check_esx3_host_mem_usage!esx_user!esx_pass!85!95 use longtime-service notification_interval 0 ; set > 0 if you want to be renotified } # Überprüfung des Swap (Alarmierung bei 1200MB) define service { host_name ESXSERVER service_description Swap Usage check_command check_esx3_host_swap_usage!esx_user!esx_pass!1000!1200 use longtime-service notification_interval 0 ; set > 0 if you want to be renotified } # Überwachung eines VMFS Volumes (Alarmierung bei weniger als 15000MB) define service { host_name ESXSERVER service_description VMFS Usage 1 check_command check_esx3_host_vmfs!esx_user!esx_pass!VMFS_NAME!7000:!15000: use longtime-service notification_interval 0 ; set > 0 if you want to be renotified } # Überwachung des Globalen Systemstatus define service { host_name ESXSERVER service_description Runtime Status check_command check_esx3_host_runtime_status!esx_user!esx_pass use longtime-service notification_interval 0 ; set > 0 if you want to be renotified } # Überwachung von einer Virtuellen Maschine (CPU/MEM/SWAP) define service { host_name ESXSERVER service_description VMNAME CPU Usage check_command check_esx3_vm_cpu_usage!esx_user!esx_pass!VMNAME!90!95 use longtime-service notification_interval 0 ; set > 0 if you want to be renotified } define service { host_name ESXSERVER service_description VMNAME Mem Usage check_command check_esx3_vm_mem_usage!esx_user!esx_pass!VMNAME!90!95 use longtime-service notification_interval 0 ; set > 0 if you want to be renotified } define service { host_name ESXSERVER service_description VMNAME Swap Usage check_command check_esx3_vm_swap_usage!esx_user!esx_pass!VMNAME!90!95 use longtime-service notification_interval 0 ; set > 0 if you want to be renotified }
SMS Benachrichtigungen verschicken mit Nagios & Gnokii
Installation Gnokii
aptitude install gnokii
Konfiguration Gnokii
Ich nutze ein Sony Ericsson K530i am USB Port, hier meine Konfig.
/etc/gnokiirc
[global] port = /dev/ttyACM0 model = AT initlength = default connection = serial use_locking = yes serial_baudrate = 19200 smsc_timeout = 10 [xgnokii] allow_breakage = 0 [gnokiid] bindir = /usr/sbin/ [connect_script] TELEPHONE = 12345678 [disconnect_script] [logging] debug = off rlpdebug = off xdebug = off
Konfigurationstest:
gnokii --config /etc/gnokiirc --monitor once
hier sollte ungefähr folgende Ausgabe kommen:
GNOKII Version 0.6.26 Entering monitor mode... Network: D2, Germany (262 07) LAC: a102 (4xx1x), CellID: 00xxea2x (5xx3x) RFLevel: 16 Battery: 89 Power Source: AC-DC SIM: Used 20, Free 730 Phone: Used 65, Free 2435 DC: Used 11, Free 19 LD: Used 11, Free 19 MC: Used 12, Free 18 ON: Used 0, Free 1000 RC: Used 7, Free 23 CALL0: IDLE CALL1: IDLE Leaving monitor mode...
Eine Test SMS kann so verschickt werden:
echo "Hello world" | gnokii --config /etc/gnokiirc --sendsms 01721234456 -r
Konfiguration der Nagios SMS Benachrichtigung
Zuerst das Skript anlegen welches für den SMS Versand zuständig ist:
/usr/lib/nagios/plugins/sms_notification_by_gnokii
#!/bin/sh # # Gnokii Plugin script # (c) Horst venzke # v 0.1 - 17.01.2004 mess=$2 number=$1 echo "${mess}" | gnokii --sendsms ${number}
Dann noch dem Skript das Ausführrecht geben:
chmod +x /usr/lib/nagios/plugins/sms_notification_by_gnokii
Nun kann die SMS Benachrichtigung in die Nagios Konfiguration aufgenommen werden. Hierfür müssen folgende Zeilen in die /etc/nagios3/commands.cfg in der NOTIFICATION COMMANDS Sektion eingefügt werden:
define command { command_name service-notify-by-gnokii command_line $USER1$/sms_notification_by_gnokii $CONTACTPAGER$ "$NOTIFICATIONTYPE$ - $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$ - $SERVICEOUTPUT$" } define command { command_name host-notify-by-gnokii command_line $USER1$/sms_notification_by_gnokii $CONTACTPAGER$ "Nagios Host Alert - $HOSTALIAS$ is $HOSTSTATE$; $OUTPUT$; $DATETIME$" }
So, nun kann die neue SMS Benachrichtigung in der Kontakt Datei verwendet werden:
/etc/nagios3/conf.d/contacts_nagios2.cfg
define contact{ contact_name contact_mail_sms alias Admin Mail and SMS service_notification_period 24x7 host_notification_period 24x7 service_notification_options c host_notification_options d service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email mail@domain.de service_notification_commands service-notify-by-gnokii host_notification_commands host-notify-by-gnokii pager +491744556677 } define contactgroup{ contactgroup_name smsmailadmins alias SMS and Mail Administrators members contact_mail_sms }
Nun kann man die "smsmailadmins" Gruppe in den Services zur Alarmierung nutzen:
Ich habe hierfür einen neuen Service "critical-service" angelegt:
/etc/nagios3/conf.d/generic-service_nagios2.cfg
define service{ name critical-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled failure_prediction_enabled 1 ; Failure prediction is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 3 retry_check_interval 2 max_check_attempts 4 notification_period 24x7 notification_options w,u,c,r contact_groups smsmailadmins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }
Dieser kann dann zum Beispiel bei der DNS Server Abfrage verwendet werden:
define service { host_name hostname service_description DNS check_command check_dns use critical-service notification_interval 0 ; set > 0 if you want to be renotified }
Handy Verbindung mit dem Server überwachen
Da ich ab und an das Problem hatte das die USB Verbindung vom Handy zum Server unterbrochen wurde oder gar ganz weg war, hab ich hier ein kleines Nagios Plugin geschrieben, welches überwacht ob das Handy für gnokii auslesbar ist.
check_phone.sh
#!/bin/sh ######################################################################################### #check_phone.sh #by A. Laub andreas@laub-home.de #this Script reads a Backup Logfile which contains one line in this format: # 201005131629 ERROR: Backup has Problems # or # 201005131629 SUCCESS: Backup runs well #date Format is: date +%Y%m%d%H%M # #run script: # check_phone.sh [LOGFILE] [TIME] # #License: #This program is free software: you can redistribute it and/or modify it #under the terms of the GNU General Public License as published by the #Free Software Foundation, either version 3 of the License, or (at your option) #any later version. #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #or FITNESS FOR A PARTICULAR PURPOSE. ######################################################################################## #Load the Pathes PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin export PATH /usr/bin/gnokii --config /etc/gnokiirc --monitor once > /dev/null 2>&1 ERRORCODE=$? if [ $ERRORCODE = 5 ]; then echo "OK - Mobile Phone is connected" exit 0 fi if [ $ERRORCODE = 2 ]; then echo "CRITICAL - Mobile Phone is not connected" exit 2 fi echo "CRITICAL - other Error" exit 2
Dieses Script sollte am besten nach /usr/lib/nagios/plugins/ kopiert werden und das Ausführecht bekommen.
Nun die Plugin Konfigurationsdatei unter /etc/nagios-plugins/config anlegen:
check_phone.cfg
# 'check_mobile' command definition define command{ command_name check_phone command_line /usr/lib/nagios/plugins/check_phone.sh }
Und nun das ganze in die Nagios Konfiguration des Hostes:
zum Beispiel:
# check mobile phone define service { host_name nagios-server service_description Mobile Phone check_command check_phone use longtime-service notification_interval 0 ; set > 0 if you want to be renotified }
Nun noch die Rechte vergeben:
usermod nagios -G dialout