2024. április 25., csütörtök

Gyorskeresés

Útvonal

Cikkek » Számtech rovat

OpenWrt - statisztikák készítése

Adatforgalom, terhelés statisztika készítése rrdtool segítségével

[ ÚJ TESZT ]

Képek generálása

Az adatbázisunkban tárolt adatokat meg tudjuk nézni az

rrdtool dump /opt/rrd_traffic/traffic.rrd

parancs segítségével. Ez azonban csak egy XML formátumban adja vissza az adatokat, ami exportra használható, de a statisztika értelmezésére nem igazán.
Ezért beállítjuk, hogy az rrdtool naponta generálja le nekünk a napi, hetente a heti, havonta a havi statisztikákról a képeket. Igaz, hogy tároljuk az éves adatokat is, de azt én most még nem tettem bele a scriptekbe, de a többi alapján egyértelmű.
Ehhez létre kell hoznunk a generált képek könyvtárát, ami esetünkben legyen a /opt/www/stat_images, mivel úgyis egy web szerver fog olvasni ebből a könyvtárból:

mkdir -p /opt/www/stat_images

A képek létrehozásához 3 scriptet készítettem. Az egyik a forgalom, a másik a terhelés statisztikáról készíti el a képeket, a harmadik pedig ezt a két scriptet hívja. Ezeket természetesen össze lehet gyúrni egyetlen scriptbe is, de talán így átláthatóbb.
Hozzuk létre a forgalmi statisztikáról képet készítő scriptet:

vi /opt/rrd_traffic/makepng_traffic.sh

Majd illesszük be az alábbi kódot:

RRDUTIL=/usr/bin/rrdtool
RRDFILE=/opt/rrd_traffic/traffic.rrd
IMGFILE=/opt/www/stat_images/traffic_$1.png
logger -t makepng_traffic "Imgfile:$IMGFILE Start:$2"
$RRDUTIL graph $IMGFILE \
--imgformat PNG \
--start -$2 \
--end now \
--lazy \
--title "WAN traffic" \
--rigid \
--base 1000 \
--height 240 \
--width 550 \
--vertical-label "bytes/s" \
--slope-mode \
DEF:down=$RRDFILE:in:AVERAGE \
DEF:up=$RRDFILE:out:AVERAGE \
CDEF:up_neg=up,-1,* \
CDEF:down_kb=down,1024,/ \
CDEF:up_kb=up,1024,/ \
CDEF:down_mb=down_kb,1024,/ \
CDEF:up_mb=up_kb,1024,/ \
VDEF:down_avg=down_kb,AVERAGE \
VDEF:down_max=down_kb,MAXIMUM \
VDEF:down_min=down_kb,MINIMUM \
VDEF:down_sum=down_mb,TOTAL \
VDEF:up_avg=up_kb,AVERAGE \
VDEF:up_max=up_kb,MAXIMUM \
VDEF:up_min=up_kb,MINIMUM \
VDEF:up_sum=up_mb,TOTAL \
AREA:down#00CF00:"Incoming":STACK \
GPRINT:down_avg:"Avg\: %6.2lf KB" \
GPRINT:down_min:"Min\: %6.2lf KB" \
GPRINT:down_max:"Max\: %6.2lf KB" \
GPRINT:down_sum:"Total\: %7.2lf MB\n" \
LINE1:down#006400: \
AREA:up_neg#002A97:"Outgoing" \
GPRINT:up_avg:"Avg\: %6.2lf KB" \
GPRINT:up_min:"Min\: %6.2lf KB" \
GPRINT:up_max:"Max\: %6.2lf KB" \
GPRINT:up_sum:"Total\: %7.2lf MB" \
LINE1:up_neg#001A5E:

Majd az elmentéshez: ESC, majd :wq.

Hozzuk létre a terhelés statisztikáról képet készítő scriptet:

vi /opt/rrd_traffic/makepng_load.sh

Majd illesszük be az alábbi kódot:

RRDUTIL=/usr/bin/rrdtool
RRDFILE=/opt/rrd_traffic/traffic.rrd
IMGFILE=/opt/www/stat_images/load_$1.png
logger -t makepng_load "Imgfile:$IMGFILE Start:$2"
$RRDUTIL graph $IMGFILE \
--imgformat PNG \
--start -$2 \
--end now \
--lazy \
--title "CPU load" \
--vertical-label "Load" \
--upper-limit 1 \
--height 240 \
--width 550 \
--slope-mode \
DEF:load=$RRDFILE:load:AVERAGE \
VDEF:load_avg=load,AVERAGE \
VDEF:load_max=load,MAXIMUM \
VDEF:load_min=load,MINIMUM \
AREA:load#FF0000:"CPU load" \
LINE1:load#0000AA: \
GPRINT:load_avg:"Avg\: %4.2lf" \
GPRINT:load_min:"Min\: %4.2lf" \
GPRINT:load_max:"Max\: %4.2lf" \
GPRINT:load:LAST:"Last\: %4.2lf"

Majd az elmentéshez: ESC, majd :wq.

Végül hozzuk létre az előző két scriptet megfelelő paraméterekkel elindító scriptet:

vi /opt/rrd_traffic/makepngs.sh

Majd illesszük be az alábbi kódot:

WEEKDAY=`date +%w`
DAYOFMONTH=`date +%d`
SCRIPTS=/opt/rrd_traffic
if [ -z $1 ]
then
STATDATE=`date +%s | awk '{ print strftime("%Y-%m-%d",$1-86400) }'`
START=1d
else
ED=`date +%s`
STATDATE=`date +%Y-%m-%d`
START=`expr $ED % 86400`
fi
logger -t makepngs "Statdate:$STATDATE Start:$START"
$SCRIPTS/makepng_load.sh $STATDATE $START > /dev/null
$SCRIPTS/makepng_traffic.sh $STATDATE $START > /dev/null
if [ -z $1 ] && [ $WEEKDAY -eq 1 ]
then
WEEK=`echo 1 | awk '{print strftime("%Y-%W", systime()-86400)}'`
STATDATE=week_$WEEK
START=7d
$SCRIPTS/makepng_load.sh $STATDATE $START > /dev/null
$SCRIPTS/makepng_traffic.sh $STATDATE $START > /dev/null
fi

if [ -z $1 ] && [ $DAYOFMONTH -eq "01" ]
then
MONTH=`echo 1 | awk '{print strftime("%Y-%m", systime()-86400)}'`
STATDATE=month_$MONTH
START=`echo 1 | awk '{print strftime("%d", systime()-86400)}'`d
$SCRIPTS/makepng_load.sh $STATDATE $START > /dev/null
$SCRIPTS/makepng_traffic.sh $STATDATE $START > /dev/null
fi

Majd az elmentéshez: ESC, majd :wq.

Látható, hogy az utolsó script minden hétfőn, illetve minden hónap első napján is meghívja a másik két scriptet, így nem csak a napi, hanem a heti, illetve havi képek előállításáért is felelős.
Adjunk futtatási jogot ezen scriptekre:

chmod +x /opt/rrd_traffic/makepng*

A képek elkészítését is ütemezzük cron-al:

echo "1 0 * * * /opt/rrd_traffic/makepngs.sh" >> /etc/crontabs/root

Majd indítsuk is újra a cron-t:

/etc/init.d/cron restart

A cikk még nem ért véget, kérlek, lapozz!

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.