ONLINE

Icinga Web 2 und pnp4nagios

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

pnp4nagios und DNS

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

Anschliessend die OPTS in /etc/default/rrdcached anpassen:

...
##    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

pnp4nagios dns 25hKonfiguriert 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:

...
##    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:

...
##  RUN="no"
RUN="yes"
...

config.php

Auch /etc/pnp4nagios/config.php muss unseren Belangen angepasst werden:

...
## Siehe auch Abschnitt "Was nicht geht"!
##      $conf['nagios_base'] = "/cgi-bin/nagios3";
...
##    $conf['RRD_DAEMON_OPTS'] = '';
$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:

...
##    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:

 ## /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 verbose) 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 icingaweb2 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.

Icinga2, pnp4nagios, nagvisZuguterletzt 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 abschliessenden table um eine weitere kleine Tabelle erweitert:

...
<!-- SHOW PERFORMANCE DATA -->
<table>
   <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 -->
</table>
<!-- END PERFORMANCE DATA -->
...

Was nicht geht

pnp4nagiosDas Ding heisst 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 🙂

  1. Morgen ich finde leider kein apache.conf in /etc/pnp4nagios/ ? ist ein fehler bei mein installation oder die neue version ist so

  2. 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.

  3. 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“;

  4. welches OS werkelt drunter?

  5. warum pnp4nagios und nicht graphite?
    IMHO ist graphite hip, aber pnp4nagios mit rrd genauer?!?

  6. die action_url in den templates brauchst du nicht, das erkennt das #icingaweb2 modul automatisch 🙂

  7. ich finde ja #grafana graphen deutlich schöner 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.