Nagios/Icinga: Serverüberwachung einrichten
Nagios dient der Überwachung von Diensten oder sonstigen Parametern auf einem oder mehreren Servern. Für jeden zu prüfenden Wert können Limits gesetzt werden, hierbei wird zwischen Warnungen und kritischen Limits unterschieden. Wird ein Limit erreicht oder überschritten sendet Nagios eine E-Mail an die zuständigen Personen. Erreicht der Wert wieder einen normalen Stand gibt es ebenfalls eine Mail:
Anstelle von Nagios kann auch das etwas moderner gestaltete Icinga verwendet werden, hierzu müssen nur an den meisten Stellen in den folgenden Angaben alle Nagios-Angaben in Icinga geändert werden. Nur nagios-plugins
bleibt stets nagios-plugins
.Eine typische Nagiosnachricht:
***** Nagios *****
Notification Type: RECOVERY
Service: Disk Space
Host: test.example.de
Address: 10.11.12.13
State: OK
Date/Time: Wed Mar 21 11:57:24 UTC 2012
Additional Info:
DISK OK - free space: / 1758605 MB (99% inode=99%): /lib/init/rw 8034 MB (100% inode=99%): /dev 8029 MB (99% inode=99%): /dev/shm 8034 MB (100% inode=99%): /boot 910 MB (94% inode=99%): /home/rmh/www 1758605 MB (99% inode=99%):
```## Server ##
apt-get install nagios3 nagios-nrpe-plugin nagios-plugins
Damit Kommandos über das Webinterface ausgeführt werden dürfen sind einige Schritte erforderlich. Diese sind auch in `/usr/share/doc/nagios3/README.Debian` beschrieben.
/etc/nagios3/nagios.cfg
EXTERNAL COMMAND OPTION
This option allows you to specify whether or not Nagios should check
for external commands (in the command file defined below). By default
Nagios will not check for external commands, just to be on the
cautious side. If you want to be able to use the CGI command interface
you will have to enable this.
Values: 0 = disable commands, 1 = enable commands
check_external_commands=1
Danach müssen noch die Dateiberechtigungen angepasst werden:
/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
Um die Konfiguration möglichst einfach zu halten werden nun einige Konfigurationsdateien deaktiviert:
/etc/nagios3/conf.d/extinfo_nagios2.cfg
Extended Host and Service Information
`
define hostextinfo{
hostgroup_name debian-servers
notes Debian GNU/Linux servers
notes_url http://webserver.localhost.localdomain/hostinfo.pl?host=netware1
icon_image base/debian.png
icon_image_alt Debian GNU/Linux
vrml_image debian.png
statusmap_image base/debian.gd2
}
/etc/nagios3/conf.d/services_nagios2.cfg
check that web services are running
define service {
hostgroup_name http-servers
service_description HTTP
check_command check_http
use generic-service
notification_interval 0 ; set > 0 if you want to be renotified
}
check that ssh services are running
define service {
hostgroup_name ssh-servers
service_description SSH
check_command check_ssh
use generic-service
notification_interval 0 ; set > 0 if you want to be renotified
}
apt-get install nagios-nrpe-server nagios-plugins
Damit der Nagios-Server auf den Client zugreifen darf ist folgende Änderung notwendig:
/etc/nagios/nrpe.cfg
server_address=192.168.1.$localip allowed_hosts=192.168.1.10
Damit wir später außerdem die Festplatten überwachen können sollte noch folgende Zeile eingefügt werden:
/etc/nagios/nrpe.cfg
command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -X tmpfs -X devpts -X devtmpfs command[check_http]=/usr/lib/nagios/plugins/check_http -H localhost -w 5 -c 10 command[check_https]=/usr/lib/nagios/plugins/check_http -H localhost -w 5 -c 10 -S command[check_ssh]=/usr/lib/nagios/plugins/check_ssh localhost command[check_mysql]=/usr/lib/nagios/plugins/check_mysql -H localhost -u root -p ** command[check_smtp]=/usr/lib/nagios/plugins/check_smtp -H localhost command[check_dx]=/usr/lib/nagios/plugins/check_tcp -p 8082 command[check_zeo_cat]=/usr/lib/nagios/plugins/check_tcp -p 11051 command[check_backup]=/usr/lib/nagios/plugins/check_file.sh -F /var/lock/daily_backup.lock
Mit `/etc/init.d/nagios-nrpe-server restart` wird der Nagios-Client nun noch neu gestartet. Anschließend kann der Zugriff getestet werden, hier gibt man auf dem Server folgenden Befehl ein:
cd /usr/lib/nagios/plugins/ ./check_nrpe -H 192.168.1.$localip -c check_users
Der Output sollte sein:
USERS OK - 1 users currently logged in |users=1;5;10;0
Nun können die Dienste/Parameter definiert werden, die nagios auf dem Client überwachen soll. Hierzu kann zunächst die Server-Config kopiert werden, damit nicht die gesamte Datei neu erstellt werden braucht.
/etc/nagios3/conf.d/test_nagios2.cfg
A simple configuration file for monitoring the local host
This can serve as an example for configuring other servers;
Custom services specific to this host are added here, but services
defined in nagios2-common_services.cfg may also apply.
define host{ use generic-host ; Name of host template to use host_name test.example.de alias test.example.de address 217.11.57.11 }
Define a service to check the disk space of the root partition
on the local machine. Warning if < 20% free, critical if
< 10% free space on partition.
define service{ use generic-service ; Name of service template to use host_name test.example.de service_description Disk Space check_command check_nrpe_1arg!check_all_disks }
Define a service to check the number of currently logged in
users on the local machine. Warning if > 20 users, critical
if > 50 users.
define service{ use generic-service ; Name of service template to use host_name test.example.de service_description Current Users check_command check_nrpe_1arg!check_users }
Define a service to check the number of currently running procs
on the local machine. Warning if > 250 processes, critical if
> 400 processes.
define service{ use generic-service ; Name of service template to use host_name test.example.de service_description Total Processes check_command check_nrpe_1arg!check_total_procs }
Define a service to check the load on the local machine.
define service{ use generic-service ; Name of service template to use host_name test.example.de service_description Current Load check_command check_nrpe_1arg!check_load }
define service { use generic-service host_name test.example.de service_description HTTP check_command check_nrpe_1arg!check_http }
define service { use generic-service host_name test.example.de service_description HTTPS check_command check_nrpe_1arg!check_https }
define service { use generic-service host_name test.example.de service_description SSH check_command check_nrpe_1arg!check_ssh }
define service { use generic-service host_name test.example.de service_description MySQL check_command check_nrpe_1arg!check_mysql }
define service { use generic-service host_name test.example.de service_description SMTP check_command check_nrpe_1arg!check_smtp }
Das Backup legt auf allen Server, während es ausgeführt wird, die Datei `/var/lock/cat_daily_backup.lock` an. Unter Umständen kann ein Fehler im Backup auftreten, der verhindert, dass die Datei wieder entfernt wird. Solange die Datei existiert wird aber kein neues Backup erstellt. Es ist daher wichtig zu prüfen, ob die Datei existiert um sie ggf. zu löschen.
Nagios kann auch hier weiterhelfen, hierzu ist zunächst ein neues Nagios-Plugin zu erstellen (wahlweise in /usr/share/nagios-plugins oder /usr/lib/nagios/plugins):
/usr/share/nagios-plugins/check_file.sh
!/bin/bash
#
Check if a local file exist
# while getopts F: VAR do case "$VAR" in F ) LOGFILE=$OPTARG ;;
- ) echo "wrong syntax: use $0 -F file to check>" exit 3 ;; esac done
if test "$LOGFILE" = "" then echo "wrong syntax: use $0 -F file to check>" exit 3 fi
if test -e "$LOGFILE" then if test -x "$LOGFILE" then echo "Critical $LOGFILE is executable!" exit 2 else echo "Warning $LOGFILE exists!" exit 1 fi else echo "OK: $LOGFILE does not exist!" exit 0 fi
Das Script muss natürlich ausführbar sein: `chmod +x /usr/share/nagios-plugins/check_file.sh`
In der Nagios-Konfiguration kann das Plugin wie folgt eingebunden werden:
/etc/nagios3/conf.d/backup_nagios2.cfg
define command { command_name check_backup command_line /usr/share/nagios-plugins/check_file.sh -F /var/lock/daily_backup.lock }
define service { use generic-service host_name backup.example.de service_description Backup Check check_command check_backup }
Auf den Clients kann das Plugin ebenfalls genutzt werden, hier muss allerdings wie gewohnt der Befehl noch in `/etc/nagios/nrpe.cfg` aufgenommen werden:
/etc/nagios/nrpe.cfg
command[check_backup]=/usr/lib/nagios/plugins/check_file.sh -F /var/lock/daily_backup.lock
Dann kann der Service auf dem Monitorserver angelegt werden:
/etc/nagios3/conf.d/test_nagios2.cfg
define service { use generic-service host_name test.example.de service_description Backup Check check_command check_nrpe_1arg!check_backup }
Abschließend werden Server und Client neu gestartet:
/etc/init.d/nagios3 restart /etc/init.d/nagios-nrpe-server restart
Da viele Server für gleiche oder ähnliche Aufgaben eingesetzt werden kann man in Nagios Gruppen definieren, die auf dieselben Einstellungen zurückgreifen. Hat ein Server einer solchen Gruppe noch weitere Dienste kann man diese in der Nagios-Konfiguration für die entsprechende Maschine hinzufügen.
Zunächst wird die Konfiguration aus z.B. `test_nagios2.cfg` mit Ausnahme der Maschineneinstellungen herausgelöst und in `/etc/nagios3/conf.d/services_nagios2.cfg` verschoben:
/etc/nagios3/conf.d/services_nagios2.cfg
Define a service to check the disk space of the root partition
on the local machine. Warning if < 20% free, critical if
< 10% free space on partition.
define service{ use generic-service ; Name of service template to use hostgroup_name remote service_description Disk Space check_command check_nrpe_1arg!check_all_disks notification_interval 0 ; set > 0 if you want to be renotified }
Define a service to check the number of currently logged in
users on the local machine. Warning if > 20 users, critical
if > 50 users.
define service{ use generic-service ; Name of service template to use hostgroup_name remote service_description Current Users check_command check_nrpe_1arg!check_users notification_interval 0 ; set > 0 if you want to be renotified }
Define a service to check the number of currently running procs
on the local machine. Warning if > 250 processes, critical if
> 400 processes.
define service{ use generic-service ; Name of service template to use hostgroup_name remote service_description Total Processes check_command check_nrpe_1arg!check_total_procs notification_interval 0 ; set > 0 if you want to be renotified }
Define a service to check the load on the local machine.
define service{ use generic-service ; Name of service template to use hostgroup_name remote service_description Current Load check_command check_nrpe_1arg!check_load notification_interval 0 ; set > 0 if you want to be renotified }
define service { use generic-service hostgroup_name remote service_description HTTP check_command check_nrpe_1arg!check_http notification_interval 0 ; set > 0 if you want to be renotified }
define service { use generic-service hostgroup_name remote service_description HTTPS check_command check_nrpe_1arg!check_https notification_interval 0 ; set > 0 if you want to be renotified }
define service { use generic-service hostgroup_name remote service_description SSH check_command check_nrpe_1arg!check_ssh notification_interval 0 ; set > 0 if you want to be renotified }
define service { use generic-service hostgroup_name remote service_description MySQL check_command check_nrpe_1arg!check_mysql notification_interval 0 ; set > 0 if you want to be renotified }
define service { use generic-service hostgroup_name remote service_description SMTP check_command check_nrpe_1arg!check_smtp notification_interval 0 ; set > 0 if you want to be renotified }
define service { use generic-service hostgroup_name remote service_description Backup Check check_command check_nrpe_1arg!check_backup notification_interval 0 ; set > 0 if you want to be renotified }
Anstelle von `host_name` wird `hostgroup_name` verwendet. Diese `hostgroups` werden dann über `/etc/nagios3/conf.d/hostgroups_nagios2.cfg` definiert:
/etc/nagios3/conf.d/hostgroups_nagios2.cfg
A list of your remote servers
define hostgroup { hostgroup_name remote alias npre Clients members test.example.de,sparda.example.de }
Bei `members` werden alle `host_name`-Einträge erfasst die zu der Gruppe `hostgroup_name` gehören sollen.
Die `/etc/nagios3/conf.d/test_nagios2.cfg` sieht nach dieser Aktion wie folgt aus:
/etc/nagios3/conf.d/test_nagios2.cfg
A simple configuration file for monitoring the local host
This can serve as an example for configuring other servers;
Custom services specific to this host are added here, but services
defined in nagios2-common_services.cfg may also apply.
define host{ use generic-host ; Name of host template to use host_name test.example.de alias test.example.de address 217.11.57.11 }
Zusätzliche Dienste, die nur für diesen Server gelten, können natürlich jederzeit hinzugefügt werden. Dienste die für alle remote-Server gelten sollen werden in `/etc/nagios3/conf.d/services_nagios2.cfg` hinzugefügt.