Hlavní navigace

Prechádzame na RRDTOOL (4)

18. 1. 2002
Doba čtení: 5 minut

Sdílet

V predchádzajúcich častiach sme si priblížili základy fungovania mechanizmu balíka rrdtool, dnes začneme na praktických príkladoch ukazovať jednotlivé aplikácie v praxi. Začneme najjednoduchšími príkladmi, neskôr sa prenesieme ku komplexnejším riešeniam, ktoré nie je možné pomocou mrtg riešiť. Ukážeme si teda na dvoj jednoduchých príkladoch, akým spôsobom je možné sledovať súčasne viac ako dve veličiny v jednom grafe a akým spôsobom je možné graficky znázorniť konsolidované veličiny.

Prvý príklad demonštruje sledovanie troch veličín súčasne a to minimálnej, priemernej a maximálnej doby odozvy príkazu ping v časovom rade. Celú problematiku budeme riešiť pomocou vzorového skriptu v perle, ktorý môžeme jednoducho využiť namiesto analogického konfiguračného súboru mrtg pre všetky operácie. Dáta budeme zbierať v päťminútových intervaloch, takže je potrebné v crone si zriadiť záznam pre cyklické spúšťanie v 5 minútových intervaloch, nakoľko narozdiel od mrtg rrdtool neumožňuje spúšťanie v daemon móde. Skript pozostáva z definícií, kde $start určuje aktuálnu timestamp pre zozbierané údaje, $rrd názov RRA archívu do ktorého sa dáta budú zapisovať a $name názov výstupného grafického súboru. Nasleduje kontrola existencie RRA archívu. Pri prvom spustení skriptu archív samozrejme existovať nebude, takže sa vytvorí podľa zadaných parametrov, takže v našom prípade bude určený pre hodnoty zbierané v intervale 5 minút, čo je reprezentované hodnotou -step 300 a zbierať sa budú tri hodnoty z názvami min, avg a max, ktoré sa pri 10 minútovej neexistencii vstupných dát stanú nedefinovanými. Pre všetky tieto tri hodnoty bude vytvorený RRA archív zaznamenávajúci posledných 50 minút (600×300s) časového radu, takže bude možné vytvárať graf iba pre toto obdobie. Na testovanie nám to však bude stačiť. Nasleduje zber hodnôt prostredníctvom príkazu ping v množstve 10 paketov a následným vyparsovaním získame veličiny $min $max a $avg, ktoré je potrebné uložiť do RRA archívu použitím RRDs::update. Nasleduje tvorba výsledného grafu pri každom spustení skriptu, v našom prípade pre posledných 24 hodín (konečne môžeme zmeniť časový rozsah z implicitných 36 hodín v mrtg) do grafického súboru formátu PNG o rozmeroch 600×300 pixelov s definovaným nadpisom a troma hodnotami prezentovanými čiarovým grafom s popisnou legendou.

#! /usr/bin/perl
use lib qw( /rrdtool/perl-shared/blib/lib /rrdtool/perl-shared/blib/arch );
use lib qw( /usr/local/rrdtool-1.0.33/lib/perl /rrdtool/lib/perl );
use RRDs;
my $start=time;
my $rrd=   "/home/httpd/rrdtool.domena.sk-443/html/rrdtool/test/pingrange.rrd";
my $name = "/home/httpd/rrdtool.domena.sk-443/html/rrdtool/test/pingrange.png";
if (not -f $rrd) {
    RRDs::create ($rrd, "--start",$start-1, "--step",300,
              "DS:min:GAUGE:600:U:U",
              "DS:avg:GAUGE:600:U:U",
              "DS:max:GAUGE:600:U:U",
              "RRA:AVERAGE:0.5:1:600",
);
my $ERROR = RRDs::error;
die "$0: unable to create `$rrd': $ERROR\n" if $ERROR;
};

my $t;
@t=split(":",`ping -c10 111.111.111.111 | grep round-trip|awk
 '{\$c=split(\$4,i,"/");print i[1]":"i[2]":"i[3]}'`);
$min=@t[0];
$avg=@t[1];
$max=@t[2];

print "$start:$min:$avg:$max";

RRDs::update $rrd,"$start:$min:$avg:$max";

RRDs::graph "$name",
  "--title", "Ping rozsahy prehlad",
  "--start", "now-1d",
  "--end", "now",
"--imgformat","PNG",
  "--width=600",
  "--height=300",
  "DEF:min=$rrd:min:AVERAGE",
  "DEF:avg=$rrd:avg:AVERAGE",
  "DEF:max=$rrd:max:AVERAGE",
  "LINE1:min#00ff00:min",
  "LINE1:max#ff0000:max",
  "LINE2:avg#0000ff:avg",
;

if ($ERROR = RRDs::error) {
  print "ERROR: $ERROR\n";
};

Výsledný graf teda môže vyzerať takto:

graf

Konsolidáciu jednotlivých čiastkových hodnôt stackovaním v grafickom znázornení si ukážeme na príklade zobrazujúcom aktuálne vyžitie diskových partícií v našom prípade troch. Je treba uvedomiť si, že hodnoty do RRA archívu je potrebné zapisovať v jednotkovom množstve takže je potrebné si ich vopred premeniť pred zapísaním do archívu. Príklad pracuje analogicky, ako predchádzajúci s tým, že pre zber dát bol použitý príkaz df. Pre tvorbu výsledného grafu sme použili formát AREA, ktorý je vlastne klasický čiarový graf s vyplnením plochy od aktuálnej hodnoty po nulu. Ďalšie veličiny budú znázornené grafom typu STACK, ktorý zabezpečí, že sa nebudú zakresľovať relatívne k nule, ale k hodnote predchádzajúcej veličiny, čo spôsobí, že budú zobrazené nad sebou a výsledný sumár bude možné na príslušnej osi prečítať. V legende sú zobrazené aj aktuálne hodnoty veličín.

#! /usr/bin/perl

use lib qw( /rrdtool/perl-shared/blib/lib /rrdtool/perl-shared/blib/arch );
use lib qw( /usr/local/rrdtool-1.0.33/lib/perl /rrdtool/lib/perl );

use RRDs;
my $start=time;
my $rrd=   "/home/httpd/rrdtool.domena.sk-443/html/rrdtool/test/hdd.rrd";
my $name = "/home/httpd/rrdtool.domena.sk-443/html/rrdtool/test/hdd.png";

if (not -f $rrd) {
RRDs::create ($rrd, "--start",$start-1, "--step",300,
          "DS:hda2:GAUGE:600:U:U",
          "DS:hda3:GAUGE:600:U:U",
          "DS:hda4:GAUGE:600:U:U",
          "RRA:AVERAGE:0.5:1:600",
);
};

my $ERROR = RRDs::error;
die "$0: unable to create `$rrd': $ERROR\n" if $ERROR;

$d2=1024*`df -k| grep hda2 | awk '{printf \$3}'`;
$d3=1024*`df -k| grep hda3 | awk '{printf \$3}'`;
$d4=1024*`df -k| grep hda4 | awk '{printf \$3}'`;

print "$d2\n$d3\n$d4\n";

RRDs::update $rrd,"$start:$d2:$d3:$d4";


RRDs::graph "$name",
  "--title", "Vyuzitie diskoveho priestoru particii na 111.111.111.111",
  "--start", "now-1d",
  "--end", "now",
  "--lower-limit=0",
  "--imgformat","PNG",
  "--width=600",
  "--height=300",
  "DEF:a=$rrd:hda2:AVERAGE",
  "DEF:b=$rrd:hda3:AVERAGE",
  "DEF:c=$rrd:hda4:AVERAGE",
  "AREA:a#00b6e4:/dev/hda2=$d2 b\\r",
  "STACK:b#0022e9:/dev/hda3=$d3 b\\r",
  "STACK:c#00ee22:/dev/hda4=$d4 b\\r",
;

if ($ERROR = RRDs::error) {
  print "ERROR: $ERROR\n";
};

Výsledný graf teda môže vyzerať takto:

graf

Tip do článku - TOP100

Aj keď sa na prvý pohľad zdalo, že oproti mrtg je rrdtool zložitý, a pre jeho používanie je nutná znalosť programovania, iste súhlasíte so mnou, že aké také základy perlu, php alebo programovania v bashi má každý a pri používaní modelových skriptov tohto typu je pohodlnosť práce ako pri konfiguračných súboroch mrtg s mnoho širšími možnosťami použitia a formátovania výstupu. takisto je možné si presne definovať časový rozsah, pre ktorý sa má graf vytvoriť, takže pri správnom definovaní RRA archívu môžete zabezpečiť denný prehľad pre mesiac alebo rok dozadu, čo pri mrtg možné nebolo a muselo byť nepohodlným spôsobom riešené archiváciou vygenerovaných súborov na konci každého dňa, ktoré však boli aj tak generované pre posledných 36 hodín.

V ďalšej časti tohto miniseriálu si ukážeme, akým spôsobom môžeme jednoducho monitorovať svoj mail server.