Jednoduchý monitoring vytížení síťovky přes snmp a kreslení grafů přes rrdtool

Nacházíte se: / Programování / PHP

Zadání:

Cílem je sledovat vytížení síťovky na vzdáleném serveru pomocí snmp a poté z těchto dat generovat grafy pomocí rrdtool.

 Řešení:

Cron script (spouštím každou minutu):

#!/bin/bash
datadir=/home/scripts
data=`snmpgetnext -c public -v 1 localhost .1.3.6.1.2.1.2.2.1.16.1 .1.3.6.1.2.1.2.2.1.10.1 -O qvU`
download=`echo $data | awk '{ print $1 }' `;
upload=`echo $data | awk '{ print $2 }' `;

if [ ! -e $datadir/eth0.rrd ]; then
  /usr/bin/rrdtool create $datadir/eth0.rrd --step 60 DS:download:COUNTER:1800:0:U DS:upload:COUNTER:1800:0:U RRA:AVERAGE:0.5:1:2016 RRA:AVERAGE:0.5:2:4096
fi

/usr/bin/rrdtool update $datadir/eth0.rrd -t download:upload N:$download:$upload

Generování grafu (php script):

   
<?php
   
    header('Content-Type: image/png');

    $File = "/home/scripts/eth0.rrd";

    $rrd[] = '--imgformat=PNG';
    $rrd[] = '--start=NOW-1D';
    $rrd[] = '--end=NOW';
    $rrd[] = '--title="Network: eth0"';
    $rrd[] = '--height=100';
    $rrd[] = '--width=500';
    $rrd[] = '--lower-limit=0';
    $rrd[] = '--slope-mode';
    $rrd[] = 'DEF:a="' . $File . '":download:AVERAGE';
    $rrd[] = 'DEF:b="' . $File . '":upload:AVERAGE';
    $rrd[] = 'CDEF:a1=a,8,*';
    $rrd[] = 'CDEF:b1=b,8,*';
    $rrd[] = 'AREA:a1#00CF00:"Download [Mb/s]"';
    $rrd[] = 'GPRINT:a1:MAX:"Maximum\: %8.2lf %s"';
    $rrd[] = 'GPRINT:a1:LAST:"Aktualne\: %8.2lf %s\n"';
    $rrd[] = 'LINE1:b1#10389C:"Upload [Mb/s]"';
    $rrd[] = 'GPRINT:b1:MAX:"Maximum\: %8.2lf %s"';
    $rrd[] = 'GPRINT:b1:LAST:"Aktualne\: %8.2lf %s\n"';
    $rrd = implode( " " , $rrd );
    $fp = popen( '/usr/bin/rrdtool graph - ' . $rrd , "r" );
    fpassthru( $fp );
    pclose( $fp );
  
?>

Malá ukázka:

Malá ukázka rrdtool eth0