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