Icinga Web 2 und pnp4nagios

Diesen Beitrag schrieb ich 6 Jahre und 1 Woche zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

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]&amp;srv=[service_description]&amp;view=0"></td></tr>
   <!-- END service -->
   <!-- BEGIN host -->
        <tr><td><img src="/pnp4nagios/image?host=[obj_name]&amp;srv=_HOST_&amp;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 :-)