Translations of this page:

NagiosGrapher

Was ist NagiosGrapher

NagiosGrapher ist ein Addon zu Nagios, um Performancedaten aus den Service-Checks weiterzuverarbeiten und graphisch darzustellen. Einige Features von NagiosGrapher:

  • Auswertung der von Nagios gelieferten Performancedaten über Regular Expressions, d.h. es lassen sich auch die Textausgaben von Plugins verarbeiten, wenn keine Performancedaten zur Verfügung stehen
  • Speicherung der Daten (Maximum, Minimum, Average) in Round Robin Databases (RRD)
  • graphische Aufbereitung der Daten mit den Mitteln der rrdtools
  • automatische Generierung von serviceextinfo-Einträgen

NagiosGrapher ist von der NETWAYS GmbH, dem Hoster von NagiosExchange (Autoren: Marius Hein, Gerd Müller). und steht unter der GNU Public License.

Nagios und Performancedaten

Was sind Performancedaten?

Performancedaten sind zusätzliche Angaben, die neuere Plugins (in der Regel ab Version 1.4) zusätzlich zur normalen Textausgabe liefern:

./check_icmp -H localhost
OK - localhost: rta 0.054ms, lost 0%|rta=0.054ms;200.000;500.000;0; pl=0%;40;80;;

Die Performancedaten befinden sich hinter der Textausgabe, getrennt durch ein '|' (sie werden in der Nagios-Weboberfläche nicht angezeigt. Das Format der Performancedaten ist:

 <variable>=<wert>;<warn>;>crit>;<min>;<max>

NagiosGrapher kann zwar auch die Textausgabe weiterverarbeiten (nützlich bei Plugins, die keine Performancedaten liefern), Werte wie Warn- und kritische Schwelle bekommt man aber nur über die Performancedaten.

Wie übergibt Nagios Performancedaten an NagiosGrapher?

# nagios.cfg
...
process_performance_data=1
service_perfdata_command=process-service-perfdata
...

Der Parameter process_performance_data schaltet mit dem Wert 1 überhaupt erst die Verarbeitung von Performancedaten frei. Mit dem Wert 0 (Voreinstellung) ignoriert Nagios im wesentlichen die Performancedaten (man bekommt sie aber über das extinfo.cgi angezeigt). Mit service_perfdata_command wird ein Nagios-Kommando-Objekt angegeben, das nach jedem Service-Check aufgerufen wird und die Performancedaten übergeben bekommt.

Die Definition des Kommandos process-service-perfdata:

# misccommands.cfg
...
define command {
   command_name   process-service-perfdata
   command_line   /usr/local/nagios/nagiosgrapher/fifo_write.pl /var/nagios/ngraph.pipe \ 
          '$HOSTNAME$\t$SERVICEDESC$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n' 3
} 

fifo_write.pl ist ein Wrapper, der bei NagiosGrapher mitgeliefert werden soll und die Daten in die Named Pipe /var/nagios/ngraph.pipe schreibt. Der Wrapper sorgt dafür, dass bei Schreibproblemen die Operation nach einem Timeout (hier: 3) abgebrochen wird, um ein hängendes Nagios zu verhindern. Als Parameter bekommt fifo_write.pl außerdem noch einen Text mit, der sich aus den Inhalten mehrerer Nagios-Makros zusammensetzt.

Zur Aktivierung fehlt jetzt nur noch ein Reload von Nagios, aber damit sollte man noch etwas warten, bis die NagiosGrapher-Installation abgeschlossen ist.

Installation von NagiosGrapher

Benötigte Software

NagiosGrapher greift auf einige Perl-Module zurück: GD, CGI, RRDs, XML::SIMPLE (bis einschließlich Version 1.3), XML::Parser (bis einschließlich Version 1.3) und Data::Dumper (ab Version 1.3). Die XML-Module benötigt man nur, wenn mit NagiosGrapher-Versionen vor 1.3 gearbeitet wurde und jetzt auf 1.3 umgestellt wird. Wer direkt mit 1.3 beginnt, kann darauf verzichten.

Perlmodule kann man entweder aus der jeweiligen Linux-Distribution installieren oder über das CPAN installiert werden:

perl -MCPAN -e 'install CGI'

installiert das CGI-Modul. Das Modul RRDs wird zusammen mit den RRDtools ausgeliefert und ist nicht über das CPAN installierbar. Data::Dumper gehört bereits zum Grundumfang einer Perlinstallation und muss nicht einzeln installiert werden.

NagiosGrapher entpacken und installieren

Das NagiosGrapher-Paket findet man unter http://www.nagiosexchange.org/Charts.42.0.html. Man entpackt es am besten nach /usr/local/nagios:

cd /usr/local/nagios
tar xvjf /pfad_zu_/NagiosGrapher_1.3-dev.tar.bz2
ln -s NagiosGrapher_1.3-dev nagiosgrapher

Der Symlink erleichtert hinterher den Umstieg auf neuere Versionen, weil man jetzt immer den gleichen Pfad /usr/local/nagios/nagiosgrapher verwenden kann.

Weitere Schritte:

cd /usr/local/nagios/nagiosgrapher
cp *.cgi /usr/local/nagios/sbin
chown nagios.nagcmd /usr/local/nagios/sbin/{graphs,rrd2-path}.cgi
ln -s /usr/local/nagios/nagiosgrapher/NagiosGrapher.pm /usr/local/nagios/sbin/.

Die cgi-Skripte werden nach /usr/local/nagios/sbin kopiert (dem Nagios-CGI-Verzeichnis), die Permissions sorgen dafür, dass der Webuser (der Mitglied der Gruppe nagcmd sein sollte) die Skripte auch ausführen darf (falls die Perms auf 750 stehen, bei 755 spielt das keine wirkliche Rolle).

Die NagiosGrapher-Skripte (die beiden CGIs und das collect2.pl) laden das Modul NagiosGrapher.pm. Bei den meisten Distributionen reicht es, wenn das Modul im gleichen Verzeichnis wie das ausgeführte Perlskript liegt (oder ein Symlink, siehe oben). Bei manchen Distributionen (Debian/Sarge, anscheinend auch SLES9) genügt das nicht:

Debian:

ln -s /usr/local/nagios/nagiosgrapher/NagiosGrapher.pm /etc/perl

SLES9: (nicht getestet, Rückmeldung wäre hilfreich) in den drei Skripten explizit den Pfad zum Perlmodul eintragen mit:

use lib "/usr/local/nagios/nagiosgrapher";

Konfigurationsdatei und Logos kopieren:

cp cfg/ngraph.ncfg /etc/nagios/.
cp graph.png dot.png /usr/local/nagios/share/images/logos/.

Die Konfigurationsdatei ngraph.ncfg (Achtung: seit Version 1.3 neue Endung *.ncfg, vorher Endung *.cfg) kopiert man nach /etc/nagios/., die beiden Icon-Dateien in das Unterverzeichnis ./logos der Nagios-Images.

Startupskript und Autostart

Im Startup-Skript nagios_grapher muss der Pfad des Kollektors überprüft werden:

DAEMON=/usr/local/nagios/nagiosgrapher/collect2.pl

Anschließend kopiert man das Startup-Skript nach /etc/init.d:

cp nagios_grapher /etc/init.d/.

Wie der Autostart beim Booten aussieht, hängt von der verwendeten Distribution ab: Manuell (z.B. bei Debian Sarge):

ln -s /etc/init.d/nagios_grapher /etc/rc2.d/S99nagios_grapher
ln -s /etc/init.d/nagios_grapher /etc/rc3.d/S99nagios_grapher
ln -s /etc/init.d/nagios_grapher /etc/rc4.d/S99nagios_grapher
ln -s /etc/init.d/nagios_grapher /etc/rc5.d/S99nagios_grapher

Je nach Distribution liegen die rc?.d-Verzeichnisse in /etc oder /etc/init.d.

Debian-Automatik (statt Links manuell anlegen):

update-rc.d nagios_grapher defaults

SUSE-Automatik (statt Links manuell anlegen):

insserv nagios_grapher

Redhat/Fedora-Automatik (statt Links manuell anlegen):

chkconfig --add nagios_grapher
chkconfig nagios_grapher on

Konfiguration

Die zentrale Konfigurationsdatei ist /etc/nagios/ngraph.ncfg. Darin befindet sich ein Block

define config{
}

für die globalen Einstellungen, und ein oder mehrere Blöcke

define ngraph{
}

in denen jeweils die Verarbeitung der Daten und der Graph an sich definiert werden. Außerhalb dieser beiden Anweisungen gibt es zwei weitere Parameter (ab NagiosGrapher Version 1.3):

cfg_file=...
cfg_dir=...

Hier können weitere Konfigurationsanweisungen aufgenommen werden, die Funktionsweise ist identisch mit den gleichnamigen Anweisungen in der Nagios-Konfigurationsdatei nagios.cfg.

Globale Konfiguration

define config {
      pipe                    /var/nagios/ngraph.pipe
      step                    60
      heartbeat               600
      rrdpath                 /var/lib/rrd/nagiosgrapher
      tmppath                 /tmp/nagiosgrapher/
      serviceext_type         MULTIPLE
      serviceextinfo          /etc/nagios/serviceextinfo.cfg
      serviceext_path         /etc/nagios/serviceext
      url                     /nagios/cgi-bin/graphs.cgi
      nagios_config           /etc/nagios/nagios.cfg
      cgi_config              /etc/nagios/cgi.cfg
      icon_image_tag          dot.png' border="0"></a><A TARGET="_blank" HREF="graphs.cgi?###URL###" BORDER="0"><img src="/nagios/images/logos/graph.png" border="0"
      log_file                /var/log/nagios/ngraph.log
      log_level               4
      # log_level               37
      # log_level               255
      # -- rrd display options
      rrd_color_background    fcfcfc
      rrd_color_font          333333
      rrd_color_arrow         ff0000
      rrd_color_frame         333333
      rrd_color_grid          000000
      rrd_color_canvas        ffffff
      # -- browser
      fe_use_browser_all      0
      # Allow the pagebrowser only for specific users
      fe_use_browser_for      nagios,wob
      # Allow URL override (graphs.cgi?browser=1)
      fe_use_browser_url      0
}
  • pipe: Named Pipe, in die Nagios per write_fifo.pl schreibt und aus der collect2.pl liest. Existiert die Pipe nicht, legt sie collect2.pl an.
  • step: Auflösung in Sekunden, in der die RRD-Datenbank die Messwerte speichert.
  • heartbeat: Zeitfenster in Sekunden, in dem Messwerte eintreffen müssen. Hier im Beispiel: die maximale Auflösung bei step=60 ist eine Minute, d.h. gibt es mehr Messwerte, werden diese gemittelt. Treffen z.B. nur alle 5 Minuten Messwerte ein (also innerhalb des heartbeat-Intervalls), werden die fehlenden Messwerte einfach durch den aktuellen Wert ersetzt, so dass man am Ende auch dann jede Minute einen Messwert in der RRD-Datenbank hat, auch wenn es weniger Messpunkte gab.
  • rrdpath: Pfad für die RRD-Datenbanken. Muss für den Webuser lesbar und für Nagios schreibbar sein:
  mkdir -p /var/lib/rrd/nagiosgrapher
  chown nagios.nagcmd /var/lib/rrd/nagiosgrapher
  chmod 755 /var/lib/rrd/nagiosgrapher
  • tmppath: Pfad für XML-Zwischendateien
  • serviceext_type: SINGLE: alle Einträge werden in eine einzelne Datei geschrieben; MULTIPLE: für jeden Host wird eine eigene Datei angelegt (empfehlenswert)
  • serviceextinfo: Datei für serviceextinfo-Einträge bei SINGLE
  • serviceext_path: Verzeichnis für serviceextinfo-Einträge bei MULTIPLE
  • url: Pfad zum CGI-Skript graphs.cgi
  • nagios_config: Nagios-Haupt-Konfigurationsdatei
  • cgi_config: Nagios-CGI-Konfigurationsdatei
  • icon_image_tag: trickreiche Einbindung des Icons in die Nagios-Weboberfläche, siehe unten
  • log_file: Logfile für NagiosGrapher
  • log_level: was alles geloggt werden soll. Für Debugging-Zwecke: 63, für den Normalbetrieb 0 oder 4 verwenden.
  • rrd_color_*: Optionen zum einfärben der verwendeten RRD-Objekte
  • fe_use_browser_all: ein Wert von 1 generiert zusätzlich in der Weboberfläche ein Auswahlfenster und erlaubt später den Wechsel zu anderen Services und Objekten direkt aus der Weboberfläche heraus.
  • fe_use_browser_for: schränkt die Anzeige des Auswahlformulars auf bestimmte User ein (nur, wenn fe_use_browser_all = 0)
  • fe_use_browser_url=1: Auswahlformular kann über die Url graphs.cgi?browser=1 eingeblendet werden.

icon_image_tag

Normalerweise ist icon_image_tag ein harmloses Icon. Verwendet man aber statt des Icons den im Beispiel angegebenen String

dot.png' border="0"></a><A TARGET="_blank" HREF="graphs.cgi?###URL###" BORDER="0"><img src="/nagios/images/logos/graph.png" border="0"

wird das von Nagios eingesetzte HTML-Tag <image src=' mit dot.png' border=„0“> wieder geschlossen (dot.png ist nicht sichtbar, weil nur ein Pixel groß). Danach folgt dann ein weiteres Icon, hinter dem ein Hyperlink steckt.

Mit diesem Trick wird das Icon graph.png direkt in der Status-Übersicht angezeigt und verweist nicht auf die extinfo.cgi, sondern direkt auf graphs.cgi von NagiosGrapher (man spart sich einen Mausklick, normalerweise müsste man über die extinfo.cgi nochmal auf das Icon klicken).

Definition eines Graphen

# Ping RTA
define ngraph{
      service_name            PING
      graph_perf_regex        rta=([0-9]*\.[0-9]*)
      graph_value             RTA
      graph_units             ms
      graph_legend            Time to answer
      page                    RTA
      rrd_plottype            AREA
      rrd_color               00a000
}
  • service_name: Suchmuster auf den Service-Namen. PING steht für PING genauso wie PING1, PING2, usw. Allerdings kommt NagiosGrapher manchmal durcheinander, wenn gleichlautende Services verwendet werden, die sich nur in Groß-/Kleinschreibung unterscheiden. Tipp: einfache, zusammenhängende Namen ohne Sonderzeichen verwenden (_ ist erlaubt, Leerzeichen vermeiden)
  • graph_perf_regex: Regular Expression, die in den Performancedaten nach den Werten sucht. Die Definition hier passt auf check_icmp, die Ausgabe wurde oben unter Performancedaten bereits beschrieben.
  • graph_value: Identifier (Name) für die Bezeichnung der Variablen in der RRD-Datenbank (keine Sonderzeichen, kein Leerzeichen, _ ist erlaubt)
  • graph_units: Beschriftung der Einheiten auf der y-Achse
  • graph_legend: Legende im Graphen
  • page: liefert ein Plugin mehrere Werte zurück (z.B. RTA und Packet Loss), kann man mit diesem Parameter beide über eine Seite darstellen. Man erhält ein Auswahlformular, mit dem man die jeweilige „Seite“ anzeigen kann.
  • rrd_plottype: Wie soll der Graph aussehen? Mögliche Werte: LINE1, LINE2, LINE3, AREA (und andere für Spezialanwendungen). Beschreibung hierzu
  • rrd_color: Farbe des Graphen

Hier noch ein Beispiel für den zweiten Wert von check_icmp (Packet Loss):

# Ping Packet loss
define ngraph{
      service_name            PING
      graph_perf_regex        pl=([0-9]*)%
      graph_value             Loss
      graph_units             %
      graph_legend            Packet Lost
      page                    Packet Lost
      rrd_plottype            LINE2
      rrd_color               ff0000
}

Inbetriebnahme

  1. log_level in ngraph.ncfg auf 63 setzen.
  2. NagiosGrapher starten (root): /etc/init.d/nagios_grapher start
  3. Nagios reloaden (root): /etc/init.d/nagios reload
  4. Ausgabe des Logfiles /var/nagios/ngraph.log beobachten
  5. in nagios.cfg dafür sorgen, dass die zukünftigen serviceextinfo-Einträge akzeptiert werden (cfg_dir=/etc/nagios/serviceextinfo)
  6. Sind genug Datenbanken und serviceextinfo-Einträge angelegt, erneuter Reload von Nagios, um die Icons in der Weboberfläche anzuzeigen.

Beispiel für eine Ausgabe im Logfile:

2005-11-05 17:07:06 PIPE: hspmaris      PING    CRITICAL - 172.17.10.5: rta nan, lost 100%rta=0.000ms;3000.000;6000.000;0; pl=100%;40;80;;
2005-11-05 17:07:06 VALUES: [hspmaris][PING]: RTA=0.000 Loss=100 
2005-11-05 17:07:06 RRD: rrdtool update /var/lib/rrd/nagiosgrapher/hspmaris/45a5399b3328eff2abab237ea52a60ea.rrd --template=RTA:Loss N:0.000:100
  • PIPE: die von Nagios gesendeten Daten
  • VALUES: ist ein ngraph definiert und klappt die Regular Expression, dann wird hier angezeigt, welche Werte gefunden wurden. Fehlt die Ausgabezeile, verfügt NagiosGrapher über keine passende Definition
  • RRD: die RRD-Aktionen: beim ersten Mal wird mit rrdtool create die Datenbank angelegt, spätere Insert erfolgen mit rrdtool update.
  • Beim ersten Mal wird außerdem ein serviceextinfo-Eintrag angelegt.

Trubelschießen (trouble shooting ;-)

  • ist process_performance_data aktiviert? Reload von Nagios durchgeführt?
  • läuft collect2.pl?

In Nagiosgrapher-Logfile (i.d.R. unter /var/log/nagios/ngraph.log) prüfen:

  • Sendet Nagios Daten an die Pipe? (nach PIPE im Logfile suchen)
  • Erkennt Nagios überhaupt Daten? (Eintrag VALUES im Logfile muss vorhanden sein)
  • Schreibt collect2.pl in die RRD-Datenbank (Einträge RRD im Logfile)
nagios/howtos/nagiosgrapher.txt · Zuletzt geändert: 2006/03/10 08:46 von jhein
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0