Nagios
Nagios Übernahme einer bestehenden Konfiguration
Übernahme einer bestehenden Konfiguration
Im Prinzip recht einfach:
http://www.nconf.org/dokuwiki/doku.php?id=nconf:help:how_tos:import:import_nagios
Was da nicht steht:
-
Vorher muss Perl mit DBI und DBD::mysql installiert sein.
Aber man sollte bedenken, dass das alles nicht so einfach ist. Die Importfunktion stellt sich ein bisschen doof an.
-
Vor dem Import alle mitgelieferten Hosts und Services usw. löschen, sonst beißt sich das.
-
die Service.cfg sollte man mit der Class „advanced-services“ importieren, sonst geht's nicht
-
Wenn nicht alles GANZ SAUBER konfiguriert ist muss man sich auf Fehler beim Generieren der Config gefasst machen. Offenbar ist Icinga ohne NCONF etwas fehlertoleranter. Es empfiehlt sich also, sich die bestehende Konfiguration SEHR genau anzusehen
-
Es ist in jedem Fall tunlich (und vielfach auch nicht zu vermeiden) alle Objekte durchzuchecken.
-
Die beliebte Methode, NRPE eine Unmenge Parameter mitzugeben, funktioniert bim Import überhaupt nicht alles außer dem ersten Parameter wird abgschnitten. Da muss nachgearbeitet werden.
- Zugriffe: 634
PNP4Nagios - Installation
pnp4nagios - Performancedaten verarbeiten
Installion
Die Installation geht mehr als einfach:
apt-get install pnp4nagios
Konfiguration
Anschliessend muss /etc/icinga/icinga.cfg editiert und die Perfdata-Angelegenheiten aktiviert werden
# performance data process_performance_data=1 service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$ host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$ service_perfdata_file_mode=a host_perfdata_file_mode=a service_perfdata_file_processing_interval=30 host_perfdata_file_processing_interval=30 service_perfdata_file=/var/spool/pnp4nagios/nagios/service-perfdata host_perfdata_file=/var/spool/pnp4nagios/nagios/host-perfdata service_perfdata_file_processing_command=pnp-bulknpcd-service host_perfdata_file_processing_command=pnp-bulknpcd-host #define command{ # command_name pnp-bulknpcd-service # command_line /bin/mv /var/spool/pnp4nagios/nagios/service-perfdata /var/spool/pnp4nagios/npcd/service-perfdata.$TIMET$ #}
#define command{ # command_name pnp-bulknpcd-host # command_line /bin/mv /var/spool/pnp4nagios/nagios/host-perfdata /var/spool/pnp4nagios/npcd/host-perfdata.$TIMET$ #}
Nun noch Performance-Data-Commands ind die Commands.cfg einpflegen:
# pnp4nagios define command{ command_name pnp-bulknpcd-service command_line /bin/mv /var/spool/pnp4nagios/nagios/service-perfdata /var/spool/pnp4nagios/npcd/service-perfdata.$TIMET$ } define command{ command_name pnp-bulknpcd-host command_line /bin/mv /var/spool/pnp4nagios/nagios/host-perfdata /var/spool/pnp4nagios/npcd/host-perfdata.$TIMET$ }
Wenn man NCONF benutzen will, müssen die korrespondierenden Teile unter „Misccommands eingetragen werden.
Nun noch /etc/apache2/conf.d/pnp4nagios.conf editieren
AuthName "Icinga Access" AuthType Basic
AuthUserFile /etc/icinga/htpasswd.users
und Apache neu starten.
Jetzt sollten sich bei den einzelnen Checks, so sie denn überhaupt Performancedaten liefern, hübsche Grafiken angezeigt werden. Hübsch ist relativ, sie sehen nämlich alle gleich aus.
{jcomments on}
- Zugriffe: 541
Grundsätzliches über PNP4Nagios-Templates
Anpassung der Grafiken mit Templates
Die Optik der Grafiken wird mit sogenannten Templates gesteuert. Das sind kleine PHP-Schnipsel die offenbar bei der Erzeugung der Grafiken mit eingebunden werden. Wenn man Templates für NRPE Checks benutzen will, muss das Konfiguriert werden. Dann stehen in “/etc/pnp4nagios/check_commands“ entsprechende Dateien. Hier beispielhaft einen solche für check_by_nrpe, die eigentlich schon fast selbsterklärend ist. Schließlich wollen wir das Ergebnis des Checks darstellen und nicht nrpe als solches.
# # Adapt the Template if check_command should not be the PNP Template # # check_command check_nrpe!check_disk!20%!10% # ________0__________| | | | # ________1_____________________| | | # ________2________________________| | # ________3__________________________| # CUSTOM_TEMPLATE = 1 # # Change the RRD Datatype based on the check_command Name. # Defaults to GAUGE. # # DATATYPE = COUNTER
Hier zeigt sich aber auch schon die Schwierigkeit: Wenn man nämlich, wie wir das gern tun, dem nrpe nur ein Arument übergibt, muss das Template einen ziemlich kryptischen Namen haben, zum Beispiel „check_user_-w_10_-c_20.php“. Das ist doof!
Hinzu kommt, dass man dann nicht ein-und-dasselbe Template für mehrere Checks nehmen kann. Alle möglichen Temperaturen könnte man doch auch mit einem Template abhandeln.
Mit einiger Forschungsarbeit hat sich herausgestellt, dass man die Templates unter /etc/pnp4nagios/templates ablegen soll. Um nun (um bei unserem Beispiel zu bleiben) das Temperaturtemplate zu benutzen, legen wir ein Template namens temperatur.php dort hin und verlinken es auf alle erforderlichen Namen. Das können sehr kryptische Namen sein. Wenn man mit mehreren Parametern arbeitet, hat man es leichter, wenn man im ersten Parameter von check_by_nrpe den Namen des Checkscriptes angibt und im zweiten Parameter alles weitere.
Tja und welchen Namen erwartet PNP nun? Ich gebe zu, das ist mitunter sehr kryptisch, aber man findet den Namen heraus, indem man in /etc/pnp4nagios/perfomance_XXXXX.conf das debugging einschaltet (logging=2) dann kann man in /var/log/pnp4nagios/perforXXX.log mitlesen.
{jcomments on}
- Zugriffe: 551
PNP4Nagios - Farbverläufe
Ein Beispiel für Farbverläufe
Mehrfarbige Grafiken machen sich immer gut. Im folgenden Beispiel werden Temperaturen anschaulich gemacht
# Grafik mit Farbverlauf für Temperaturdarstellungen. if ($WARN[1] == "") { $WARN[1] = 0; } if ($CRIT[1] == "") { $CRIT[1] = 0; } $opt[1] = "--vertical-label \"Temperature\" --title \"Temperature for $hostname / $servicedesc\" "; $def[1] = "DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE "; $def[1] .= "LINE1:var1#000000:\"\" "; $def[1] .= "GPRINT:var1:LAST:\"%3.4lg %s$UNIT[1] LAST \" "; $def[1] .= "GPRINT:var1:MAX:\"%3.4lg %s$UNIT[1] MAX \" "; $def[1] .= "GPRINT:var1:AVERAGE:\"%3.4lg %s$UNIT[1] AVERAGE \\n\" "; $def[1] .= "HRULE:$WARN[1]#FFFF00:\"Warning on $WARN[1]C\" "; $def[1] .= "HRULE:$CRIT[1]#FF0000:\"Critical on $CRIT[1]C\" "; ######################################################## ### Hier definieren wir die räumlichen Bereiche für die Farbverlaeufe $def[1] .= "CDEF:sp1=var1,100,/,10,* " ; $def[1] .= "CDEF:sp2=var1,100,/,20,* " ; $def[1] .= "CDEF:sp3=var1,100,/,30,* " ; $def[1] .= "CDEF:sp4=var1,100,/,40,* " ; $def[1] .= "CDEF:sp5=var1,100,/,50,* " ; $def[1] .= "CDEF:sp6=var1,100,/,60,* " ; $def[1] .= "CDEF:sp7=var1,100,/,70,* " ; $def[1] .= "CDEF:sp8=var1,100,/,80,* " ; $def[1] .= "CDEF:sp9=var1,100,/,90,* " ; ######################################################## ### Und hier werden die Farben definiert $def[1] .= "AREA:var1#F0F000:\"Temperature \" "; $def[1] .= "AREA:sp9#F0C000: " ; $def[1] .= "AREA:sp8#F0A000: " ; $def[1] .= "AREA:sp7#F08000: " ; $def[1] .= "AREA:sp6#F00020: " ; $def[1] .= "AREA:sp5#D00040: " ; $def[1] .= "AREA:sp4#B00070: " ; $def[1] .= "AREA:sp3#8000A0: " ; $def[1] .= "AREA:sp2#4000F0: " ; $def[1] .= "AREA:sp1#0000F0: " ; ### Eigentlich ganz einfach, oder? ?>
Und so sieht es aus:
- Zugriffe: 502
PNP4Nagios - Mehrere Graphen in einer Grafik
Weitergehendes Beispiel
Mit dem Check check_snmp_int kann man die Datenübertragungsraten von Netzwerkinterfaces überwachen, und zwar unterteilt in "incoming" und "outgoing". Das werden wir jetzt zunächst einrichten und dann noch aufhübschen. Wir gehen davon aus, dass auf jedem zu überwachenden System snmp installiert ist. Wenn nicht:
apt-get install snmp snmpd
Zunächst mal auf der Kommandozeile:
/usr/lib/nagios/plugins/check_snmp_int.pl -H 192.168.100.4 -C public -n
Damit bekommen wir eine Liste der vorhandenen Interfaces Unser Check sollte also so funktionieren:
/usr/lib/nagios/plugins/check_snmp_int.pl -H 192.168.100.4 -C public -n eth -k -f -w 200,400 -c 0,600
Dabei sollte die SNMP-Community auch wirklich "public" heißen. Das "-f" schaltet die Performance-Daten ein. Die Werte für Warning und Critical (immer getrennt für "in und out", sind mal eine grobe Schätzung, da dran kann und soll man spielen.
Nun bekommt man mit diesem Check auch Performance-Grafiken. Und zwar im üblich-langweiligen hellblau und jeweils eine Graphik für "in" und "out".
Das können wir schöner!
Im Internet habe ich eine Grafik gesehen, die mir gut gefallen hat, da werden die IN und OUT werte untereinander angegeben, sozusagen positive Werte sind IN und ngative Werte sind OUT.
Nun machen wir uns eine Datei /etc/pnp4nagios/templates/check_snmp_int.php mit folgendem Inhalt.
<?php
#
#
$_WARNRULE = #FFFF00;
$_CRITRULE = #FF0000;
$UNIT[1]="Kbps";
$UNIT[2]="Kbps";
$lower = $MAX[2] * -1;
if (strlen ($LABEL[1]) >= strlen ($LABEL[2])){
$lenlabel = strlen ($LABEL[1]) + 2;
} else {
$lenlabel = strlen ($LABEL[2]) + 2;
}
$label1 = sprintf("%' -".$lenlabel."s", $LABEL[1]);
$label2 = sprintf("%' -".$lenlabel."s", $LABEL[2]);
$ds_name[1] = "$LABEL[1] / $LABEL[2] " ;
$opt[1] = "--vertical-label $UNIT[1] --title \"Traffic For $hostname / $servicedesc\" ";
$opt[1] .= '--color=BACK#000000 ';
$opt[1] .= '--color=FONT#F7F7F7 ';
$opt[1] .= '--color=SHADEA#ffffff ';
$opt[1] .= '--color=SHADEB#ffffff ';
$opt[1] .= '--color=CANVAS#000000 ';
$opt[1] .= '--color=GRID#00991A ';
$opt[1] .= '--color=MGRID#00991A ';
$opt[1] .= '--color=ARROW#00FF00 ';
$opt[1] .= '--slope-mode ';
$def[1] = "DEF:inb=$RRDFILE[1]:$DS[1]:MAX " ;
$def[1] .= "DEF:outb=$RRDFILE[2]:$DS[2]:MAX " ;
$def[1] .= "CDEF:outbi=outb,-1,* " ;
$def[1] .= rrd::gradient('inb','f0f0f0','0000a0',$label1,20);
$def[1] .= "GPRINT:inb:LAST:\"%3.3lf $UNIT[1] LAST \" ";
$def[1] .= "GPRINT:inb:MAX:\"%3.3lf $UNIT[1] MAX \" ";
$def[1] .= "GPRINT:inb" . ':AVERAGE:"%3.3lf ' . $UNIT[1] . ' AVERAGE \j" ';
$def[1] .= rrd::gradient('outbi','ffff42','ee7318',$label2,20);
$def[1] .= "GPRINT:outb:LAST:\"%3.3lf $UNIT[2] LAST \" ";
$def[1] .= "GPRINT:outb:MAX:\"%3.3lf $UNIT[2] MAX \" ";
$def[1] .= "GPRINT:outb" . ':AVERAGE:"%3.3lf ' . $UNIT[2] . ' AVERAGE \j" ';
$def[1] .= "COMMENT:\" \\l\" " ;
$def[1] .= "LINE1:0#ffffff " ;
?>
Und SO sieht das Ergebnis aus: Hübsch, oder?
- Zugriffe: 1040