RRDTool

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen Dpepe (vitalap | szerkesztései) 2007. december 28., 21:14-kor történt szerkesztése után volt.

Az RRDTool egy meghatározott időszakról képes adatokat tárolni és ezeket grafikonon megjeleníteni. A tárolt adatok körbeforgó adatbázisban tárolódnak (RRD: Round Robin Database), ahol a legrégebbi adatot írja felül a legújabb. Így az adatbázis mindig ugyanakkora.

Fontos tudni, hogy az RRDTool nem képes összegyűjteni az adatokat. Az információt bizonyos időközönként kell beletölteni, ez történhet Cron-ból vagy akár a munin-nal (A munin működése) . Viszont, ha nem sok gépet szeretnénk monitorozni, vagy csak kevés jellemzőt figyelünk, akkor érdemesebb szkriptelni, mert így kevesebb erőforrást használunk fel.

Az erőforrás-gazdálkodás szempontjából fontos lehet az is, hogy ha gyakran és egyszerre többen nézzük a grafikonokat, akkor érdemes bizonyos időközönként ismételve generáltatni a képeket, egyéb esetben akár a php oldal is előállíthatja nekünk, amikor éppen szükség van rá.

A program egyszerű és ebből kifolyólag robusztus, de nem árt rendszeresen mentéseket készíteni az adatbázis állományokról.

A mentéseken kívül a program egyetlen kimeneti megjelenése a grafikon.

Tartalomjegyzék

1 Telepítés és használat

Jelenleg az RRDTool csomagját a legtöbb disztribúció tartalmazza. Így telepítése egyszerű:

$ apt-get install rrdtool

2 RRD adatbázis állomány elkészítése

Először alaposan át kell gondolni, hogy mit szeretnénk tárolni. Egy létező adatbázist kibővíteni jelenleg még nem lehet.

Hozzunk létre egy adatbázist, amiben a gépünk egyik ethernet interfészének ki- és bemenő forgalmát rögzítjük.

$ rrdtool create localpc_traffic_eth0.rrd \
--step 300 \
DS:traffic_in:COUNTER:600:U:U \
DS:traffic_out:COUNTER:600:U:U \
RRA:AVERAGE:0.5:1:288 \
RRA:AVERAGE:0.5:288:365 \
RRA:MAX:0.5:1:288 \
RRA:MAX:0.5:288:365

Az első paraméter a create, tehát létrehozás.

A második az rrd adatbázis állomány neve, amely 1-19 karakter hosszú lehet és [a-zA-Z0-9_] karaktereket tartalmazhat.

A --step értéke a legkisebb kezelt lépésközt adja másodpercben. Ez a feladattól függ, nekünk most elég az 5 perces lépésköz.

A DS (Data Source) vezeti be az adatforrásokat, paraméterei kettősponttal elválasztva. Az első az adatforrás neve, a második a típusa, a többi argumentum jelentése pedig a típustól függően változik. A típusok:

  • GAUGE: egyszerű szám pl hőmérséklet, létszám, jel-zaj viszony... Paraméterei: heartbeat:min:max
  • COUNTER: számláló, olyan folyamatosan növekvő értékek, amelyek csak a számláló túlcsordulása esetén csökkenhetnek. pl adatforgalom. Az értékek mennyiség/sec formában tárolódnak. Paraméterei: heartbeat:min:max
  • DERIVE: Hasonló a counter-hez, de nincs túlcsordulás ellenőrzés. Paraméterei: heartbeat:min:max
  • ABSOLUTE: A gyorsan túlcsorduló számlálók részére, amelyeket minden kiolvasás után nullázunk. Paraméterei: heartbeat:min:max
  • COMPUTE: Házi feladat.

A típusoktól függő paraméterek magyarázata:

  • Heartbeat: Két adabázis-frissítés között eltelt idő maximuma másodpercben. A heartbeat általában kétszerese a step-nek. Ha ennyi idő elteltével sem érkezik adat, akkor ismeretlen (Unknown) érték lesz letárolva, a grafikonon ez kihagyásként jelentkezik. Ha két adatfeltöltés között több lépésköz is kimaradt, de a heartbeat még nem telt le, akkor a program az előző és a legfrissebb adatból interpolál. Ezért úgy érdemes megválasztani az értéket, hogy a kisebb hibákat elfedje, de a nagy hibák kiderüljenek.
  • Min: A minimális érték. U=Unknown
  • Max: A maximális érték. U=Unknown . Ha min/max esetén a beírandó érték a megadott határokon kívül esik, akkor ismeretlen (Unknown) érték lesz letárolva. Pl forgalomszámlálásnál a szélsőértékek lehetnek a hálózati eszköz vagy kapcsolat által megszabott határok. A min és max értékek segítenek az RRDTool-nak ellenőrizni a friss értékek valósságát.

DS blokkból több is lehet, egymástól szóközzel elválasztva. Esetünkben kettő adatforrást tárolunk. A DS blokkok után következnek az RRA blokkok, amelyek az adatok eltárolását határozzák meg.


Az adatok eltárolásának a következő módjai vannak:

  • AVERAGE: az adott lépésközben beírt adatok átlagát tárolja (nagyobb léptékű megjelenítés esetén is "szép" grafikont ad)
  • MIN: az adott lépésközben beírt adatok maximumát tárolja
  • MAX: az adott lépésközben beírt adatok minimumát tárolja
  • LAST: az adott lépésközben beírt adatok utolsó értékét tárolja

A mód megadása után következik három érték:

  • xff: értéke általában 0.5, a programot az ismeretlen értékek kezelésében befolyásolja
  • steps: a lépésköz (--step) szorzója, ennyi időközönként tárolunk le egy adatot. Érdemes hozzáigazítani a grafikonhoz.
  • rows: sorok száma, azaz a tárolt rekordok száma.

A mi esetünkben tároljuk az átlagot és a maximumot, 5*1 percenként 288 sort (5min*288=1 nap) és 5*288 percenként 365 sort (1nap*365=1 év). Természetesen a 365 érték nem fog szép éves grafikont adni pl 800 képpont szélesség esetén, ezért érdemes lehet gyakrabban és több sort tárolni, pl 0.5:100:1100. A két utolsó paraméter és a lépésköz szorzata adja az adatbázis körbefordulási idejét. Tehát 100*1100*300sec=382nap.

3 Adatok írása az adatbázisba

$ rrdtool update localpc_traffic_eth0.rrd N:784812356:2697070943

Látható,hogy az update opcióval írunk az adatbázisba. A parancsban látható számok a beírandó értékek, amelyek jelen esetben az RX bytes és TX bytes mezők. A beírandó értékek száma mindig egyezzen meg az adatforrások számával, különben nem történik beírás.

Az parancsban látható N (now) az aktuális idő szerinti beszúrást adja. N a UNIX időszámítás szerinti érték, amit 'date +%s' paranccsal nézhetünk meg.

Több adatot is megadhatunk egyszerre, ilyenkor az időt is meg kell adni:

$ rrdtool update localpc_traffic_eth0.rrd 1198866281:102:880 1198866285:150:1040 1198866290:198:1211

4 Mentés (backup)

Érdemes időközönként mentést készíteni az rrd állományainkról. A mentés kimenete XML formátumú.

$ rrdtool dump localpc_traffic_eth0.rrd  > 20071228_localpc_traffic_eth0_rrd.xml

5 Visszaállítás (restore)

$ rrdtool restore 20071228_localpc_traffic_eth0_rrd.xml localpc_traffic_eth0.rrd

Létező adatbázist nem tudunk így felülírni.

6 Grafikon készítése

Az RRDTool egyik fő feladata, hogy grafikonokat készítsünk vele, amelyeket akár távolról, webes felületen i ki tudunk értékelni. Most egy statikus parancson keresztül mutatom be a képgenerálás opcióit. Természetesen az opciók paramétereit php-ból átadva, az igényeinknek megfelelő felbontású képet kaphatunk a kívánt időszakról.

$ rrdtool graph localpc_traffic_eth0.png \
--imgformat=PNG \
--start=-86400 \
--end=now \
--title= \
--rigid \
--base=1000 \
--height=96 \
--width=400 \
--upper-limit=2000000 \
--lower-limit=0 \
--vertical-label="bits per second" \
--slope-mode \
DEF:a=localpc_traffic_eth0.rrd:traffic_in.AVERAGE \
DEF:b=localpc_traffic_eth0.rrd:traffic_out.AVERAGE \
CDEF:cdefa=a,8,* \
CDEF:cdefe=b,8,* \
AREA:cdefa#00CF00:"Inbound" \
GPRINT:cdefa:LAST:"Current\:%8.2lf %s" \
GPRINT:cdefa:AVERAGE:"Average\:%8.2lf %s" \
GPRINT:cdefa:MAX:"Maximum\:%8.2lf %s\n" \
LINE1:cdefe#002A97:"Outbound" \
GPRINT:cdefe:LAST:"Current\:%8.2lf %s" \
GPRINT:cdefe:AVERAGE:"Average\:%8.2lf %s" \
GPRINT:cdefe:MAX:"Maximum\:%8.2lf %s\n" \

A parancs eredménye a következő lett: Fájl:traffic eth0.png

7 Példák az alkalmazásra

Személyes eszközök