Nagios/Icinga: Serverüberwachung einrichten

imported

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

}

```## Client ##

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
}
```## Backup-Check ##

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
```## Wartbarkeit verbessern ##

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.


Kommentare

Kommentare unterstützt von Disqus.

Nächster Beitrag Vorheriger Beitrag