Graf ztráty paketů
Pomocí rrdtool a skriptu využívajícího příkaz ping lze jednoduše vytvořit graf ztráty paketů.
Sběr dat
Pro vytvoření grafu potřebujeme získat data o aktuální ztrátě. To lze například pomocí tohoto skriptu:
#!/bin/sh rrdtool=/usr/bin/rrdtool rrd=/var/www/stats/ploss.rrd ip=10.107.4.129 # Vytvorit rrd soubor, pokud neexistuje if [ ! -e "$rrd" ]; then $rrdtool create "$rrd" -s 60 \ DS:packetloss:GAUGE:120:0:100 \ RRA:AVERAGE:0.5:1:600 \ RRA:AVERAGE:0.5:15:672 \ RRA:AVERAGE:0.5:60:744 \ RRA:MAX:0.5:1:600 \ RRA:MAX:0.5:15:672 \ RRA:MAX:0.5:60:744 fi # Zmerit PL start=`date +%s` ping_output=`ping -i 0.2 -c 100 -q $ip | grep %` cut_after_proc=${ping_output%\%*} ploss=${cut_after_proc##* } #echo "$rrdtool update $rrd \"$start:$ploss\"" $rrdtool update $rrd "$start:$ploss" exit 0
Skript předpokládá, že příkaz ping (v mém systému z balíku iputils) zná příslušné parametry (pošle 100 paketů v intervalu 0.2s a použije "tichý" mód) a jeho výstup má patřičný formát (obsahuje právě jeden řádek se znakem procenta a přímo před tímto znakem je uvedena procentuální ztráta paketů). Takto může daný výstup z programu ping vypadat
100 packets transmitted, 100 received, 0% packet loss, time 20199ms
Tento skript by měl být vykonán každou minutu - například z cronu. Parametr -s, čili doba mezi dvěmi měřeními, je nastaven na 60 sekund při vytváření rrd souboru a v prvním řádku je u definice vstupních dat řečeno, že po 120 sekundách má být hodnota považována za neznámou.
Vytvoření grafu
Pro vytvoření grafu lze použít následující skript:
#!/bin/sh width=600 height=300 rrdtool=/usr/bin/rrdtool stats_dir=/var/www/stats ploss_stats="$stats_dir/ploss.rrd" ploss_graph0="$stats_dir/ploss.png" $rrdtool graph $ploss_graph0.tmp \ --title 'Ztrata paketu na ronje - Poslednich 10 hodin' \ --start 'end-10h' \ --end 'now-1min' \ --upper-limit 100 \ --lower-limit 0 \ --unit '%' \ --vertical-label '%' \ --imgformat 'PNG' \ --width=$width \ --height=$height \ "DEF:pl=$ploss_stats:packetloss:AVERAGE" \ "CDEF:mpl=pl,UN,0,pl,IF" \ "AREA:mpl#ffcccc" \ "LINE1:mpl#ff0000:ztrata paketu" \ "GPRINT:mpl:AVERAGE:prumerna ztrata=%.1lf%%" \ "GPRINT:mpl:MAX:maximalni ztrata=%.1lf%%\\n" && \ mv $ploss_graph0.tmp $ploss_graph0 exit 0
Pravidelným voláním tohoto skriptu zajistíme aktualizaci grafu. Narozdíl od sběru dat není nutné použít předem daný interval. Na slabších strojích je lepší zvolit delší prodlevu (případně nižší prioritu). Jednoduchou úpravou můžeme vytvořit skript pro týdenní a měsíční grafy.
Jak vypadají vytvořené grafy si můžete prohlédnoutnout na http://meliap.hkfree.org/stats/ronja.html.