By using this website, you agree to the use of cookies as described in our Privacy Policy.

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: 336

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: 241

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: 250

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:

Temperatur

 

  • Zugriffe: 231

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?

eth0

  • Zugriffe: 246