Erinevus lehekülje "RRDtool ja võrgugraafik" redaktsioonide vahel

Allikas: Kuutõrvaja
(Seadistus)
(Andkefailide konvert enne teisele arhidektuurile tõstmist)
 
(ei näidata sama kasutaja 41 vahepealset redaktsiooni)
11. rida: 11. rida:
 
===Andmefaili loomine===
 
===Andmefaili loomine===
  
Kõige keerulisem osa RRDtooli juures on andmebaas, kus andmeid hoitakse. Järgmised parameetrid on väga olulised:
+
Kõige keerulisem osa RRDtooli juures on andmebaasi loomine, mille sees andmeid hoitakse. Järgmised parameetrid tuleb enne andmebaasi loomist välja selgitada:
  1. kui tihti andmeid lisatakse [--step X] (samm on vaikimisi 300 sekundit)
+
  1. kui tihti andmeid lisatakse? [--step X] (samm on vaikimisi 300 sekundit)
  2. muutujate nimed andmebaasis
+
  2. mitut erinevat andmejada andmebaasis hoitakse?
  3. kui pika aja kohta me infot andmebaasis hoiame
+
  3. kui pika aja kohta andmeid hoitakse?
  
Esmalt teeme võrguliikluse andmebaasi, kus andmete uuendamine toimub iga 300 sekundi (5 minutit) tagant. Meil on vaja graafikut nii ööpäeva, nädala, kuu ning aasta jaoks.
+
Loome võrguliikluse andmebaasi, kus andmete uuendamine toimub iga 300 sekundi (5 minutit) tagant. Meil on vaja graafikut nii ööpäeva, nädala, kuu kui aasta jaoks.
  
Loome andmefaili, kuhu salvestame võrguliikluse andmed. Selleks käivitamie järgmise käsu
+
Käivitamie järgmise käsu:
  
 +
<source lang=bash>
 
  rrdtool create liiklus.rrd \
 
  rrdtool create liiklus.rrd \
 
   --step 300              \
 
   --step 300              \
31. rida: 32. rida:
 
   RRA:MAX:0.5:6:336        \
 
   RRA:MAX:0.5:6:336        \
 
   RRA:MAX:0.5:24:372      \
 
   RRA:MAX:0.5:24:372      \
   RRA:MAX:0.5:288:365     \
+
   RRA:MAX:0.5:288:365
 +
</source>
 +
 
 +
Selle tulemusel tekib anmebaasifail nimega '''liiklus.rrd'''. Nüüd natuke lähemalt, mida me siin tegime.
  
Selle tulemusel tekib anmebaasi fail nimega '''liiklus.rrd'''. Nüüd natuke lähemalt, mida me siin tegime.
+
'''DS:in:COUNTER:600:U:U''' ja '''DS:out:COUNTER:600:U:U'''
  
'''DS:in:COUNTER:600:U:U''' tekitab andmevoo (muutuja nimega in), mis on COUNTER tüüpi, tekitab andmepunkti iga 600 sekundi tagant, mille minimaalne ja maksimaale väärtus on teadmata (U)
+
Sedasi tekitatakse baasi andmejada nimega 'in' ja 'out', mis on COUNTER tüüpi, andmepunkt iga 600 sekundi tagant, mille minimaalne ja maksimaale väärtus on teadmata (U). Kui on teada minimaalne või maksimaalne väärtus, võib selle loomulikult ka baasi loomisel paika panna. Selle näite puhul jätame selle aga kujule Unknown (U).
  
 
'''RRA:AVERAGE:0.5:1:288'''  
 
'''RRA:AVERAGE:0.5:1:288'''  
43. rida: 47. rida:
 
  86400 sekundit / 60 => 1440 minutit
 
  86400 sekundit / 60 => 1440 minutit
 
  1440 minutit / 60 => 24 tundi
 
  1440 minutit / 60 => 24 tundi
 +
24 tundi / 24 => 1 ööpäev
 +
 +
'''RRA:AVERAGE:0.5:6:336'''
 +
 +
336 andmeühikut!
 +
6 (uuenduste keskmine) * 300 sekundit (uuenduse samm) * 336 (andmepunkti) = 604800 sekundit
 +
604800 sekundit / 60 => 10080 minutit
 +
10080 minutit / 60 => 168 tundi
 +
168 tundi / 24 => 7 ööpäeva
 +
 +
'''RRA:AVERAGE:0.5:24:372'''
 +
 +
336 andmeühikut!
 +
24 (uuenduste keskmine) * 300 sekundit (uuenduse samm) * 372 (andmepunkti) = 2678400 sekundit
 +
2678400 sekundit / 60 => 44640 minutit
 +
44640 minutit / 60 => 744 tundi
 +
744 tundi / 24 => 31 ööpäeva
  
  RRA:AVERAGE:0.5:6:336    \
+
'''RRA:AVERAGE:0.5:288:365'''
  RRA:AVERAGE:0.5:24:372  \
 
  RRA:AVERAGE:0.5:288:365 \
 
  
Võtame ja paigaldame nüüd kaks skripti vastavalt siis g.sh, mis kogub snmp käest info ning kirjutab selle faili liiklus.rrd ning liiklus.sh, mis andmetest loob graafiku.
+
365 andmeühikut!
 +
288 (uuenduste keskmine) * 300 sekundit (uuenduse samm) * 365 (andmepunkti) = 31536000 sekundit
 +
31536000 sekundit / 60 => 525600 minutit
 +
525600 minutit / 60 => 8760 tundi
 +
8760 tundi / 24 => 365 ööpäeva
  
Kohandame graafikuskriptis failirajad ning võrgukaardi numbri vastavalt endale parajaks. Selleks vaatame skripti liiklus.sh
+
Sarnaselt eelnevale (AVERAGE e. keskmine) on defineeritud ka maksimaalsete väärtuste hoidmine samas ajaskaalas (MAX).
  
 
===Andmete uuendamine===
 
===Andmete uuendamine===
 +
 +
Andmete uuendamiseks on otstarbekas luua skript, mis küsib operatsioonisüsteemi (või mingi teenuse, nagu näiteks SNMP) käest andmeid ning salvestab need andmebaasi. Skript get_traffic.sh:
  
 
<source lang=bash>
 
<source lang=bash>
#!/bin/sh
+
#!/bin/sh
 
   
 
   
# sisenevad bitid
+
# sisenevad bitid
sin=`/usr/local/bin/snmpget -v2c -c avalik -Oqv localhost IF-MIB::ifInOctets.3`
+
sin=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifInOctets.3`
# väljjuvad bitid
+
 
sout=`/usr/local/bin/snmpget -v2c -c avalik -Oqv localhost IF-MIB::ifOutOctets.3`
+
# väljjuvad bitid
 +
sout=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifOutOctets.3`
 
   
 
   
# väljastame siseneva ja väljuva liikluse numbrid, lihtsalt ilu pärast ja kontrolliks
+
# väljastame kontrolliks siseneva ja väljuva liikluse numbrid
echo Snmp in : $sin
+
echo Last in : $sin
echo Snmp out: $sout
+
echo Last out: $sout
 
   
 
   
# uuendame infoga liiklus.rrd faili
+
# uuendame infoga liiklus.rrd faili. viitame rrdupdate käsule läbi täispika kaustapuu!
/usr/local/bin/rrdupdate '''/home/kasutaja/rrdtool/'''liiklus.rrd N:$sin:$sout
+
/usr/local/bin/rrdupdate /home/kasutaja/rrdtool/liiklus.rrd N:$sin:$sout
 
</source>
 
</source>
  
pööra tähelepanu ridadele sin ja sout :) ehk siis sisse ja välja data vastavalt  
+
Kohandame skriptis rrd andembaasi asukoha kettal ning võrgukaardi numbri vastavalt serveri konfiguratsioonile.
  
  sin=`/usr/local/bin/snmpget -v2c -c avalik -Oqv localhost IF-MIB::ifInOctets.3`
+
<source lang=bash>
  sout=`/usr/local/bin/snmpget -v2c -c avalik -Oqv localhost IF-MIB::ifOutOctets.3`
+
  sin=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifInOctets.1`
 +
  sout=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifOutOctets.1`
 +
</source>
  
number kolm (ifInOctets.3) tähistab siis siin näites võrgukaardi numbrit. Et teada saada, mis number oleks kasutada õige, kirjutame käsu
+
Number üks (ifInOctets.1) tähistab antud arvuti konfiguratsioonis välisvõrgukaardi numbrit. Oma serveri parameetrite leidmiseks sisesta käsk:
  
  snmpwalk -v 1 -c public localhost | more
+
<source lang=bash>
 +
  snmpwalk -v 1 -c <parool> localhost | grep ifDescr
 +
</source>
  
ning siis kerid alla kuni leiab read
+
Antud serveri konfiguratsioonile vastavalt oli tulemus järgmine, kus '''ifDescr.1''' on väline (fxp0) ja '''ifDescr.2''' sisemine (fxp1) võrgukaart:
  
 
  IF-MIB::ifDescr.1 = STRING: fxp0
 
  IF-MIB::ifDescr.1 = STRING: fxp0
 
  IF-MIB::ifDescr.2 = STRING: fxp1
 
  IF-MIB::ifDescr.2 = STRING: fxp1
  
ifDescr.1 on siis väline ehk fxp0 ja ifDescr.2 sisemine kaart fxp1
+
Kõikide võimalike nimetuste ja väärtuste kuvamiseks:
 +
 
 +
<source lang=bash>
 +
snmpwalk -v 1 -c <parool> localhost | more
 +
</source>
  
 
===Graafikute loomine===
 
===Graafikute loomine===
  
Nüüd paigaldame skripti g.sh, mis loob info järgi rrdtool’i andmefailis graafiku  
+
Paigaldame skripti build_graph.sh, mis loob rrd andmebaasi andmete järgi graafikud. Konfiguratsiooni osas määra sobivad väärtused.
 +
 
 +
<source lang=bash>
 +
#!/bin/sh
 +
 
 +
# Konfiguratsioon
 +
 
 +
rrdtool="/usr/local/bin/rrdtool"      # rrdtool'i asukoht kettal (crontab n6uab t2ispikka kaustapud)
 +
image_path="/home/kasutaja/graafikud" # kaust, kuhu graafikud salvestatakse
 +
location="Kurelaane"                  # location @ date => graafiku alumises servas olev sõne
 +
database="/home/kasutaja/liiklus.rrd" # rrd faili asukoht kettal
 +
vertical_label='Traffic kB/s'        # vertikaalne pealkiri
 +
 
 +
# Päev
  
#!/bin/sh
+
$rrdtool graph $image_path/g-p2ev.png -a PNG -s -24h \
/usr/local/bin/rrdtool graph '''/home/kasutaja/public_html/'''g-p2ev.png -a PNG -A -w 800 -h 300 -s -24h -v "Liiklus" \
+
    -w 800 -h 350 \
     'DEF:in='''/home/kasutaja/rrdtool/liiklus.rrd''':in:AVERAGE' \
+
    -A \
     'DEF:out='''/home/kasutaja/rrdtool/liiklus.rrd''':out:AVERAGE' \
+
    --x-grid HOUR:1:HOUR:4:MINUTE:120:0:%R \
 +
    --vertical-label "$vertical_label" \
 +
    --font DEFAULT:7: \
 +
    --color BACK#ffffff \
 +
    --border 1 \
 +
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
 +
    --watermark "$location @ `date`" \
 +
     --slope-mode \
 +
    "DEF:in_def=$database:in:AVERAGE" \
 +
     "DEF:out_def=$database:out:AVERAGE" \
 +
    'CDEF:in=in_def,UN,0,in_def,IF' \
 +
    'CDEF:out=out_def,UN,0,out_def,IF' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
101. rida: 159. rida:
 
     'AREA:background#F3F3F3' \
 
     'AREA:background#F3F3F3' \
 
     'AREA:backgroundN#F3F3F3' \
 
     'AREA:backgroundN#F3F3F3' \
     'HRULE:262144#FF0000' \
+
     'HRULE:600000#999999' \
    'HRULE:131072#FF0000' \
 
    'HRULE:32768#FF0000' \
 
    'HRULE:-32768#FF0000' \
 
    'HRULE:-131072#FF0000' \
 
 
     'HRULE:-262144#FF0000' \
 
     'HRULE:-262144#FF0000' \
     'AREA:in#91ACF1' \
+
     'AREA:in#83afe5' \
     'AREA:outg#FF9090' \
+
     'AREA:outg#e6ce97' \
     'LINE1:in#767676' \
+
     'LINE1:in#225ea8' \
     'LINE1:outg#767676' \
+
     'LINE1:outg#bf812d' \
     'GPRINT:kbin:LAST:Viimati sisse \:   %3.2lf KB' \
+
     'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
     'GPRINT:kbout:LAST:Viimati välja \:   %3.2lf KB\j' \
+
     'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
     'GPRINT:kbin:AVERAGE:Keskmiselt sisse\: %3.2lf KB' \
+
     'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
     'GPRINT:kbout:AVERAGE:Keskmiselt välja\: %3.2lf KB\j'
+
     'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'
+
 
+
# Nädal
/usr/local/bin/rrdtool graph '''/home/kasutaja/public_html/g-n2dal.png''' -a PNG -A -w 800 -h 300 -s -168h -v "Liiklus" \
+
 
     'DEF:in='''/home/kasutaja/liiklus.rrd''':in:AVERAGE' \
+
$rrdtool graph $image_path/g-n2dal.png -a PNG -s -168h \
     'DEF:out='''/home/kasutaja/liiklus.rrd''':out:AVERAGE' \
+
    -w 800 -h 350 \
 +
    -A \
 +
    --vertical-label "$vertical_label" \
 +
    --font DEFAULT:7: \
 +
    --color BACK#ffffff \
 +
    --border 1 \
 +
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
 +
    --watermark "$location @ `date`" \
 +
     --slope-mode \
 +
    "DEF:in_def=$database:in:AVERAGE" \
 +
     "DEF:out_def=$database:out:AVERAGE" \
 +
    'CDEF:in=in_def,UN,0,in_def,IF' \
 +
    'CDEF:out=out_def,UN,0,out_def,IF' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
127. rida: 193. rida:
 
     'AREA:background#F3F3F3' \
 
     'AREA:background#F3F3F3' \
 
     'AREA:backgroundN#F3F3F3' \
 
     'AREA:backgroundN#F3F3F3' \
     'HRULE:262144#FF0000' \
+
     'HRULE:600000#999999' \
    'HRULE:131072#FF0000' \
 
    'HRULE:32768#FF0000' \
 
    'HRULE:-32768#FF0000' \
 
    'HRULE:-131072#FF0000' \
 
 
     'HRULE:-262144#FF0000' \
 
     'HRULE:-262144#FF0000' \
     'AREA:in#91ACF1' \
+
     'AREA:in#83afe5' \
     'AREA:outg#FF9090' \
+
     'AREA:outg#e6ce97' \
     'LINE1:in#767676' \
+
     'LINE1:in#225ea8' \
     'LINE1:outg#767676' \
+
     'LINE1:outg#bf812d' \
     'GPRINT:kbin:LAST:Viimati sisse \:   %3.2lf KB' \
+
     'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
     'GPRINT:kbout:LAST:Viimati välja \:   %3.2lf KB\j' \
+
     'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
     'GPRINT:kbin:AVERAGE:Keskmiselt sisse\: %3.2lf KB' \
+
     'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
     'GPRINT:kbout:AVERAGE:Keskmiselt välja\:%3.2lf KB\j'
+
     'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'
+
 
/usr/local/bin/rrdtool graph '''/home/kasutaja/public_html/'''g-kuu.png -a PNG -A -w 800 -h 300 -s -672h -v "Liiklus" \
+
 
     'DEF:in='''/home/kasutjaa/liiklus.rrd''':in:AVERAGE' \
+
# Kuu
     'DEF:out='''/home/kasutaja/liiklus.rrd''':out:AVERAGE' \
+
 
 +
$rrdtool graph $image_path/g-kuu.png -a PNG -s -744h \
 +
    -w 800 -h 350 \
 +
    -A \
 +
    --vertical-label "$vertical_label" \
 +
    --font DEFAULT:7: \
 +
    --color BACK#ffffff \
 +
    --border 1 \
 +
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
 +
    --watermark "$location @ `date`" \
 +
     --slope-mode \
 +
    "DEF:in_def=$database:in:AVERAGE" \
 +
     "DEF:out_def=$database:out:AVERAGE" \
 +
    'CDEF:in=in_def,UN,0,in_def,IF' \
 +
    'CDEF:out=out_def,UN,0,out_def,IF' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
152. rida: 228. rida:
 
     'AREA:background#F3F3F3' \
 
     'AREA:background#F3F3F3' \
 
     'AREA:backgroundN#F3F3F3' \
 
     'AREA:backgroundN#F3F3F3' \
     'HRULE:262144#FF0000' \
+
     'HRULE:600000#999999' \
    'HRULE:131072#FF0000' \
 
    'HRULE:32768#FF0000' \
 
    'HRULE:-32768#FF0000' \
 
    'HRULE:-131072#FF0000' \
 
 
     'HRULE:-262144#FF0000' \
 
     'HRULE:-262144#FF0000' \
     'AREA:in#91ACF1' \
+
     'AREA:in#83afe5' \
     'AREA:outg#FF9090' \
+
     'AREA:outg#e6ce97' \
     'LINE1:in#767676' \
+
     'LINE1:in#225ea8' \
     'LINE1:outg#767676' \
+
     'LINE1:outg#bf812d' \
     'GPRINT:kbin:LAST:Viimati sisse \:   %3.2lf KB' \
+
     'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
     'GPRINT:kbout:LAST:Viimati välja \:   %3.2lf KB\j' \
+
     'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
     'GPRINT:kbin:AVERAGE:Keskmiselt sisse\: %3.2lf KB' \
+
     'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
     'GPRINT:kbout:AVERAGE:Keskmiselt välja\:%3.2lf KB\j'
+
     'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'
+
 
/usr/local/bin/rrdtool graph '''/home/kasutaja/public_html/'''g-aasta.png -a PNG -A -w 800 -h 300 -s -8064h -v "Liiklus" \
+
# Aasta
     'DEF:in='''/home/kasutaja/liiklus.rrd''':in:AVERAGE' \
+
 
     'DEF:out='''/home/kasutaja/liiklus.rrd''':out:AVERAGE' \
+
$rrdtool graph $image_path/g-aasta.png -a PNG -s -8760h \
 +
    -w 800 -h 350 \
 +
    -A \
 +
    --vertical-label "$vertical_label" \
 +
    --font DEFAULT:7: \
 +
    --color BACK#ffffff \
 +
    --border 1 \
 +
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
 +
    --watermark "$location @ `date`" \
 +
     --slope-mode \
 +
    "DEF:in_def=$database:in:AVERAGE" \
 +
     "DEF:out_def=$database:out:AVERAGE" \
 +
    'CDEF:in=in_def,UN,0,in_def,IF' \
 +
    'CDEF:out=out_def,UN,0,out_def,IF' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbin=in,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
 
     'CDEF:kbout=out,1024,/' \
 
     'CDEF:outg=out,-1,/' \
 
     'CDEF:outg=out,-1,/' \
     'HRULE:262144#FF0000' \
+
     'HRULE:600000#999999' \
    'HRULE:131072#FF0000' \
 
    'HRULE:32768#FF0000' \
 
    'HRULE:-32768#FF0000' \
 
    'HRULE:-131072#FF0000' \
 
 
     'HRULE:-262144#FF0000' \
 
     'HRULE:-262144#FF0000' \
     'AREA:in#91ACF1' \
+
     'AREA:in#83afe5' \
     'AREA:outg#FF9090' \
+
     'AREA:outg#e6ce97' \
     'LINE1:in#767676' \
+
     'LINE1:in#225ea8' \
     'LINE1:outg#767676' \
+
     'LINE1:outg#bf812d' \
     'GPRINT:kbin:LAST:Viimati sisse \:   %3.2lf KB' \
+
     'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
     'GPRINT:kbout:LAST:Viimati välja \:   %3.2lf KB\j' \
+
     'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
     'GPRINT:kbin:AVERAGE:Keskmiselt sisse\: %3.2lf KB' \
+
     'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
     'GPRINT:kbout:AVERAGE:Keskmiselt välja\:%3.2lf KB\j'
+
     'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'
 +
</source>
 +
 
 +
===CRON===
  
Muudame vastavalt leiduvad rajad failis õigeks. Rajad, mida vaja muuta on
+
Andmete kogumise ja graafikute joonistamise automatiseerimiseks lisame vastavad skriptid [[:Crontab]] tabelisse.
  
/usr/local/bin/rrdtool graph /home/kasutaja/public_html/g-p2ev.png -a PNG -A -w 800 -h 300 -s -24h -v "Liiklus" \
+
Sisestame käsu
    'DEF:in=/home/kasutaja/rrdtool/liiklus.rrd:in:AVERAGE' \
 
    'DEF:out=/home/kasutaja/rrdtool/liiklus.rrd:out:AVERAGE' \
 
  
Esimene on graafikupildi asukoht ja kaks teist on liiklus.rrd ehk rrdtooli andmebaasifaili asukoht.
+
<source lang=bash>
 +
crontab -e
 +
</source>
  
===CRON===
+
ning lisame read:
  
Lisame cron’i graafikuloomis skriptide käivitamise, avame /etc/crontab, lisame read
+
<source lang=bash>
 +
*/5    *      *      *      *      root    /home/kasutaja/get_traffic.sh > /dev/null
 +
*/5    *      *      *      *      root    /home/kasutaja/build_graph.sh > /dev/null
 +
</source>
  
*/1    *      *      *      *      root    /usr/home/kasutaja/liiklus.sh > /dev/null
+
Sedasi loetakse andmeid ja joonistatakse graafikuid iga viie minuti järel.
*/5    *      *      *      *      root    /usr/home/kasutaja/g.sh > /dev/null
 
  
Nagu näha, küsime snmp’ga infot ja lisame rrdtool’i andmebaasi seda iga minut, aga graafikud joonistame iga 5 minuti järel. Praegu on see halb, et korraga loome iga kord päeva, kuu, nädala ja aasta graafiku. Võib näiteks g.sh lüüa lahti kolmeks skriptiks, mida omakorda gron käivitab vastavalt kord päev, kord nädalas, kord aastas ;)
+
===Graafik===
  
Tulemuseks saame neli pilti. Toome esile siin päevagraafiku.
+
Tulemuseks saame neli graafikut. Siinkohal toome esile ainult päevase graafiku:
  
 
[[Image:g-p2ev.png]]
 
[[Image:g-p2ev.png]]
  
Loome mingi html faili, mis näitab tekitatud pilte
+
===HTML===
 +
 
 +
Loome [[:HTML]] lehekülje, milles kõik neli graafikut üheskoos.
 +
 
 +
<source lang="html4strict">
 +
 
 +
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="et" lang="et">
 +
<head>
 +
  <title>RRDtool graph</title>
 +
  <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
 +
  <style type="text/css">
 +
    html, body {
 +
      font-family: verdana, tahoma, arial, helvetica, "trebuchet ms";
 +
      font-size: 14px;
 +
      font-weight: normal;
 +
      text-decoration: none;
 +
      color: #000000;
 +
      height: 100%;
 +
      background: #333;
 +
      color: #fff;
 +
    }
 +
    #graphs div, #timestamp { text-align: center; padding: 2px; }
 +
    #timestamp { font-weight: bold; }
 +
  </style>
 +
  <meta http-equiv="refresh" content="300; url=" />
 +
</head>
 +
<body>
 +
 
 +
<div id="timestamp">Loading the date...</div>
 +
 
 +
<div id="graphs">
 +
  <div id="g_day">
 +
    <img src="g-p2ev.png" alt='Day' title="Day" />
 +
  </div>
 +
  <div id="g_week">
 +
    <img src="g-n2dal.png" alt='Week' title="Week" />
 +
  </div>
 +
  <div id="g_month">
 +
    <img src="g-kuu.png" alt='Month' title="Month" />
 +
  </div>
 +
  <div id="g_year">
 +
    <img src="g-aasta.png" alt='Year' title="Year" />
 +
  </div>
 +
</div>
 +
 
 +
<script type="text/javascript">
 +
 
 +
  function set_date() { 
 +
    // month array for local translation
 +
    months = [ "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember" ];
 +
   
 +
    d = new Date(); // get date for the string
 +
   
 +
    // format hour, minute and second number
 +
    h = (String(d.getHours()).length == 1 ? "0"+d.getHours() : d.getHours());
 +
    m = (String(d.getMinutes()).length == 1 ? "0"+d.getMinutes() : d.getMinutes());
 +
    s = (String(d.getSeconds()).length == 1 ? "0"+d.getSeconds() : d.getSeconds());
 +
 
 +
    // set the date str
 +
    date_str=
 +
      ("0"+d.getDate()).substr(-2,2)+"-"+(months[d.getMonth()])+"-"+(d.getFullYear())+" "+
 +
      h+":"+m+":"+s;
 +
   
 +
    // pollute element with date str
 +
    document.getElementById("timestamp").innerHTML = date_str;
 +
  }
  
Kogu edasine info netis http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
+
  set_date(); // run date set function
 +
 
 +
</script>
  
===Andkefailide konvert enne teisele arhidektuurile tõstmist===
+
</body>
 +
</html>
 +
</source>
  
rrdtool puhul pole võimalik kasutada samu rrd faile nii 32 kui 64bitistel masinatel
+
===Andmefailide kohandamine teise arhitektuuri jaoks===
ja vahepeal tuleb need ümber konvertida ja taastada. Arendajate poolt arutatakse
 
ka uue formaadi loomist mille puhul sarnaseid konvertimisi enam ei peaks tegema
 
kuid hetkel seda ametlikus releasis veel pole.
 
  
Esimeses masinas konverdime kõik failid xml formaati järgneva skriptiga
+
RRDtool'i puhul pole võimalik kasutada samu rrd andmebaase nii 32- kui 64 bitisel arhitektuuril. Seetõttu tuleb need ümber konvertida ja seejärel taastada.
  
#!/bin/sh
+
Esimeses masinas konverdime kõik andmebaasid xml formaati järgneva skriptiga:
for g in $( ls /usr/local/var/rrdfailid ) ; do
 
  name=`echo $g | awk '{sub(/rrd/,"xml");print}'`
 
  echo $g
 
  echo $name
 
    rrdtool dump /usr/local/var/rrdfailid/$g /usr/local/var/rrdfailid/$name
 
done
 
  
Kopeerime failid üle teise arvutisse kus Kustutame esimesena eksisteerivad rrdfailid ja seejäärel loome
+
<source lang=bash>
neist uued rrdfailid.
+
#!/bin/sh
 +
for g in $( ls /usr/local/var/rrdfailid ) ; do
 +
name=`echo $g | awk '{sub(/rrd/,"xml");print}'`
 +
  echo $g
 +
  echo $name
 +
  rrdtool dump /usr/local/var/rrdfailid/$g /usr/local/var/rrdfailid/$name
 +
done
 +
</source>
  
#!/bin/sh
+
Kopeerime xml failid teise arvutisse ning loome neist uued rrd andmebaasid.
for g in $( ls /usr/local/var/rrdfailid ) ; do
 
  name=`echo $g | awk '{sub(/xml/,"rrd");print}'`
 
  echo $g
 
  echo $name
 
    rrdtool restore /usr/local/var/rrdfailid/$g /usr/local/var/munin/rrdfailid/$name
 
done
 
  
Ja seejärel võime eemaldada kopeeritud failid
+
<source lang=bash>
 +
#!/bin/sh
 +
for g in $( ls /usr/local/var/rrdfailid ) ; do
 +
name=`echo $g | awk '{sub(/xml/,"rrd");print}'`
 +
  echo $g
 +
  echo $name
 +
  rrdtool restore /usr/local/var/rrdfailid/$g /usr/local/var/munin/rrdfailid/$name
 +
done
 +
</source>
  
 +
Seejärel võime eemaldada kopeeritud xml failid.
  
 
===Lingid===
 
===Lingid===
248. rida: 406. rida:
  
 
http://en.wikipedia.org/wiki/RRDtool
 
http://en.wikipedia.org/wiki/RRDtool
 +
 +
http://eccentric.cx/misc/rrdcalc.html
 +
 +
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/

Viimane redaktsioon: 23. aprill 2013, kell 11:41

Sissjuhatus

RRDtool on vabavaraline andmete hoidmise ja graafikute loomise vahend. See toetab mistahes arvulisi andmemassiive. Näiteks: võrguliiklus, temperatuur, protsessori kasutus, kõvaketta ruum, aktiivsed võrguühendused, failide arv kettal jms.

Install

Paigaldame serverisse SNMP teenuse. Täpsemalt on selle paigaldamisest juttu palas net-snmp.

Paigaldame ka rakenduse RRDtool.

Andmefaili loomine

Kõige keerulisem osa RRDtooli juures on andmebaasi loomine, mille sees andmeid hoitakse. Järgmised parameetrid tuleb enne andmebaasi loomist välja selgitada:

1. kui tihti andmeid lisatakse? [--step X] (samm on vaikimisi 300 sekundit)
2. mitut erinevat andmejada andmebaasis hoitakse?
3. kui pika aja kohta andmeid hoitakse?

Loome võrguliikluse andmebaasi, kus andmete uuendamine toimub iga 300 sekundi (5 minutit) tagant. Meil on vaja graafikut nii ööpäeva, nädala, kuu kui aasta jaoks.

Käivitamie järgmise käsu:

 rrdtool create liiklus.rrd \
   --step 300               \
   DS:in:COUNTER:600:U:U    \
   DS:out:COUNTER:600:U:U   \
   RRA:AVERAGE:0.5:1:288    \
   RRA:AVERAGE:0.5:6:336    \
   RRA:AVERAGE:0.5:24:372   \
   RRA:AVERAGE:0.5:288:365  \
   RRA:MAX:0.5:1:288        \
   RRA:MAX:0.5:6:336        \
   RRA:MAX:0.5:24:372       \
   RRA:MAX:0.5:288:365

Selle tulemusel tekib anmebaasifail nimega liiklus.rrd. Nüüd natuke lähemalt, mida me siin tegime.

DS:in:COUNTER:600:U:U ja DS:out:COUNTER:600:U:U

Sedasi tekitatakse baasi andmejada nimega 'in' ja 'out', mis on COUNTER tüüpi, andmepunkt iga 600 sekundi tagant, mille minimaalne ja maksimaale väärtus on teadmata (U). Kui on teada minimaalne või maksimaalne väärtus, võib selle loomulikult ka baasi loomisel paika panna. Selle näite puhul jätame selle aga kujule Unknown (U).

RRA:AVERAGE:0.5:1:288

288 andmeühikut!
1 (iga uuendus) * 300 sekundit (uuenduse samm) * 288 (andmepunkti) = 86400 sekundit
86400 sekundit / 60 => 1440 minutit
1440 minutit / 60 => 24 tundi
24 tundi / 24 => 1 ööpäev

RRA:AVERAGE:0.5:6:336

336 andmeühikut!
6 (uuenduste keskmine) * 300 sekundit (uuenduse samm) * 336 (andmepunkti) = 604800 sekundit
604800 sekundit / 60 => 10080 minutit
10080 minutit / 60 => 168 tundi
168 tundi / 24 => 7 ööpäeva

RRA:AVERAGE:0.5:24:372

336 andmeühikut!
24 (uuenduste keskmine) * 300 sekundit (uuenduse samm) * 372 (andmepunkti) = 2678400 sekundit
2678400 sekundit / 60 => 44640 minutit
44640 minutit / 60 => 744 tundi
744 tundi / 24 => 31 ööpäeva

RRA:AVERAGE:0.5:288:365

365 andmeühikut!
288 (uuenduste keskmine) * 300 sekundit (uuenduse samm) * 365 (andmepunkti) = 31536000 sekundit
31536000 sekundit / 60 => 525600 minutit
525600 minutit / 60 => 8760 tundi
8760 tundi / 24 => 365 ööpäeva

Sarnaselt eelnevale (AVERAGE e. keskmine) on defineeritud ka maksimaalsete väärtuste hoidmine samas ajaskaalas (MAX).

Andmete uuendamine

Andmete uuendamiseks on otstarbekas luua skript, mis küsib operatsioonisüsteemi (või mingi teenuse, nagu näiteks SNMP) käest andmeid ning salvestab need andmebaasi. Skript get_traffic.sh:

#!/bin/sh
 
# sisenevad bitid
sin=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifInOctets.3`

# väljjuvad bitid
sout=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifOutOctets.3`
 
# väljastame kontrolliks siseneva ja väljuva liikluse numbrid
echo Last in : $sin
echo Last out: $sout
 
# uuendame infoga liiklus.rrd faili. viitame rrdupdate käsule läbi täispika kaustapuu!
/usr/local/bin/rrdupdate /home/kasutaja/rrdtool/liiklus.rrd N:$sin:$sout

Kohandame skriptis rrd andembaasi asukoha kettal ning võrgukaardi numbri vastavalt serveri konfiguratsioonile.

 sin=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifInOctets.1`
 sout=`/usr/local/bin/snmpget -v 1 -c <parool> -Oqv localhost IF-MIB::ifOutOctets.1`

Number üks (ifInOctets.1) tähistab antud arvuti konfiguratsioonis välisvõrgukaardi numbrit. Oma serveri parameetrite leidmiseks sisesta käsk:

 snmpwalk -v 1 -c <parool> localhost | grep ifDescr

Antud serveri konfiguratsioonile vastavalt oli tulemus järgmine, kus ifDescr.1 on väline (fxp0) ja ifDescr.2 sisemine (fxp1) võrgukaart:

IF-MIB::ifDescr.1 = STRING: fxp0
IF-MIB::ifDescr.2 = STRING: fxp1

Kõikide võimalike nimetuste ja väärtuste kuvamiseks:

 snmpwalk -v 1 -c <parool> localhost | more

Graafikute loomine

Paigaldame skripti build_graph.sh, mis loob rrd andmebaasi andmete järgi graafikud. Konfiguratsiooni osas määra sobivad väärtused.

#!/bin/sh

# Konfiguratsioon

rrdtool="/usr/local/bin/rrdtool"      # rrdtool'i asukoht kettal (crontab n6uab t2ispikka kaustapud)
image_path="/home/kasutaja/graafikud" # kaust, kuhu graafikud salvestatakse
location="Kurelaane"                  # location @ date => graafiku alumises servas olev sõne
database="/home/kasutaja/liiklus.rrd" # rrd faili asukoht kettal
vertical_label='Traffic kB/s'         # vertikaalne pealkiri

# Päev

$rrdtool graph $image_path/g-p2ev.png -a PNG -s -24h \
    -w 800 -h 350 \
    -A \
    --x-grid HOUR:1:HOUR:4:MINUTE:120:0:%R \
    --vertical-label "$vertical_label" \
    --font DEFAULT:7: \
    --color BACK#ffffff \
    --border 1 \
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
    --watermark "$location @ `date`" \
    --slope-mode \
    "DEF:in_def=$database:in:AVERAGE" \
    "DEF:out_def=$database:out:AVERAGE" \
    'CDEF:in=in_def,UN,0,in_def,IF' \
    'CDEF:out=out_def,UN,0,out_def,IF' \
    'CDEF:kbin=in,1024,/' \
    'CDEF:kbout=out,1024,/' \
    'CDEF:outg=out,-1,/' \
    'CDEF:background=in,POP,LTIME,7200,%,3600,LE,INF,UNKN,IF' \
    'CDEF:backgroundN=background,-1,*' \
    'AREA:background#F3F3F3' \
    'AREA:backgroundN#F3F3F3' \
    'HRULE:600000#999999' \
    'HRULE:-262144#FF0000' \
    'AREA:in#83afe5' \
    'AREA:outg#e6ce97' \
    'LINE1:in#225ea8' \
    'LINE1:outg#bf812d' \
    'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
    'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
    'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
    'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'

# Nädal

$rrdtool graph $image_path/g-n2dal.png -a PNG -s -168h \
    -w 800 -h 350 \
    -A \
    --vertical-label "$vertical_label" \
    --font DEFAULT:7: \
    --color BACK#ffffff \
    --border 1 \
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
    --watermark "$location @ `date`" \
    --slope-mode \
    "DEF:in_def=$database:in:AVERAGE" \
    "DEF:out_def=$database:out:AVERAGE" \
    'CDEF:in=in_def,UN,0,in_def,IF' \
    'CDEF:out=out_def,UN,0,out_def,IF' \
    'CDEF:kbin=in,1024,/' \
    'CDEF:kbout=out,1024,/' \
    'CDEF:outg=out,-1,/' \
    'CDEF:background=in,POP,LTIME,172800,%,86400,LE,INF,UNKN,IF' \
    'CDEF:backgroundN=background,-1,*' \
    'AREA:background#F3F3F3' \
    'AREA:backgroundN#F3F3F3' \
    'HRULE:600000#999999' \
    'HRULE:-262144#FF0000' \
    'AREA:in#83afe5' \
    'AREA:outg#e6ce97' \
    'LINE1:in#225ea8' \
    'LINE1:outg#bf812d' \
    'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
    'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
    'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
    'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'


# Kuu

$rrdtool graph $image_path/g-kuu.png -a PNG -s -744h \
    -w 800 -h 350 \
    -A \
    --vertical-label "$vertical_label" \
    --font DEFAULT:7: \
    --color BACK#ffffff \
    --border 1 \
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
    --watermark "$location @ `date`" \
    --slope-mode \
    "DEF:in_def=$database:in:AVERAGE" \
    "DEF:out_def=$database:out:AVERAGE" \
    'CDEF:in=in_def,UN,0,in_def,IF' \
    'CDEF:out=out_def,UN,0,out_def,IF' \
    'CDEF:kbin=in,1024,/' \
    'CDEF:kbout=out,1024,/' \
    'CDEF:outg=out,-1,/' \
    'CDEF:background=in,POP,LTIME,1209600,%,604800,LE,INF,UNKN,IF' \
    'CDEF:backgroundN=background,-1,*' \
    'AREA:background#F3F3F3' \
    'AREA:backgroundN#F3F3F3' \
    'HRULE:600000#999999' \
    'HRULE:-262144#FF0000' \
    'AREA:in#83afe5' \
    'AREA:outg#e6ce97' \
    'LINE1:in#225ea8' \
    'LINE1:outg#bf812d' \
    'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
    'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
    'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
    'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'

# Aasta

$rrdtool graph $image_path/g-aasta.png -a PNG -s -8760h \
    -w 800 -h 350 \
    -A \
    --vertical-label "$vertical_label" \
    --font DEFAULT:7: \
    --color BACK#ffffff \
    --border 1 \
    --color SHADEA#f1f1f1 --color SHADEB#f1f1f1 \
    --watermark "$location @ `date`" \
    --slope-mode \
    "DEF:in_def=$database:in:AVERAGE" \
    "DEF:out_def=$database:out:AVERAGE" \
    'CDEF:in=in_def,UN,0,in_def,IF' \
    'CDEF:out=out_def,UN,0,out_def,IF' \
    'CDEF:kbin=in,1024,/' \
    'CDEF:kbout=out,1024,/' \
    'CDEF:outg=out,-1,/' \
    'HRULE:600000#999999' \
    'HRULE:-262144#FF0000' \
    'AREA:in#83afe5' \
    'AREA:outg#e6ce97' \
    'LINE1:in#225ea8' \
    'LINE1:outg#bf812d' \
    'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \
    'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \
    'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \
    'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j'

CRON

Andmete kogumise ja graafikute joonistamise automatiseerimiseks lisame vastavad skriptid Crontab tabelisse.

Sisestame käsu

crontab -e

ning lisame read:

 */5     *       *       *       *       root    /home/kasutaja/get_traffic.sh > /dev/null
 */5     *       *       *       *       root    /home/kasutaja/build_graph.sh > /dev/null

Sedasi loetakse andmeid ja joonistatakse graafikuid iga viie minuti järel.

Graafik

Tulemuseks saame neli graafikut. Siinkohal toome esile ainult päevase graafiku:

G-p2ev.png

HTML

Loome HTML lehekülje, milles kõik neli graafikut üheskoos.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="et" lang="et">
<head>
  <title>RRDtool graph</title>
  <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" /> 
  <style type="text/css">
    html, body {
      font-family: verdana, tahoma, arial, helvetica, "trebuchet ms";
      font-size: 14px;
      font-weight: normal;
      text-decoration: none;
      color: #000000;
      height: 100%;
      background: #333;
      color: #fff;
    }
    #graphs div, #timestamp { text-align: center; padding: 2px; }
    #timestamp { font-weight: bold; }
  </style>
  <meta http-equiv="refresh" content="300; url=" />
</head> 
<body> 

<div id="timestamp">Loading the date...</div>

<div id="graphs">
  <div id="g_day">
    <img src="g-p2ev.png" alt='Day' title="Day" />
  </div>
  <div id="g_week">
    <img src="g-n2dal.png" alt='Week' title="Week" />
  </div>
  <div id="g_month">
    <img src="g-kuu.png" alt='Month' title="Month" />
  </div>
  <div id="g_year">
    <img src="g-aasta.png" alt='Year' title="Year" />
  </div>
</div>

<script type="text/javascript">

  function set_date() {  
    // month array for local translation
    months = [ "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember" ];
    
    d = new Date(); // get date for the string
    
    // format hour, minute and second number
    h = (String(d.getHours()).length == 1 ? "0"+d.getHours() : d.getHours());
    m = (String(d.getMinutes()).length == 1 ? "0"+d.getMinutes() : d.getMinutes());
    s = (String(d.getSeconds()).length == 1 ? "0"+d.getSeconds() : d.getSeconds());
  
    // set the date str
    date_str=
      ("0"+d.getDate()).substr(-2,2)+"-"+(months[d.getMonth()])+"-"+(d.getFullYear())+" "+
      h+":"+m+":"+s;
    
    // pollute element with date str
    document.getElementById("timestamp").innerHTML = date_str;
  }

  set_date(); // run date set function
  
</script>

</body>
</html>

Andmefailide kohandamine teise arhitektuuri jaoks

RRDtool'i puhul pole võimalik kasutada samu rrd andmebaase nii 32- kui 64 bitisel arhitektuuril. Seetõttu tuleb need ümber konvertida ja seejärel taastada.

Esimeses masinas konverdime kõik andmebaasid xml formaati järgneva skriptiga:

#!/bin/sh
for g in $( ls /usr/local/var/rrdfailid ) ; do
 name=`echo $g | awk '{sub(/rrd/,"xml");print}'`
  echo $g
  echo $name
   rrdtool dump /usr/local/var/rrdfailid/$g /usr/local/var/rrdfailid/$name
done

Kopeerime xml failid teise arvutisse ning loome neist uued rrd andmebaasid.

#!/bin/sh
for g in $( ls /usr/local/var/rrdfailid ) ; do
 name=`echo $g | awk '{sub(/xml/,"rrd");print}'`
  echo $g
  echo $name
   rrdtool restore /usr/local/var/rrdfailid/$g /usr/local/var/munin/rrdfailid/$name
done

Seejärel võime eemaldada kopeeritud xml failid.

Lingid

http://oss.oetiker.ch/rrdtool/

http://en.wikipedia.org/wiki/RRDtool

http://eccentric.cx/misc/rrdcalc.html

http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/