NagiosGrapher ist ein Addon zu Nagios, um Performancedaten aus den Service-Checks weiterzuverarbeiten und graphisch darzustellen. Einige Features von NagiosGrapher:
NagiosGrapher ist von der NETWAYS GmbH, dem Hoster von NagiosExchange (Autoren: Marius Hein, Gerd Müller). und steht unter der GNU Public License.
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.
# 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.
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.
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.
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
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.
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
}
mkdir -p /var/lib/rrd/nagiosgrapher chown nagios.nagcmd /var/lib/rrd/nagiosgrapher chmod 755 /var/lib/rrd/nagiosgrapher
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).
# 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
}
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
}
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
In Nagiosgrapher-Logfile (i.d.R. unter /var/log/nagios/ngraph.log) prüfen: