Serverüberwachung · 6 min read · Oct 18, 2025

Serverüberwachung mit Icinga auf Debian Squeeze - Seite 3

4 Hinzufügen eines Remote-Servers (server2) zu Icinga

Die Überwachung von localhost ist schön, aber natürlich wäre es noch besser, wenn wir alle unsere Server an einem Ort überwachen könnten. Dies ist mit Icinga möglich, und dieses Kapitel beschreibt, wie wir unseren zweiten Debian Squeeze-Server (server2.example.com) zur Einrichtung hinzufügen können.

Dazu müssen wir den Nagios NRPE (Nagios Remote Plugin Executor)-Server auf server2 installieren und das Nagios NRPE-Plugin auf server1. Der NRPE-Server wird auf server2 lauschen; server1 wird sich mit ihm über das NRPE-Plugin verbinden und Befehle übergeben, die der NRPE-Server auf server2 ausführen wird; er wird die Ergebnisse an server1 zurückgeben.

Zuerst installieren wir das Paket nagios-nrpe-plugin auf server1:

server1:

apt-get install nagios-nrpe-plugin

Nagios-Webadministrationspasswort: <– nagiosadmin_password
Passwortbestätigung: <– nagiosadmin_password

Jetzt gehen wir zu server2:

server2:

Installieren Sie das Paket nagios-nrpe-server:

apt-get install nagios-nrpe-server

Arbeitsgruppe/Domänenname: <– WORKGROUP

Öffnen Sie nun /etc/nagios/nrpe.cfg:

vi /etc/nagios/nrpe.cfg

Wir müssen den NRPE-Server so konfigurieren, dass server1 (IP: 192.168.0.100) sich verbinden kann, daher fügen wir 192.168.0.100 zur Zeile allowed_hosts hinzu:

| [...] # ERLAUBTE HOST-ADRESSEN # Dies ist eine optionale, durch Kommas getrennte Liste von IP-Adressen oder Hostnamen # die mit dem NRPE-Daemon kommunizieren dürfen. # # Hinweis: Der Daemon führt nur eine rudimentäre Überprüfung der IP # Adresse des Clients durch. Ich würde dringend empfehlen, Einträge in Ihrer /etc/hosts.allow # Datei hinzuzufügen, um nur dem angegebenen Host zu erlauben, sich mit dem Port zu verbinden, # auf dem Sie diesen Daemon ausführen. # # HINWEIS: Diese Option wird ignoriert, wenn NRPE unter inetd oder xinetd ausgeführt wird allowed_hosts=127.0.0.1,192.168.0.100 [...] |

(Wenn Sie dies nicht tun, erhalten Sie den folgenden Fehler, wenn Sie ausführen

/usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101

auf server1:

root@server1:/etc/nagios-plugins/config# /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101  
CHECK_NRPE: Fehler - SSL-Handshake konnte nicht abgeschlossen werden.  
root@server1:/etc/nagios-plugins/config#

)

Außerdem muss server1 die Berechtigung haben, Befehlszeilenargumente an den NRPE-Server zu übergeben, daher setzen wir in derselben Datei dont_blame_nrpe auf 1:

| [...] # BEARBEITUNG DER BEFEHLSARGUMENTE # Diese Option bestimmt, ob der NRPE-Daemon es Clients erlaubt # Argumente für Befehle anzugeben, die ausgeführt werden. Diese Option funktioniert nur, # wenn der Daemon mit dem --enable-command-args-Konfigurationsskript # konfiguriert wurde. # # * DAS AKTIVIEREN DIESER OPTION IST EIN SICHERHEITSRISIKO! * # Lesen Sie die SECURITY-Datei für Informationen zu einigen der Sicherheitsimplikationen # der Aktivierung dieser Variablen. # # Werte: 0=nicht erlauben, 1=Argumente für Befehle erlauben dont_blame_nrpe=1 [...] |

(Wenn Sie dies nicht tun, sehen Sie den Fehler

CHECK_NRPE: 0 Bytes vom Daemon empfangen. Überprüfen Sie die Protokolle des Remote-Servers auf Fehlermeldungen.

für viele Remote-Dienstprüfungen in der Icinga-Weboberfläche, und in /var/log/syslog auf server2 sehen Sie diese Fehler:

Aug 23 14:20:20 server2 nrpe[11496]: Fehler: Anfrage enthielt Befehlsargumente, aber die Argumentoption ist nicht aktiviert!  
Aug 23 14:20:20 server2 nrpe[11496]: Clientanfrage war ungültig, breche ab...

)

Schließlich müssen wir Befehlsdefinitionen für jede Dienstprüfung hinzufügen, die wir auf server2 ausführen möchten und die nicht bereits definiert ist. Ich möchte die Prüfungen check_procs, check_all_disks und check_mysql_cmdlinecred auf server2 ausführen; diese sind nicht in /etc/nagios/nrpe.cfg definiert, also füge ich sie jetzt hinzu (ich möchte auch die Prüfungen check_users und check_load ausführen, aber diese sind bereits definiert):

| [...] command[check_procs]=/usr/lib/nagios/plugins/check_procs -w 250 -c 400 command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w '20%' -c '10%' -e command[check_mysql_cmdlinecred]=/usr/lib/nagios/plugins/check_mysql -H localhost -u 'nagios' -p 'howtoforge' [...] |

(Wenn Sie dies nicht tun, erhalten Sie Fehler wie

NRPE: Befehl 'check_all_disks' nicht definiert  
NRPE: Befehl 'check_mysql_cmdlinecred' nicht definiert  
NRPE: Befehl 'check_procs' nicht definiert

in der Icinga-Weboberfläche.)

Wie Sie sehen, habe ich die Befehlszeilenargumente fest codiert, da die Verwendung von Variablen wie command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ für mich nicht funktioniert hat. Aber dennoch, wenn wir die Dienstprüfungen für server2 auf server1 konfigurieren, müssen wir Befehlszeilenargumente an diese Prüfungen übergeben; server2 wird diese ignorieren, da ich die Befehlszeilenargumente in /etc/nagios/nrpe.cfg fest codiert habe, aber wenn Sie sie weglassen, erhalten Sie Fehler wie /usr/lib/nagios/plugins/check_nrpe: Option erfordert ein Argument – ‘a’ in der Icinga-Weboberfläche.

Jetzt speichern Sie die Datei und starten den NRPE-Server neu:

/etc/init.d/nagios-nrpe-server restart

Überprüfen Sie nun, ob der NRPE-Server lauscht:

netstat -tap | grep nrpe
root@server2:~# netstat -tap | grep nrpe  
tcp        0      0 *:nrpe                  *:*                     LISTEN      2132/nrpe  
root@server2:~#

Gehen Sie nun zurück zu server1…

server1:

… und überprüfen Sie, ob es sich mit dem NRPE-Server auf server2 verbinden kann:

/usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101

Die Ausgabe sollte im Erfolgsfall wie folgt aussehen:

root@server1:~# /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101  
NRPE v2.12  
root@server1:~#

Gehen Sie nun zurück zu server2:

server2:

Wir möchten MySQL auf server2 überprüfen; da wir den NRPE-Daemon verwenden, können wir die Prüfung lokal auf server2 durchführen, d.h. wir müssen MySQL nicht nach außen öffnen, um server1 die Prüfung durchführen zu lassen. Daher erstelle ich den MySQL-Benutzer nagios für localhost und localhost.localdomain anstelle von 192.168.0.100 und server1.example.com:

mysql -u root -p
GRANT USAGE ON *.* TO nagios@localhost IDENTIFIED BY 'howtoforge';  
GRANT USAGE ON *.* TO [email protected] IDENTIFIED BY 'howtoforge';  
FLUSH PRIVILEGES;
quit;

Jetzt gehen wir zurück zu server1…

server1:

… und erstellen die Icinga-Konfiguration für server2:

vi /etc/icinga/objects/server2_icinga.cfg

| define host{ use generic-host host_name server2.example.com alias server2 address 192.168.0.101 } define service{ use generic-service host_name server2.example.com service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use generic-service ; Name der zu verwendenden Servicetemplates host_name server2.example.com service_description Disk Space check_command check_nrpe!check_all_disks!20%!10% } define service{ use generic-service host_name server2.example.com service_description Current Users check_command check_nrpe!check_users!20!50 } define service{ use generic-service ; Name der zu verwendenden Servicetemplates host_name server2.example.com service_description Total Processes check_command check_nrpe!check_procs!250!400 } define service{ use generic-service ; Name der zu verwendenden Servicetemplates host_name server2.example.com service_description Current Load check_command check_nrpe!check_load!5.0!4.0!3.0!10.0!6.0!4.0 } define service{ use generic-service host_name server2.example.com service_description MySQL check_command check_nrpe!check_mysql_cmdlinecred!nagios!howtoforge } define service{ use generic-service host_name server2.example.com service_description SMTP check_command check_smtp } define service{ use generic-service host_name server2.example.com service_description POP3 check_command check_pop } define service{ use generic-service host_name server2.example.com service_description IMAP check_command check_imap } |

(Wie ich bereits erwähnt habe, obwohl ich die Befehlszeilenargumente für einige Befehle in /etc/nagios/nrpe.cfg auf server2 fest codiert habe, müssen wir dennoch Befehlszeilenargumente für bestimmte dieser Prüfungen hier hinzufügen.)

Wie Sie sehen, verwende ich check_nrpe für einige Prüfungen und übergebe die tatsächliche Prüfung (wie check_all_disks) als Befehlszeilenargument an check_nrpe. Dies sind die Prüfungen, die lokal vom NRPE-Server auf server2 ausgeführt werden. check_nrpe ist nicht für alle Prüfungen erforderlich. Prüfungen, die eine Verbindung von außen testen, wie check_ping oder check_smtp, können von server1 aus durchgeführt werden.

Um die SSH- und HTTP-Dienste auf server2 zu überprüfen, können wir ENTWEDER die folgenden Abschnitte zu /etc/icinga/objects/server2_icinga.cfg hinzufügen…

| [...] define service { use generic-service host_name server2.example.com service_description SSH check_command check_ssh } define service { use generic-service host_name server2.example.com service_description HTTP check_command check_http } |

ODER wir fügen server2.example.com zu den Hostgruppen http-servers und ssh-servers in /etc/icinga/objects/hostgroups_icinga.cfg hinzu:

vi /etc/icinga/objects/hostgroups_icinga.cfg

| # Einige generische Hostgruppendefinitionen # Eine einfache Wildcard-Hostgruppe define hostgroup { hostgroup_name all alias Alle Server members * } # Eine Liste Ihrer Debian GNU/Linux-Server define hostgroup { hostgroup_name debian-servers alias Debian GNU/Linux-Server members localhost,server2.example.com } # Eine Liste Ihrer Webserver define hostgroup { hostgroup_name http-servers alias HTTP-Server members localhost,server2.example.com } # Eine Liste Ihrer ssh-zugänglichen Server define hostgroup { hostgroup_name ssh-servers alias SSH-Server members localhost,server2.example.com } |

Icinga neu starten:

/etc/init.d/icinga restart

Danach sollten Sie server2 in der Icinga-Weboberfläche finden:

Hier sind die Dienstprüfungen für server2:

Wenn Sie server2 zu den Hostgruppen hinzugefügt haben, sollte es auch unter der Dienstübersicht für alle Hostgruppen aufgeführt sein:

5 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.