Graf ztráty paketů

Z HKfree wiki
(přesměrováno z Graf ztráty paketů)
Skočit na navigaci Skočit na vyhledávání

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: <bash> #!/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

</bash>

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: <bash> #!/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

</bash> 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.