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: