Erinevus lehekülje "RRDtool ja võrgugraafik" redaktsioonide vahel
(→Seadistus) |
(→Andkefailide konvert enne teisele arhidektuurile tõstmist) |
||
(ei näidata sama kasutaja 44 vahepealset redaktsiooni) | |||
9. rida: | 9. rida: | ||
Paigaldame ka rakenduse '''RRDtool'''. | Paigaldame ka rakenduse '''RRDtool'''. | ||
− | === | + | ===Andmefaili loomine=== |
− | Kõige keerulisem osa RRDtooli juures on | + | 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. | + | 2. mitut erinevat andmejada andmebaasis hoitakse? |
− | 3. kui pika aja kohta | + | 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 | + | <source lang=bash> |
− | -- | + | rrdtool create liiklus.rrd \ |
− | DS:in:COUNTER:600:U: | + | --step 300 \ |
− | DS:out:COUNTER:600:U: | + | DS:in:COUNTER:600:U:U \ |
− | RRA:AVERAGE:0.5:1: | + | DS:out:COUNTER:600:U:U \ |
− | RRA:AVERAGE:0.5:6: | + | RRA:AVERAGE:0.5:1:288 \ |
− | RRA:AVERAGE:0.5:24: | + | RRA:AVERAGE:0.5:6:336 \ |
− | RRA:AVERAGE:0.5:288: | + | RRA:AVERAGE:0.5:24:372 \ |
− | RRA:MAX:0.5:1: | + | RRA:AVERAGE:0.5:288:365 \ |
− | RRA:MAX:0.5:6: | + | RRA:MAX:0.5:1:288 \ |
− | RRA:MAX:0.5:24: | + | RRA:MAX:0.5:6:336 \ |
− | RRA:MAX:0.5:288: | + | RRA:MAX:0.5:24:372 \ |
+ | RRA:MAX:0.5:288:365 | ||
+ | </source> | ||
+ | |||
+ | 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: | ||
<source lang=bash> | <source lang=bash> | ||
− | + | #!/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 | |
</source> | </source> | ||
− | + | Kohandame skriptis rrd andembaasi asukoha kettal ning võrgukaardi numbri vastavalt serveri konfiguratsioonile. | |
− | sin=`/usr/local/bin/snmpget - | + | <source lang=bash> |
− | sout=`/usr/local/bin/snmpget - | + | 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 üks (ifInOctets.1) tähistab antud arvuti konfiguratsioonis välisvõrgukaardi numbrit. Oma serveri parameetrite leidmiseks sisesta käsk: | |
− | snmpwalk -v 1 -c | + | <source lang=bash> |
+ | snmpwalk -v 1 -c <parool> localhost | grep ifDescr | ||
+ | </source> | ||
− | + | 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 | ||
− | + | Kõikide võimalike nimetuste ja väärtuste kuvamiseks: | |
+ | |||
+ | <source lang=bash> | ||
+ | snmpwalk -v 1 -c <parool> localhost | more | ||
+ | </source> | ||
+ | |||
+ | ===Graafikute loomine=== | ||
− | + | 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 | ||
+ | |||
+ | $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:kbin=in,1024,/' \ | ||
'CDEF:kbout=out,1024,/' \ | 'CDEF:kbout=out,1024,/' \ | ||
84. rida: | 159. rida: | ||
'AREA:background#F3F3F3' \ | 'AREA:background#F3F3F3' \ | ||
'AREA:backgroundN#F3F3F3' \ | 'AREA:backgroundN#F3F3F3' \ | ||
− | 'HRULE: | + | 'HRULE:600000#999999' \ |
− | |||
− | |||
− | |||
− | |||
'HRULE:-262144#FF0000' \ | 'HRULE:-262144#FF0000' \ | ||
− | 'AREA:in# | + | 'AREA:in#83afe5' \ |
− | 'AREA:outg# | + | 'AREA:outg#e6ce97' \ |
− | 'LINE1:in# | + | 'LINE1:in#225ea8' \ |
− | 'LINE1:outg# | + | 'LINE1:outg#bf812d' \ |
− | 'GPRINT:kbin:LAST: | + | 'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:LAST: | + | 'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \ |
− | 'GPRINT:kbin:AVERAGE: | + | 'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:AVERAGE: | + | '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:kbin=in,1024,/' \ | ||
'CDEF:kbout=out,1024,/' \ | 'CDEF:kbout=out,1024,/' \ | ||
110. rida: | 193. rida: | ||
'AREA:background#F3F3F3' \ | 'AREA:background#F3F3F3' \ | ||
'AREA:backgroundN#F3F3F3' \ | 'AREA:backgroundN#F3F3F3' \ | ||
− | 'HRULE: | + | 'HRULE:600000#999999' \ |
− | |||
− | |||
− | |||
− | |||
'HRULE:-262144#FF0000' \ | 'HRULE:-262144#FF0000' \ | ||
− | 'AREA:in# | + | 'AREA:in#83afe5' \ |
− | 'AREA:outg# | + | 'AREA:outg#e6ce97' \ |
− | 'LINE1:in# | + | 'LINE1:in#225ea8' \ |
− | 'LINE1:outg# | + | 'LINE1:outg#bf812d' \ |
− | 'GPRINT:kbin:LAST: | + | 'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:LAST: | + | 'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \ |
− | 'GPRINT:kbin:AVERAGE: | + | 'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:AVERAGE: | + | '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:kbin=in,1024,/' \ | ||
'CDEF:kbout=out,1024,/' \ | 'CDEF:kbout=out,1024,/' \ | ||
135. rida: | 228. rida: | ||
'AREA:background#F3F3F3' \ | 'AREA:background#F3F3F3' \ | ||
'AREA:backgroundN#F3F3F3' \ | 'AREA:backgroundN#F3F3F3' \ | ||
− | 'HRULE: | + | 'HRULE:600000#999999' \ |
− | |||
− | |||
− | |||
− | |||
'HRULE:-262144#FF0000' \ | 'HRULE:-262144#FF0000' \ | ||
− | 'AREA:in# | + | 'AREA:in#83afe5' \ |
− | 'AREA:outg# | + | 'AREA:outg#e6ce97' \ |
− | 'LINE1:in# | + | 'LINE1:in#225ea8' \ |
− | 'LINE1:outg# | + | 'LINE1:outg#bf812d' \ |
− | 'GPRINT:kbin:LAST: | + | 'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:LAST: | + | 'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \ |
− | 'GPRINT:kbin:AVERAGE: | + | 'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:AVERAGE: | + | '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:kbin=in,1024,/' \ | ||
'CDEF:kbout=out,1024,/' \ | 'CDEF:kbout=out,1024,/' \ | ||
'CDEF:outg=out,-1,/' \ | 'CDEF:outg=out,-1,/' \ | ||
− | 'HRULE: | + | 'HRULE:600000#999999' \ |
− | |||
− | |||
− | |||
− | |||
'HRULE:-262144#FF0000' \ | 'HRULE:-262144#FF0000' \ | ||
− | 'AREA:in# | + | 'AREA:in#83afe5' \ |
− | 'AREA:outg# | + | 'AREA:outg#e6ce97' \ |
− | 'LINE1:in# | + | 'LINE1:in#225ea8' \ |
− | 'LINE1:outg# | + | 'LINE1:outg#bf812d' \ |
− | 'GPRINT:kbin:LAST: | + | 'GPRINT:kbin:LAST:CURRENT download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:LAST: | + | 'GPRINT:kbout:LAST:CURRENT upload\: %3.2lf kB/s\j' \ |
− | 'GPRINT:kbin:AVERAGE: | + | 'GPRINT:kbin:AVERAGE:AVERAGE download\: %3.2lf kB/s' \ |
− | 'GPRINT:kbout:AVERAGE: | + | 'GPRINT:kbout:AVERAGE:AVERAGE upload\: %3.2lf kB/s\j' |
+ | </source> | ||
− | + | ===CRON=== | |
− | + | Andmete kogumise ja graafikute joonistamise automatiseerimiseks lisame vastavad skriptid [[:Crontab]] tabelisse. | |
− | |||
− | |||
− | + | Sisestame käsu | |
− | + | <source lang=bash> | |
+ | crontab -e | ||
+ | </source> | ||
− | + | ning lisame read: | |
− | |||
− | + | <source lang=bash> | |
+ | */5 * * * * root /home/kasutaja/get_traffic.sh > /dev/null | ||
+ | */5 * * * * root /home/kasutaja/build_graph.sh > /dev/null | ||
+ | </source> | ||
− | Tulemuseks saame neli | + | Sedasi loetakse andmeid ja joonistatakse graafikuid iga viie minuti järel. |
+ | |||
+ | ===Graafik=== | ||
+ | |||
+ | Tulemuseks saame neli graafikut. Siinkohal toome esile ainult päevase graafiku: | ||
[[Image:g-p2ev.png]] | [[Image:g-p2ev.png]] | ||
− | + | ===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; | ||
+ | } | ||
− | + | set_date(); // run date set function | |
+ | |||
+ | </script> | ||
+ | </body> | ||
+ | </html> | ||
+ | </source> | ||
+ | |||
+ | ===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: | ||
+ | |||
+ | <source lang=bash> | ||
+ | #!/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> | ||
+ | |||
+ | Kopeerime xml failid teise arvutisse ning loome neist uued rrd andmebaasid. | ||
+ | |||
+ | <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=== | ||
229. 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
Sisukord
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:
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