Allgemeines
Nagios ist eine Monitoring-Software mit deren Hilfe man einen oder mehrere Server überwachen kann.
Im Fall dass ein Server eine Fehlfunktion aufweist, bietet nagios eine große Anzahl von Möglichkeiten auf diesen Fehler zu reagieren, bis hin zur Mailbenachrichtigung.
In diesem Artikel wird die Administration von Nagios behandelt.
Für die Installation und Grundkonfiguration von Nagios lesen sie bitte den Artikel Installation und Konfiguration nagios core und plugins
Grundlagen
Wo finde ich die Konfigurationsdateien
In der normalen Installation findet man nagios im Verzeichnis /usr/local/nagios
Hierunter sind weitere Verzeichnisse vorhanden:
Verzeichnis | Konfigurationsdatei | Bedeutung |
---|---|---|
/usr/local/nagios/etc | nagios.cfg | Grundlegende Konfigurationsdatei Hier sollte man keine direkte Konfigurationsanweisungen einfügen. |
/usr/local/nagios/etc/objects | commands.cfg | Hier werden die Kommandos definiert mit deren Hilfe der Status von Services ermittelt wird. Diese Kommandos verwenden Hilfsprogramme, welche im Verzeichnis /usr/local/nagios/libexec gespeichert sind. Die Kommandos können durch Parameter und Variablen gesteuert werden. |
/usr/local/nagios/etc/objects | templates.cfg | Hier können für Gruppen von Servern oder Services Vordefinitionen getroffen werden, z.B. wie oft sie kontrolliert werden, oder wer im Fall einer Fehlfunktion zu informieren ist. |
/usr/local/nagios/etc/objects | localhost.cfg | Die vorgegebene Konfigurationsdatei für den Server auf dem nagios läuft. |
/usr/local/nagios/etc/objects | myserver.cfg | Um den Serverpark zu erweitern sollte für jeden zu überwachenden Server hier eine Konfigurationsdatei anzulegen. |
/usr/local/nagios/libexec | diverse | Nach der Installation der Plugins findet man hier kleine Tools mit deren Hilfe man den status von Services ermitteln kann. root@myserver:/usr/local/nagios/libexec# ./check_ping check_ping: Argumente konnten nicht ausgewertet werden Usage: check_ping -H <host_address> -w <wrta>,<wpl>% -c <crta>,<cpl>% [-p packets] [-t timeout] [-4|-6] root@myserver:/usr/local/nagios/libexec# Ebenso ist es möglich in diesem Verzeichnis eigene Tools zu entwickeln und nagios damit zu erweitern.
|
Übernahme der neuen Konfiguration
Nach jeder Anpassung an den Konfigurationsdateien muss nagios core neu gestartet werden.
root@myserver:/usr/local/nagios# service nagios restart Running configuration check... Stopping nagios: done. Starting nagios: done. root@myserver:/usr/local/nagios#
Einen neuen Server hinzufügen
Wie bereits erwähnt soll zur Erhaltung der Übersichtlichkeit je Server eine Konfigurationsdatei verwendet werden.
Diese wird in die zentrale Konfigurationsdatei nagios.cfg eingebunden.
cfg_file=/usr/local/nagios/etc/objects/bpi.cfg
Der Server "bpi" erhält als grundlegend zu überwachende Funktionen
- die netztechnische Erreichbarkeit, welches mit dem Kommando "ping" festgestellt wird.
- Die Erreichbarkeit des ssh-Services, mit deren Hilfe man sich auf dem System anmelden/einloggen könnte
define host{ use linux-server ; Es wird das Template "linux-Server" verwendet, hierdurch werden einige vordefinierte Werte verwendet. host_name bpi alias bpi address 192.168.101.28 } define service{ use local-service ; Name of service template to use host_name bpi service_description PING ; Warnstufe wenn 20% der Pakete verloren gehen oder die mittlere Antwortzeit über 100ms beträgt. ; Kritische Alarmstufe wenn 60% der Pakete verloren gehen oder die mittlere Antwortzeit über 500ms beträgt. check_command check_ping!100.0,20%!500.0,60% } define service{ use local-service ; Name of service template to use host_name bpi service_description SSH check_command check_ssh notifications_enabled 0 }
Monitoring Remoteserver
Überwachung von Ports auf entfernten Servern
Es gehört zu den grundlegenden Aufgaben des Servermonitorings zu prüfen, ob bestimmte Netzwerkports erreichbar sind und ob sie einen bestimmten Service anbieten.
Hierzu eignet sich das universell einsatzbare Tool "check_tcp", dass viele Funktionen rund um einen tcp-Port bereitstellt.
Die Funktion "check_imap" ist nur ein Alias auf "check_tcp"
Im folgenden werden als Beispiele verwendet die Überwachung eines Apache-Webservers (mit https-Protokoll bzw. SSL-Zertifikat) und eines Imap-Mailservers ebenfalls mit Verschlüsselung und SSL-Zertifikat
define service{ use local-service ; Name of service template to use host_name bpi service_description IMAP-SSL check_command check_imap!-p 993 -S -D 60,20 notifications_enabled 0 } define service{ use local-service ; Name of service template to use host_name bpi service_description Apache-SSL ; Erster Parameter ist der zu überwachende Port ; Zweiter Parameter -S für die Anwendung der SSL-Verschlüsselung, ; -D für die Prüfung der Gültigkeit des Zertifikats (Warnung 60 Tage vor Ablauf, 20 Tage für kritischen Alarm) check_command check_tcp!443!-S -D 60,20 notifications_enabled 0 }
Prüfung von Prozessen auf entfernten Servern
Ebenfalls eine wichtige Funktion ist die Prüfung ob auf einem entfernten Server ein bestimmter Prozess läuft bzw. ein bestimmter Service gestartet ist.
Hierzu kann man das mitgelieferte Tool "check_by_ssh" verwenden, welches allerdings noch in die Kommando-Liste aufgenommen werden muss.
# 'check_by_ssh' command definition define command{ command_name check_by_ssh command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -p $ARG1$ -l $ARG2$ $ARG3$ }
Ferner ist es erforderlich, dass sich der User nagios ohne Kennwort auf dem Zielserver anmelden kann.
Hierzu muss der lokale Benutzer "nagios" einen ssh-key generieren, dessen öffentlicher Teil im Zielserver / Zielaccount in die Datei $HOME/.ssh/authorized_keys einzutragen ist.
"Zielaccount" sollte dabei ein Benutzer mit möglichst geringen Rechten auf dem Zielsystem sein.
Es wird dringend davon abgeraten, den Systemuser "root" hierfür zu verwenden. (Sicherheitsrisiko)
Die Rechte des Benutzers sollten gerade so hoch sein, dass der gewünschte Befehl ausgeführt werden kann.
root@myserver:/root# su - nagios nagios@myserver:~$ ssh-keygen -t rsa -b 1024 Generating public/private rsa key pair. Enter file in which to save the key (/home/nagios/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/nagios/.ssh/id_rsa. Your public key has been saved in /home/nagios/.ssh/id_rsa.pub. The key fingerprint is: 4a:02:d5:40:....:b9:26:46 nagios@myserver The key's randomart image is: +--[ RSA 1024]----+ |ooo++o | ... |=+. | +-----------------+ nagios@myserver:~$ Den Inhalt der Datei .ssh/id_rsa.pub --- kopieren -----> Zielserver, Zielaccount --> $HOME/.ssh/authorized_keys !!!!!!!!!!!!!!!!!!! Mindestens 1x manuell anmelden um den Fingerabdruck zu bestätigen. !!!!!!!!!!!!!!!!!!! nagios@myserver:~$ ssh Zielaccount@Zielserver The authenticity of host '[Zielserver]:22 ([IP-Adresse]:22)' can't be established. ECDSA key fingerprint is 80:70:62:14:1a:.....:63:54:1a:27:97. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[Zielserver]:22,[IP-Adresse]:22' (ECDSA) to the list of known hosts. Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 2.6.32-042stab120.6 i686) * Documentation: https://help.ubuntu.com/ Last login: Sun Jan 1 14:03:57 2017 from MYSERVER Zielaccount@Zielserver:~# logout Connection to Zielserver closed. nagios@myserver:~$ logout
Nun noch den Service konfigurieren
# 'check_by_ssh' command definition define command{ command_name check_by_ssh command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -p $ARG1$ -l $ARG2$ $ARG3$ }
und für den Server
define service{ use local-service ; Name of service template to use host_name bpi service_description Confluence-Service check_command check_by_ssh!22!Zielaccount!/etc/init.d/wiki status notifications_enabled 0 }
Filesystembenutzung auf entfernten Servern
Das Thema ist im Internet immer wieder Anlass für größere Diskussionen.
Wenn man aber bereits die vorstehende Lösung realisiert hat und kann Kommandos auf dem fernen Server ausführen - dann ist die Sache nicht mehr so schwierig
Auf dem Zielserver das folgende Script speichern und Ausführungsrechte für den User vergeben der für die Ausführung vorgesehen ist (siehe vorherigen Abschnitt)
Das nachstehende Script funktioniert nur, wenn das gewünschte Filesystem gemountet ist.
Es kann also nicht auf einzelne Verzeichnisse innerhalb eines gemounteten Filesystems angewendet werden.
#!/bin/bash USED=`df|awk ' $6=="'$1'" { print $5 } '|sed -e 's/%//'` [ -z "$USED" ] && echo "Das angegebene Verzeichnis ist nicht gemountet" && exit 0 [ "$USED" -ge $2 ] && [ "$USED" -lt $3 ] && echo "WARNUNG: Filesystem $USED: Es sind $USED % belegt" && exit 1 [ "$USED" -ge $3 ] && echo "KRITISCH: Filesystem $USED: Es sind $USED % belegt" && exit 2 echo "OK Filesystem $USED % belegt" exit 0
Und den passenden Service dazu:
define service{ use local-service ; Name of service template to use host_name bpi service_description Filesystem_root check_command check_by_ssh!22!Zielaccount!/path/to/script/check_diskfree.sh / 70 89 notifications_enabled 0 } define service{ use local-service ; Name of service template to use host_name bpi service_description Filesystem_var check_command check_by_ssh!22!Zielaccount!/path/to/script/check_diskfree.sh /var 80 90 notifications_enabled 0 }