Icinga Web 2 und pnp4nagios
- PNP: Installation und Konfiguration
- rrdcached: Konfiguration
- Icinga2
- pnp4nagios und Icinga Web 2
- Was nicht geht
Ich möchte pnp4nagios installieren und hübsche bunte Bildchen malen lassen; allerdings nutze ich nicht Nagios, sondern Icinga2 mit Icinga Web 2, das ich wie hier beschrieben aufgesetzt habe. Wie sich alles miteinander verbinden lässt: das möchte ich euch hier vorstellen.
PNP: Installation und Konfiguration
$ apt-get install --no-install-recommends pnp4nagios rrdcached
rrdcached: Konfiguration

Unser rrdcached soll Daten in /var/cache/rrdcached ablegen können; also legst du dieses Verzeichnis an und vergibst in dem Zuge die benötigten Rechte:
$ usermod -G nagios www-data
$ mkdir -p /var/cache/rrdcached
$ chown nagios /var/cache/rrdcached
Anschließend die OPTS in /etc/default/rrdcached anpassen:
## file: "/etc/default/rrdcached"
- OPTS=""
+ OPTS="-w 1800 -z 1800 -j /var/cache/rrdcached -s nagios -m 0660 -l unix:/var/run/rrdcached.sock"
Nun kann der Dienst durchgestartet werden und steht zur Nutzung bereit.
$ service rrdcached restart
Restarting RRDtool data caching daemon: rrdcached.
apache.conf
Die /etc/pnp4nagios/apache.conf habe ich dahingehend modifiziert, als dass ich die Authentifizierung gegen eine htpasswd erstmal ganz rausgenommen habe; wie ich das im produktiven Einsatz löse werde ich noch entscheiden.
npcd.cfg
Konfiguriert ist das Ganze ja auf eine Nagios-Installation, deshalb würde die Software an der falschen Stelle nach Performance-Daten suchen. Diesen Pfad korrigierst du in /etc/pnp4nagios/npcd.cfg:
## file: "/etc/pnp4nagios/npcd.cfg"
- perfdata_spool_dir = /var/spool/pnp4nagios/npcd/
+ perfdata_spool_dir = /var/spool/icinga2/perfdata
npcd
Damit der Dienst npcd, der sich die Performance-Daten abgreift, überhaupt grundsätzlich gestartet wird, muss in /etc/default/npcd Das RUN-Flag entsprechend gesetzt werden:
## file: "/etc/default/npcd"
- RUN="no"
+ RUN="yes"
config.php
Auch /etc/pnp4nagios/config.php muss unseren Belangen angepasst werden:
- $conf['nagios_base'] = "/cgi-bin/nagios3";
- $conf['RRD_DAEMON_OPTS'] = '';
+ ## $conf['nagios_base'] = "/cgi-bin/nagios3";
+ $conf['RRD_DAEMON_OPTS'] = 'unix:/var/run/rrdcached.sock';
Ebenso darfst du nicht vergessen, in /etc/pnp4nagios/process_perfdata.cfg den korrekten Socket für rrdcached anzugeben:
## file: "/etc/pnp4nagios/process_perfdata.cfg"
- RRD_DAEMON_OPTS =
+ RRD_DAEMON_OPTS = unix:/var/run/rrdcached.sock
Icinga2
Damit in /var/spool/icinga2/perfdata überhaupt Daten abgelegt weden, muss das Feature perfdata in Icinga2 aktiviert werden:
$ icinga2 feature enable perfdata
Enabling feature perfdata. Make sure to restart Icinga 2 for these changes to take effect.
Jetzt ist der Zeitpunkt gekommen, Icinga2 um die PNP-Funktionalität zu erweitern; dafür gibt es sicher viele Möglichkeiten und ich zeige hier mal eine davon:
## file: "/etc/icinga2/conf.d/templates.conf"
/*********************************************************************
* GENERAL PNP TEMPLATES
*/
template Host "pnp-host" {
action_url = "/pnp4nagios/graph?host=$HOSTNAME$' class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=_HOST_"
}
template Service "pnp-service" {
action_url = "/pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=$SERVICEDESC$"
}
...
Diese Erweiterung habe ich an den Anfang der templates.conf gesetzt; generic-host und generic-service sind dann die nächsten, die in diesem File definiert werden, und sie werden um jeweils eine Zeile erweitert – am Rest der Template-Definition ändert sich nichts:
...
template Host "generic-host" {
max_check_attempts = 5
...
import "pnp-host"
}
template Service "generic-service" {
max_check_attempts = 5
...
import "pnp-service"
}
...
$ service icinga2 restart
Es lässt sich nun beobachten, wie sich im perfdata-Verzeichnis langsam Daten sammeln. Nun kann auch der npcd gestartet werden – es kann ggf. hilfreich sein, in /etc/pnp4nagios/npcd.cnf das log_level = 0 beispielsweise auf 1 oder gar 2 (das ist dann aber wirklich sehr gesprächig!) zu ändern, so kannst du in /var/log/syslog beobachten, was der Dienst so anstellt.
$ service npcd start
Sobald npcd läuft, leert sich das perfdata-Verzeichnis; in der jetzigen Grundkonfiguration zieht sich der Dienst alle 15 Sekunden neu eintreffende Performance-Daten und bearbeitet sie. Soweit, so gut. Ehe wir nun daran gehen, das Ganze in Icinga Web 2 zu integrieren überprüfen wir, ob alles funktioniert: der Aufruf von http://DEINEDOMAIN/pnp4nagios/ muss zur Übersichtsseite von pnp4nagios führen. Sollte hier allem zum Trotz ein 404er geworfen werden kann es helfen, den Symlink pnp4nagios.conf (er zeigt auf /etc/pnp4nagios/apache.conf), der per Default nach /etc/apache2/conf.d gelegt wird, nach /etc/apache2/conf-enabled zu verschieben und den Webserver durchzustarten. Wenn das Webinterface wie gewünscht funktioniert, machen wir uns an die Integration.
pnp4nagios und Icinga Web 2
$ cd /usr/share/icingaweb2/modules
$ git clone https://github.com/Icinga/icingaweb2-module-pnp4nagios.git pnp4nagios
Cloning into 'pnp4nagios'...
remote: Counting objects: 127, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 127 (delta 0), reused 0 (delta 0), pack-reused 121
Receiving objects: 100% (127/127), 22.15 KiB | 0 bytes/s, done.
Resolving deltas: 100% (37/37), done.
Checking connectivity... done.
Über das Webinterface („Configuration → Modules → pnp4nagios“) wird das Modul aktiviert, und fortan sind die Graphen über Icinga Web 2 einsehbar.
Zuguterletzt modifizieren wir noch , so dass die PNG-Graphen auch in nagvis ohne Umwege angezeigt werden. Ich habe mir hierzu die default.hover.html in /var/lib/nagvis/userfiles/templates geschnappt und vor dem abschließenden table um eine weitere kleine Tabelle erweitert:
<table>
<tbody><tr><th><label>Performance Data</label></th></tr>
<!-- BEGIN service -->
<tr><td><img src="/pnp4nagios/image?host=[obj_name]&srv=[service_description]&view=0"></td></tr>
<!-- END service -->
<!-- BEGIN host -->
<tr><td><img src="/pnp4nagios/image?host=[obj_name]&srv=_HOST_&view=0"></td></tr>
<!-- END host -->
</tbody></table>
Was nicht geht
Das Ding heißt pnp4nagios, nicht pnp4icingaweb2; die nagios_base, die in /etc/pnp4nagios/config.php hinterlegt wird, soll den Pfad zu den CGI-Dateien enthalten – die es unter Icinga Web 2 aber in der althergebrachten Form überhaupt nicht mehr gibt. Konkret sind das schonmal die nebenstehenden beiden Buttons, die so nicht funktionieren können. Da ich die aber auch nicht benötige, habe ich sie in aus der Datei graph_content.php in /usr/share/pnp4nagios/html/application/views einfach herausgeschmissen – was für dich am sinnvollsten ist, musst du selbst herausfinden :-)
8 Kommentare
Von: Bo Sch
2015-11-17 16:14:44 +0100
ich finde ja #grafana graphen deutlich schöner ;)
Von: Icinga
2015-11-20 20:39:46 +0100
die action_url in den templates brauchst du nicht, das erkennt das #icingaweb2 modul automatisch :-)
Von: jan_mayen
2015-11-21 14:12:11 +0100
warum pnp4nagios und nicht graphite?
IMHO ist graphite hip, aber pnp4nagios mit rrd genauer?!?
Von: Timo Ostrowsky
2015-11-22 10:12:19 +0100
welches OS werkelt drunter?
Von: Marianne M. Spiller
2015-11-22 18:33:39 +0100
Das ist ein Ubuntu 14.04.3 (vgl. https://www.unixe.de/icinga2-mit-icingaweb2/) :-)
Von: Dirk
2016-07-25 18:11:28 +0200
Vielen Dank für die Anleitung.
Drei Punkte habe ich angepasst unter Debian Jessie-backports:
usermod -G nagios www-data => usermod -a -G nagios www-data
cp /usr/share/doc/pnp4nagios-web/examples/httpd.conf /etc/pnp4nagios/apache.conf
vi /etc/pnp4nagios/config.php
#$conf['nagios_base'] = "/cgi-bin/nagios3";
$conf['nagios_base'] = "/cgi-bin/icinga";
Von: Ben
2016-08-03 12:20:53 +0200
Ich finde den Beitrag super, wenn Du mal Zeit findest sind die Hinweise von Dirk z.B. ganz nett, deinen Artikel diesbezüglich zu überarbeiten.
Von: audrain
2016-09-08 12:54:27 +0200
Morgen ich finde leider kein apache.conf in /etc/pnp4nagios/ ? ist ein fehler bei mein installation oder die neue version ist so
Hinterlasse einen Kommentar
Ich freue mich über jeden Kommentar, es sei denn, er ist blöd.
Deshalb sind die Kommentare auf dieser Seite auch generell moderiert.