Hrátky s RRDtool
Přidáno 17. dubna 2008, 15:51
Před víkendem jsem si pochroumal kotník, takže jsem zůstal marodit doma. Karel mi nějak dopomohl k tomu, že jsem se opět začal zajímat o vykreslování grafů zátěže CPU, RAMky a tak dál..
Jdem na to
Bez zbytečného zdržování popíšu to, co jsem se dočetl z anglických tutoriálů na domovských stránkách RRDtool. Tohle si píšu spíš pro sebe, abych nezapoměl.. ;-) Když to někomu pomůže, jeho plus. Můžou tu být nepřesnosti, nedělám si patent na to, že jsem všechno správně pochopil.
Takže.. RRDtool má databázi, jakousi tabulku kam se v určitých intervalech zapisují data, která jí podstrčíme. Já se zaměřím na data vyčtená pomocí SNMP daemona. Jak jsem viděl, není problém tam cpát vlastně cokoliv k vykreslení do grafu.
Ta databáze používá jakousy fintu (bla, bla, bla) což zapříčiní, že zabere málo místa na disku ;-) Je to vlastně jeden soubor (*.rrd).
Databázi je nejdřív nutné vytvořit. Je to asi ta nejdůležitější část nad kterou je dobré se zamyslet, aby vše klapalo jak má..
vytvoříme ji příkazem ve tvaru:
rrdtool create soubor_s_databazi.rrd
--start cas_startu
--step 300
DS:variable_name:DST:heartbeat:min:max
RRA:CF:xff:step:rows
RRA:CF:xff:step:rows
...
kde:
soubor_s_databazi.rrd - Název .rrd souboru, případně s cestou (nečekaně =) ).
--start cas_startu - Parametr udávající čas kdy se začnou plnit první hodnoty v sekundách od 1.1.1970 ;-) (takže např: --start 1023654125).
--step 300 - Krok, aneb čas mezi zapisováním nových hodnot v sekundách (update time) (v tomto případě 5 minut). Sbíraná hodnota se nazývá PDP (Primary Data Point).
DS - Data Source , klíčové slovo ;-)
variable_name - Název sloupce hodnot tabulky (např: cpu, mem, teplota, ...).
DST - Data Source Type, česky prostě typ :) Může nabývat hodnot: COUNTER, DERIVE, ABSOLUTE, GAUGE. Stručně o typech. COUNTER bere rozdíl nynější a předchozí hodnoty (měření otáček, cpu, traffic...). DERIVE - to samé co COUNTER, ale nabývá záporných hodnot (odchozí traffic). GAUGE, hodnota.. co zadaš, to se zapíše (využití paměti, ...). ABSOLUTE jsem asi moc nepobral, ale asi veme rozdíl aktuální a předchozí hodnotě a přičte ho k předešlé hodnotě. Nevim.
heartbeat - Hodnota [s] za jak dlouho se má indikovat NAN (Not A Number = není číslo) (nebo se možná zapíše UNK, jako neznámá hodnota :-/ ). Například když se počítač vypne, tak aby se do grafu nezakreslila nějaká nesmyslná hodnota, ale bude tam prostě prázdno. Logicky se tam dává nějaký násobek času kdy se očekává další hodnota.
min - Minimální číslo, které může nabývat zapisovaná hodnota (když bude menší, udělá z ní UNKNOWN - ani nula, ani NAN, je to speciální featura =) ).
max - Maximální číslo, které může nabývat zapisovaná hodnota (když bude větší, udělá z ní UNKNOWN - viz výše .-) ).
RRA - Klíčové slovo, za kterým následují informace jak se data budou ukládat.
CF - Consolidation Function, konsolidační funkce. Čert ví, co to znamená, ale faktem je, že to říká, jaká funkce se použije na sesbíraná data. Může nabývat hodnot: AVERAGE (průměr z hodnot), MAX (maximum z hodnot), MIN (minimum z hodnot) a LAST (poslední zaznamenaná hodnota)
xff - Tak tohle si asi vážně vycucali z prstu, protože jsem o tom nikde nenašel ani čárku, ale všude cpali hodnotu 0.5 .-)
step - Při každém STEPu u DS se získá nějaká hodnota. Několik takovýchto hodnot se vezme a prožene se konsolidační funkcí (průměr, max, ...). Počet, kolik takových hodnot vezmu, udává tento parametr (STEP u RRA). Získáme tím hodnotu zvanou CDP (Consolidated Data Point).
rows - Počet hodnot CDP, které se budou archivat.
DS nám vlastně říká, jaká data sbíráme a RRA jaká si archivujeme.
Počet DS a RRA řádků v databázi je pravděpodobně teoreticky neomezený.
Konkrétní příklad
Vytvoření databáze:
rrdtool create /var/www/localhost/htdocs/rrdtool/rrd/cpu.rrd --step 60 --start N
DS:cpu_user:COUNTER:180:0:200
DS:cpu_cmpl1:COUNTER:180:0:200
DS:cpu_cmpl2:COUNTER:180:0:200
RRA:AVERAGE:0.5:1:130
RRA:MIN:0.5:130:1
RRA:MAX:0.5:130:1
RRA:AVERAGE:0.5:1:1450
RRA:MIN:0.5:1450:1
RRA:MAX:0.5:1450:1
RRA:AVERAGE:0.5:5:2050
RRA:MIN:0.5:10250:1
RRA:MAX:0.5:10250:1
RRA:AVERAGE:0.5:60:750
RRA:MIN:0.5:45000:1
RRA:MAX:0.5:45000:1
RRA:AVERAGE:0.5:720:730
RRA:MIN:0.5:525600:1
RRA:MAX:0.5:525600:1
Sbírání dat jsem nastavil na minutu (step). Počátek jsem nastavil pomocí N na "teď". N to bere jako přednastavenou hodnotu.
Z konfiguračního souboru MRTG, jsem si vycucal, že zatížení CPU ukazují veličiny ssCpuRawUser, ssCpuRawSystem a ssCpuRawNice. Jejich hodnoty vytáhnu ze SNMP daemona pomocí snmpwalku. Tím jsem si určil počet DS a určil jsem si jak je pojmenuju (cpu_user, ...).
Typ DS jsem zadal COUNTER, protože SNMP takhle bere veličiny ssCpuRawUser, ssCpuRawSystem a ssCpuRawNice. Prostě přičítá.. Proč a jak nevím, ale prostě to tak je. Využití RAMky by bylo zase GAUGE. To záleží na tom, kde vemu data, co chci vyhodnocovat.
heartbeat jsem nastavil na 180 vteřin. Trojnásobek od kroku. Experimentálně nastavená hodnota, možná by stačil dvojnásobek :)
Budu chtít zobrazovat v procentech, takže minimum je jasně 0 a maximum by bylo 100. Mám dvoujádrový procesor, takže 200 ;-)
A teď to nejlepší.. RRA záznamy.
Mám v úmyslu kreslit 5 grafů. Dvouhodinvou, denní, týdenní, měsíční a roční zátěž. Každý graf bude mít své 3 RRA záznamy.
To z toho důvodu, že pro dvouhodinový a denní graf budu chtít menší rozestup mezi zaznamenávanýmy hodnotami, než u ročního.
U všech budu chtít vědět průměrnou, maximální i minimální hodnotu ve sledovaném období.
První průměrná hodnota se bude počítat z jedné hodnoty ( .-) ) a archivovat se jich bude 130. Takže budu mít záznam pro dvě hodiny a deset minut s minutovým rozestupem mezi hodnotami. Průměr jen z jedné hodnoty jsem zvolil proto, abych viděl maximum sesbíraných dat alespoň v tom dvouhodinovém grafu. MAX hodnoty se mi zakreslit do grafu nepodařilo, jen AVERAGE.
MIN a MAX záznamy jsem sice nerozběhal, ale časem se snad prokoušu k tomu abych do grafu alespoň napsal číslem maximální a minimální hodnotu sbíraných hodnot za dané období. Ale zatím je to ve hvězdách :) Každopádně uchovávám jen jednu hodnotu, víc maxim a minim nepotřebuju :)
Podobně pro ostatní grafy.. Průměruje se z 1-né (denní graf), 5-ti (týdenní graf), 60-ti (měsíční graf) a 720-ti (roční graf) hodnot. Uchovávám jen tolik hodnot, aby obsáhly celé období grafu + nějaký sychr. To proto, že jsem moc nepobral jak to má pak poznat při vykreslování grafů jaký RRA záznam použít.. A pochopil jsem to tak, že záznam musí obsahovat data z celého zobrazovaného období, jinak použije RRA s delším obdobím.. tak proto ;)
MIN a MAX hodnoty stejně jako u prvního grafu, prostě doufám, že to časem rozběhnu :)
Co dál?
Když je vytvořená databáze, nezbývá než ji plnit datama.
K tomu slouží příkaz:
rrdtool update soubor_s_databazi.rrd cas:hodnota1:hodnota2...
kde:
soubor_s_databazi.rrd - Námi již vytvořený soubor s databází.
cas - Čas ke kterému přiřadit v tabulce následující hodnoty (ve vteřinách)
hodnota1 - Hodnota, která se má zaznamenat do databáze. Pokud máme zadáno více DS při tvorbě databáze, očekává se že budeme zadávat více hodnot, oddělených dvojtečkou. Pokud se hodnota nezadá, zaznamená se místo hodno hodnoty NAN.
Příklad:
rrdtool update /var/www/localhost/htdocs/rrdtool/rrd/cpu.rrd 1208365380:9210896:3856664:222585
Můžeme se podívat na údaje zaznamenané v databázi. K tomu slouží:
rrdtool fetch soubor_s_databazi.rrd CF -r 900 -s -1h
kde:
CF - Konsolidační funkce, které se chci podívat na zoubek (AVERAGE, MIN, MAX, LAST).
-r - Za tímto parametrem následuje určení rozsahu RRA záznamu ze kterého chceme číst data (ve vteřinách). Pravidlu podle kterého to vybere ten záznam nerozumím. Ale upřímně řečeno, dokud nevytahuju MIN a MAX záznam, nebo nějakou kontrolní hodnotu, tak to nepotřebuju. Na test, jestli jsou někde nějaký data uložený mi stačí i "-r 900" .-)
-s - Následuje čas odkdy nás zajímají získaná data. "-1h" - zobrazí sesbíraná data maximálně hodinu staré. Jinak se může zadat čas ve vteřinách od 1.1.1970.
Příklad:
rrdtool fetch /var/www/localhost/htdocs/rrdtool/rrd/cpu.rrd AVERAGE -r 900 -s -1h
Vybere RRA záznam s průměrováním za 15 minut a zobrazí hodnoty maximálně hodinu staré.
Po naplnění daty by to mohlo vypsat něco takového:
pat@pat ~ $ rrdtool fetch /var/www/localhost/htdocs/rrdtool/rrd/cpu.rrd AVERAGE -r 900 -s -1h
cpu_user cpu_cmpl1 cpu_cmpl2
1208372580: 1.1686370296e+01 5.3288987639e+00 1.1554309089e-01
1208372640: 1.4678792038e+01 5.0749073538e+00 1.1789956005e-01
1208372700: 9.5120292908e+00 5.0017080796e+00 9.9445871371e-02
1208372760: 1.3740899759e+01 5.5289337327e+00 9.9424038391e-02
1208372820: 8.9759300581e+00 4.9295031670e+00 8.4486025445e-02
1208372880: 9.5569571672e+00 4.7729664526e+00 1.4875376051e-01
1208372940: 8.3007201324e+00 5.0347434236e+00 1.0000834882e-01
1208373000: 6.8974364226e+00 4.3746677742e+00 1.1759729186e-01
1208373060: 1.0878251368e+01 4.8033460730e+00 9.9565720594e-02
Kreslení grafů
Z nasbíraných hodnot můžeme nechat vytvořit graf. Koneckonců to je to o co mi celou dobu šlo ;-) Grafy se vytváří:
rrdtool graph obrazek.png
--start cas_startu
--end cas_konce
DEF:name=:cpu_user:soubor_s_databazi.rrd:CF
LINE1:name#kod_barvy
kde:
obrazek.png - Obrázek kam se uloží graf.
cas_startu, cas_konce - Jasné, samozřejmě ve vteřinách, které utekly od 1.1.1970.
DEF - Klíčové slovo.
name - Název jak si pojmenuji proměnnou. Budu s ní dále pracovat. Reprezentuje data ulozená v databázi.
CF - Konsolidační funkce z jejíž RRA záznamu budeme brát data.
LINE1 - Síla čáry grafu (LINE1 - 1pixel, LINE2 - 2px, ... LINE5 - 5px)
#kod_barvy - Barva čáry. Ve tvaru jako se udává v HTML. Např: #00FF00.
Do jednoho grafu můžeme zakreslit několik proměnných, dokonce i z jiných databází. Data můžeme prohnat nějakou matematickou funkcí a vykreslit až výsledek. Doplnit popisky os, "vodoznak" a tak dále..
Skript
Nakonec můžu všechno vrznout do skriptu, který budu cronem spouštět v daných časových úsecích, podle toho, jak jsem nastavil parametr STEP při tvorbě databáze. Nebo do skriptu s nekonečnou smyčkou, kde bude vyčkávací smyčka po které se vždy provede sběr dat, zapsání do databáze a vytvořaní grafů.
Elegantnější je pravděpodobně cron, nicméně furt to ještě zkouším a s cronem zatím nemám dobré výsledky, takže jsem se prozatím dal druhou cestou.
A tady už je výsledný skript ke stažení a ke zkouknutí:
#!/bin/sh
dir=/var/www/localhost/htdocs/rrdtool/
a=0
while [ "$a" == 0 ]; do
snmpwalk -v1 -c public localhost ssCpuRawUser > snmp_reply
cpu_user=`awk 'BEGIN { tot=0 }
{ tot=$NF
}
END {print tot}' snmp_reply`
snmpwalk -v1 -c public localhost ssCpuRawSystem > snmp_reply
cpu_sys=`awk 'BEGIN { tot=0 }
{ tot=$NF
}
END {print tot}' snmp_reply`
snmpwalk -v1 -c public localhost ssCpuRawNice > snmp_reply
cpu_nice=`awk 'BEGIN { tot=0 }
{ tot=$NF
}
END {print tot}' snmp_reply`
if [ -z $cpu_user ] ; then
cpu_user=0
fi
if [ -z $cpu_sys ] ; then
cpu_sys=0
fi
if [ -z $cpu_nice ] ; then
cpu_nice=0
fi
rrd="rrdtool update "$dir"rrd/cpu.rrd "`date +%s`" - $cpu_user:$cpu_sys:$cpu_nice"
echo $rrd
rrdtool update "$dir"rrd/cpu.rrd N:$cpu_user:$cpu_sys:$cpu_nice
start_hour=$((`date +%s`-7200))
start_day=$((`date +%s`-86400))
start_week=$((`date +%s`-604800))
start_month=$((`date +%s`-2678400))
start_year=$((`date +%s`-31536000))
rrdtool graph "$dir"img/cpu_hour.png --start $start_hour --end N --title="Dvou-hodinový graf" --x-grid MINUTE:5:MINUTE:15:MINUTE:15:0:%H:%M --watermark http://pat.kk.zcu.cz --width 750 --height 120 --rigid --upper-limit 100 --lower-limit 0 --vertical-label "Využití CPU [%]" DEF:cpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE DEF:cpu_sys="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE DEF:cpu_nice="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE CDEF:realcpu_sys=cpu_sys,2,/ CDEF:realcpu_nice=cpu_nice,2,/ CDEF:realcpu_user=cpu_user,2,/ CDEF:realcpu_cmpl1=realcpu_nice,realcpu_user,+ CDEF:realcpu_cmpl2=realcpu_cmpl1,realcpu_sys,+ LINE2:realcpu_cmpl2#FF0000:"CPU system" LINE2:realcpu_cmpl1#00FF00:"CPU user" LINE2:realcpu_nice#0000FF:"CPU nice"
rrdtool graph "$dir"img/cpu_day.png --start $start_day --end N --title="Denní graf" --x-grid HOUR:1:HOUR:3:HOUR:6:0:%H:%M --watermark http://pat.kk.zcu.cz --width 300 --height 120 --rigid --upper-limit 100 --lower-limit 0 --vertical-label "Využití CPU [%]" DEF:cpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE DEF:cpu_sys="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE DEF:cpu_nice="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE CDEF:realcpu_sys=cpu_sys,2,/ CDEF:realcpu_nice=cpu_nice,2,/ CDEF:realcpu_user=cpu_user,2,/ CDEF:realcpu_cmpl1=realcpu_nice,realcpu_user,+ CDEF:realcpu_cmpl2=realcpu_cmpl1,realcpu_sys,+ LINE2:realcpu_cmpl2#FF0000:"CPU system" LINE2:realcpu_cmpl1#00FF00:"CPU user" LINE2:realcpu_nice#0000FF:"CPU nice"
rrdtool graph "$dir"img/cpu_week.png --start $start_week --end N --title="Týdenní graf (5-ti minutový průměr)" --x-grid HOUR:6:HOUR:24:HOUR:24:0:%A --watermark http://pat.kk.zcu.cz --width 300 --height 120 --upper-limit 100 --lower-limit 0 --vertical-label "Využití CPU [%]" DEF:gcpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE DEF:gcpu_cmpl1="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE DEF:gcpu_cmpl2="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE CDEF:areagcpu_cmpl2=gcpu_user,2,- CDEF:realgcpu_cmpl1=gcpu_cmpl1,2,/ CDEF:realgcpu_cmpl2=gcpu_cmpl2,2,/ CDEF:realgcpu_user=gcpu_user,2,/ LINE1:realgcpu_user#FF0000:"CPU User" LINE1:realgcpu_cmpl1#00FF00:"CPU System" LINE1:realgcpu_cmpl2#0000FF:"CPU Nice"
rrdtool graph "$dir"img/cpu_month.png --start $start_month --end N --title="Měsíční graf (hodinový průměr)" --x-grid DAY:1:WEEK:1:WEEK:1:0:"Týden "%W --watermark http://pat.kk.zcu.cz --width 300 --height 120 --upper-limit 100 --lower-limit 0 --vertical-label "Využití CPU [%]" DEF:gcpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE DEF:gcpu_cmpl1="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE DEF:gcpu_cmpl2="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE CDEF:areagcpu_cmpl2=gcpu_user,2,- CDEF:realgcpu_cmpl1=gcpu_cmpl1,2,/ CDEF:realgcpu_cmpl2=gcpu_cmpl2,2,/ CDEF:realgcpu_user=gcpu_user,2,/ LINE1:realgcpu_user#FF0000:"CPU User" LINE1:realgcpu_cmpl1#00FF00:"CPU System" LINE1:realgcpu_cmpl2#0000FF:"CPU Nice"
rrdtool graph "$dir"img/cpu_year.png --start $start_year --end N --title="Roční graf (12-ti hodinový průměr)" --watermark http://pat.kk.zcu.cz --width 300 --height 120 --upper-limit 100 --lower-limit 0 --vertical-label "Využití CPU [%]" DEF:gcpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE DEF:gcpu_cmpl1="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE DEF:gcpu_cmpl2="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE CDEF:areagcpu_cmpl2=gcpu_user,2,- CDEF:realgcpu_cmpl1=gcpu_cmpl1,2,/ CDEF:realgcpu_cmpl2=gcpu_cmpl2,2,/ CDEF:realgcpu_user=gcpu_user,2,/ LINE1:realgcpu_user#FF0000:"CPU User" LINE1:realgcpu_cmpl1#00FF00:"CPU System" LINE1:realgcpu_cmpl2#0000FF:"CPU Nice"
perl -e 'sleep 60 - time % 60'
done
Krása což? :-D
Tak ještě snad trochu popis...
Nástrojem snmpwalk zjistím hodnoty od SNMP daemona. Proměnné (ssCpuRawUser a podobně) si musí člověk někde najít na netu. Já zkusil zatím jen CPU. Posbírám tím data o vytížení procesoru procesy s vysokou, normalní a nízkou prioritou. Snmpwalk nevrací jen jednu hodnotu, ale celý řádek řetězce.
Pomocí nástroje AWK si z toho vytáhnu jen poslední slovo, které (zjištěno experimentálně) je právě mnou hledaná hodnota. To dělá jakási vnitřní proměnná AWKu - $NF.
Občas se mi stalo, že se skript ukončil sám od sebe s hláškou, že údaj co tlačím do databáze není číslo. Snmpwalk totiž kdesi vyčaroval například "089", což rrdtool nevzalo jako číslo. Takže následuje podmínka zjišťující, zda jednotlivé proměnné jsou větší než nula. Sám koukám, jak jsou ty podmínky v BASHi intuitivní :)
Pak se mi vypíše na standartní výstup (obrazovka) co se chce zapsat do databáze. To se může klidně zakomentovat, měl jsem to tam pro hledání chyb, když mi to padalo. A pak jsem to tam už nechal. To jsou ty historické důvody :)
Následuje zapsání dat do databáze.
Pak zjištění startovacích časů pro jednotlivé grafy a jejich vykreslení.
A nakonec vyčkávací smyčka. Proč spouštím perl, aby zavolal sleep se mě nikdo neptejte, to jsem někde okopčil a došlo mi to až teď. Každopádně to šlape, takže to změním, až budu mít jinou odzkoušenou verzi ;-)
Ještě pár parametrů...
Parametry použité při vytváření grafů jsou vcelku jasné, takže jen ty horší:
--x-grid MINUTE:5:MINUTE:15:MINUTE:15:0:%H:%M - Když se nespokojím s automatickým popisem x-ové osy, můžu si její popisek nadefinovat sám. Skládá se z části měřítka slabé čáry, silné čáry, za jak dlouho se má napsat nějaký popisek pod grafem u x-ové osy a formát popisku. Takže uvedený příklad říká, že slabá mřížka se vykreslí každých 5 minut, silná, každých 15 minut, popisek u osy bude také každých 15 minut, tu nulu pak nechápu ;-) a nakonec formát hodiny:minuty. %A - automatika
--rigid - Myslím, že ořízne graf podle --upper-limit a --lower-limit bez ohledu, jestli některá hodnota nepřeleze.
CDEF:realcpu_nice=cpu_nice,2,/ - Málem bych zapoměl na ukázku použití matematických funkcí při kreslení. K tomu se používá "CDEF:jméno_vysledne_promenne:prvni_hodnota,druha_hodnota,funkce". Funkce může být +,-,*,/, možná i další, ale víc jsem jich nezkoušel. V ukázaném případě jde vlastně o realcpu_nice=cpu_nice/2. To z toho důvodu, že mám dvě jádra, takže hodnoty cpu můžou při zatížení dosahovat k hodnotě 200. Ale procenta se ukazují do 100, takže to prostě podělím dvěma a je to :)
AREA:realcpu_cmpl2#C0C0C0 - Vykreslí určitou oblast barvou. V tomhle případě by to vykreslilo plochu zdola omezenou 0, shora křivkou realcpu_cmpl2, což by mělo být celkové využití procesoru.
Pak jsem ještě narazil v manuálech na COMMENT a --color .. takže jsem s vykreslování grafů asi ještě neskončil ;-)
Problémy
Problém jsem měl při vytváření databáze a pak při kontrole co se zapisuje. Neseděla časová prodleva, kterou jsem nastavil při vytváření databáze. Například pro --step 10 byla další očekávaná hodnota třeba až za několik minut. To už ale zapracova heartbeat a bylo zle.. Nakonec jsem přišel na to, že to souvisí s RRA. Pokud --step nastavím na 5 vteřín a nejmenší RRA záznam nechám průměrovat 10 hodnot (PDP) a archivovat jich budu třeba 15 ( RRA:AVERAGE:0.5:10:15 ), tak se vlastně zapíše CDP jednou za 10 sesbíraných PDP. Každá PDP se sbírá po 5 vteřinách, takže CDP budou mít od sebe rozestup 5*10=50 vteřin. Proto mi po fetchnutí tabulky neseděli rozestupy, mezi hodnotami. Neuvědomil jsem si to :)
A to je vše...
No konečně :)
Jak už jsem napsal, je to hlavně pro mě, protože mám hlavu děravou. Když se někdo podělí o zkušenosti, tak budu rád. Každopádně za všechno tady ruku do ohně nedám ;-)
Zdroje poznání:
Oficiální stránky RRDtool (obsahuje tutoriály, manuál) (anglicky)
HOWTO SNMP a MRTG na Gentoo (tam jsem sebral ssCpuRawSystem atd. :) )
Manuálové stránky ;-) (man rrdtool)