RRDTool
(→Grafikai paraméterek) |
(→Grafikon készítése) |
||
110. sor: | 110. sor: | ||
--vertical-label="bits per second" \ |
--vertical-label="bits per second" \ |
||
--slope-mode \ |
--slope-mode \ |
||
+ | --color "BACK#4095FF" \ |
||
DEF:a=localpc_traffic_eth0.rrd:traffic_in.AVERAGE \ |
DEF:a=localpc_traffic_eth0.rrd:traffic_in.AVERAGE \ |
||
DEF:b=localpc_traffic_eth0.rrd:traffic_out.AVERAGE \ |
DEF:b=localpc_traffic_eth0.rrd:traffic_out.AVERAGE \ |
A lap 2007. december 30., 15:54-kori változata
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ő:
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...
- --x-grid: a függőleges rácsozás sűrűségét lehet állítani, egész bonyolultan és tetszőlegesen
$ 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: