In meine Setup Zuhause verwende ich schon recht lange Raspberry Pi’s(Amazon Link) zb. für die Steuerung meiner Heizung oder als DNS/ldap Server. Diese will ich nun in mein Monitoring mit Icinga2 hinzufügen. Dafür will ich als erstes die Systeminformationen mit NRPE abfragen.
Installation von NRPE auf dem Raspberry Pi
Um den Raspberry Pi via NRPE monitoren zu können, müssen wir sowohl den NRPE Client wie auch die Nagios Plugins installieren. Dafür können wir den folgenden Befehl auf dem Raspberry Pi ausführen.
1 | apt-get install nagios-nrpe-server nagios-plugins-basic |
Nach der Installation finden wir die Plugins unter /usr/lib/nagios/plugins. Die Konfiguration für NRPE liegt unter /etc/nagios. Damit Icinga2 nun eine Verbindung zum NRPE Client aufbauen kann, müssen wir den Server in die NRPE Konfiguration in Zeile 81 eintragen (/etc/nagios/nrpe.cfg).
1 2 3 4 5 6 7 | ... #Vorher allowed_hosts=127.0.0.1 #Nachher allowed_hosts=127.0.0.1,192.168.10.83 ... |
Nach der Änderung muss der NRPE Client neugestartet werden.
1 | systemctl restart nagios-nrpe-server.service |
Installation von NRPE auf dem Icinga2 System
Auf dem Server müssen wir nur das NRPE Skript installieren, um den Client in der Ferne Ansprechen zu können
1 | apt-get install nagios-nrpe-plugin |
Das Skript sollte nun unter /usr/lib/nagios/plugins zu finden sein. Es nennt sich check_nrpe.
Anlegen des NRPE Commands
Nachdem die Systeme nun vorbereitet sind, müssen wir auf dem Icinga2 Server als nächstes eine Command Definition anlegen. Diese wird in /etc/icinga2/conf.d/commands.conf hinzufgefügt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | object CheckCommand "check_nrpe" { import "plugin-check-command" command [ PluginDir + "/check_nrpe" ] arguments = { "-H" = "$nrpe_address$" "-p" = "$nrpe_port$" "-c" = "$nrpe_command$" "-a" = { value = "$nrpe_args$" repeat_key = false order = 1 } } vars.nrpe_address = "$address$" vars.nrpe_port = 5666 } |
Anlegen der NRPE Services
Nachdem wir nun das Check Command haben, müssen wir noch die entsprechenden Services anlegen. Dies können wir in /etc/nagios/conf.d/services.conf.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | apply Service "nrpe-users" { import "generic-service" check_command = "check_nrpe" vars.nrpe_command = "check_users" assign where host.vars.nrpe == "true" } apply Service "nrpe-load" { import "generic-service" check_command = "check_nrpe" vars.nrpe_command = "check_load" assign where host.vars.nrpe == "true" } apply Service "nrpe-zombies" { import "generic-service" check_command = "check_nrpe" vars.nrpe_command = "check_zombie_procs" assign where host.vars.nrpe == "true" } apply Service "nrpe-procs" { import "generic-service" check_command = "check_nrpe" vars.nrpe_command = "check_total_procs" assign where host.vars.nrpe == "true" } |
Ich habe mich hier heute erstmal auf die vier bereits vorhandenen Checks beschränkt. Des weiteren habe ich hier eine Variable host.vars.nrpe definiert. Wenn diese bei dem Host auf true gesetzt wird, dann werden die NRPE Checks verwendet.
Wenn wir zu einem späteren Zeitpunkt mehr NRPE Checks konfiguriert haben, dann macht es hier durchaus Sinn, mehrere Variablen zu definieren.
Anlegen des Raspberry Pi Hosts
Nachdem wir nun das Command und die Services haben, müssen wir noch eine Definition für den Raspberry Pi Host anlegen. Dies könnten wir direkt in /etc/nagios/conf.d/hosts.conf machen. Ich neige dazu, für die Übersichtlichkeit, für meine Raspberry Pi’s eine eigene Datei anzulegen, die ich raspberry.conf nenne. Diese fülle ich dann mit dem folgenden Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | object Host "fhem" { import "generic-host" address = "192.168.10.74" address6 = "::1" vars.os = "Linux" vars.nrpe = "true" vars.notification["mail"] = { /* The UserGroup `icingaadmins` is defined in `users.conf`. */ groups = [ "icingaadmins" ] } } |
Wichtig ist jetzt an dieser Stelle, dass wir vars.nrpe auf true setzten. Sonst würden unsere zuvor definierten Services nicht dem Host zugeordnet.
Jetzt müssen wir Icinga2 noch einmal neustarten, damit die Konfiguration eingelesen wird.
1 | systemctl restart icinga2.service |
Anschließend prüfen wir noch den Status von Icinga2, falls wir einen Syntaxfehler in den Dateien haben. Wenn alles geklappt hat, sollte die Ausgabe ungefähr so aussehen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | root@icinga2:~# systemctl status icinga2.service ● icinga2.service - Icinga host/service/network monitoring system Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; vendor preset: enabled) Active: active (running) since So 2017-07-30 14:29:35 CEST; 50s ago Process: 7078 ExecStartPre=/usr/lib/icinga2/prepare-dirs /usr/lib/icinga2/icinga2 (code=exited, status=0/SUCCESS) Main PID: 7140 (icinga2) Tasks: 16 Memory: 8.2M CPU: 204ms CGroup: /system.slice/icinga2.service ├─7140 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon -e /var/log/icinga2/error.log └─7162 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon -e /var/log/icinga2/error.log Jul 30 14:29:35 icinga2 icinga2[6592]: [2017-07-30 14:29:35 +0200] information/DbConnection: Pausing IDO connection: ido-mysql Jul 30 14:29:35 icinga2 icinga2[6592]: [2017-07-30 14:29:35 +0200] information/ConfigObject: Dumping program state to file '/var/lib/icinga2/icinga2.state' Jul 30 14:29:35 icinga2 icinga2[6592]: [2017-07-30 14:29:35 +0200] information/IcingaApplication: Icinga has shut down. Jul 30 14:29:35 icinga2 systemd[1]: Stopped Icinga host/service/network monitoring system. Jul 30 14:29:35 icinga2 systemd[1]: Starting Icinga host/service/network monitoring system... Jul 30 14:29:35 icinga2 systemd[1]: Started Icinga host/service/network monitoring system. root@icinga2:~# |
Im Frontend sieht das ganze dann so aus.
Danke für deinen Beitrag! Hat mir gefolgen meine Raspi’s im Netzwerk zu überwachen.
Hinweis:
In der Datei commands.cfg muss es
command = [ PluginDir + „/check_nrpe“ ]
heißen. Ansonsten lässt sich Icinga2 nicht starten.