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 30., 15:54-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.

Kezdjük egy egyszerű képgenerálással:

$ rrdtool graph localpc_traffic_eth0.png \
--imgformat=PNG \
--start=-86400 \
--end=now \
--title="Forgalom : eth0" \
--rigid \
--base=1000 \
--height=96 \
--width=400 \
--upper-limit=2000000 \
--lower-limit=0 \
--vertical-label="bits per second" \
--slope-mode \
--color "BACK#4095FF" \
DEF:a=localpc_traffic_eth0.rrd:traffic_in.AVERAGE \
DEF:b=localpc_traffic_eth0.rrd:traffic_out.AVERAGE \
AREA:cdefa#00CF00:"Inbound" \
LINE1:cdefe#002A97:"Outbound" \

Az eredmény a következő:

Fájl:traffic bytes.png

A parancs így épül fel: rrdtool graph állománynév [--opciók] [adatforrások (DEF)] [számított adatok] [változók definiálása] [ábrázolási elemek (AREA, LINE ...)] [egyéb szöveges információk]

Ha az állománynév helyére "-" kerül, akko a stdout-ra kerül a kép.

6.1 Grafikai paraméterek

  • --imgformat: A kimenet formátuma. Lehet PNG, SVG, PDF, EPS. Nem támogat jpg-t.(Nekem eddig csak png-t sikerült csinálni, pdf és svg készítéskor az rrdtool hiányolja DejaVuSansMono.ttf-et, ami egyébként a helyén van...)
  • Az ábrázol időszak paraméterei (ezek nélkül az elmúlt1 nap lesz ábrázolva)
    • --start: az ábrázolás idejének kezdete a jelenhez viszonyítva másodpercekben
    • --end: az ábrázolás idejének vége a jelenhez viszonyítva másodpercekben. A "now" paraméter a jelenlegi időpont.
    • --step: a grafikon felbontását állítja. Alapvetően az RRDTool a pixelek számához igazítja a felbontást. Ha pl a step értéket 3600-ra állítjuk, óránkénti felbontást kapunk.
  • Feliratok (Betűtípus váltást eddig nem találtam...)
    • --title: A kép címe, vízszintes felirat
    • --vertical-label: A függőleges tengely felirata
  • A kép mérete
    • --height: a koordináta rendszer magasságát határozza meg (tehát minden csak a nettó grafikon rész mérete)
    • --width: a koordináta rendszer szélességét határozza meg
    • --only-graph: csak a koordináta rendszer és a grafikonok ábrázolása (minden felirat és szegély nélkül)
  • Limitek (default esetben autoscaling érvényes a grafikonra)
    • --upper-limit: felső határ (nem ismeri a k M és a többi prefixet)
    • --lower-limit: alsó határ (nem ismeri a k M és a többi prefixet)
    • --rigid: Ha ez bevan állítva, akkor a felső és alsó határok szigorúan érvényesülnek. Ha nincs beállítva, akkor a limiteken kívül eső értékekhez méretez az autoscale.
    • --alt-autoscale: a legkisebb és a legnagyobb értékhez méretez (kis változású, de nagy offszettel rendelkező értékek esetén jó lehet)
    • --alt-autoscale-max: a legnagyobb értékhez méretez, az alsó határ 0 lesz, ha máshogy nem rendelkezünk
    • --no-gridfit: a segédrácsot nem illeszti az "egész-pixelekhez". Logaritmikus ábrázolásnál hasznos lehet.
  • Rácsozás
    • --x-grid: a függőleges rácsozás sűrűségét lehet állítani, egész bonyolultan és tetszőlegesen
      • példa: --x-grid MINUTE:10:HOUR:1:HOUR:4:0:%X : vonalak 10 percenként, fő vonalak óránként, felirat 4 óránként, feliratok a fővonalak alatt és pontos időt ábrázolnak
      • példa: --x-grid HOUR:8:DAY:1:DAY:1:0:%A : vonalak 8 óránként, fő vonalak naponta, feliratok naponta, feliratok a fő vonalak alatt és a napok neveit adják
    • --x-grid none : nincs függőleges rácsozás
    • --y-grid gridstep:labelfactor: a vzszintes rácsozás
    • --y-grid none : nincs vízszintes rácsozás
    • --alt-y-grid : automatikus rácsozás, nem túl sűrű, de jól informál
    • --logarithmic: log rácsozás (y rács)
    • --units-exponent <érték> : 10 hatványainál rácsoz. Az érték 3 többszöröse legyen -18 és 18 között (y rács)
    • --units-legth <érték>: Az értékek pontosságának ábrázolása
    • --units=si : Logaritmikus ábrázolás esetén a k,M,stb értékekhez rajzol vonalat. Lineáris ábrázolásnál automatikusan így tesz...


$ 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