MRTG - grafické prehľady (4)

11. 10. 2001
Doba čtení: 4 minuty

Sdílet

V minulých častiach miniseriálu o MRTG sme si čo to povedali o inštalácii a konfigurovaní tohoto nástroja pre sledovanie trafficu, dnes si ukážeme na pár príkladoch, ako môžeme spracovávať ľubovoľné dáta v časovom rade.

Ako ste si iste všimli, súčasťou distribúcie mrtg je rozsiahla škála skriptov v adresári contrib, takže si na modeli ukážeme, akým spôsobom môžeme vstupné dáta MRTG predávať.

1. SNMP

SNMP sme využili pre zber dát o trafficu, avšak pri nakonfigurovaní snmpd na linuxe môžeme pri znalosti OID, alebo jeho prechádzaní – napríklad nejakým MIB browserom – priamo zadať ručne do konfiguračného suboru OID hodnotu a tým docieliť sledovanie inej veličiny, napríklad vyťaženia procesora. Nasledujúci príklad demonštruje sledovanie tejto veličiny v praxi.

  Title[^]: Vyťaženie CPU
  Pagetop[^]: <H1> Vyťaženie CPU
  Target[cpu]:1.3.6.1.2.1.25.3.3.1.2.1&1.3.6.1.2.1.25.3.3.1.2.1:public@localhost
  Maxbytes[cpu]:100
  Unscaled[cpu]:ymwd
  ShortLegend[cpu]:%
  Options[cpu]:gauge

Maxbytes hodnota určuje maximálnu hodnotu, ktorá samozrejme je 100. V spojení s parametrom Unscaled:ynwd nám spôsobí to, že v grafe je stále na osi Y maximom hodnota 100 a nedochádza k škálovaniu veľkosti grafu, čo zvýši prehľad o aktuálnom vyťažení. Options:gauge je veľmi dôležitým parametrom. Špecifikuje, že hodnota znamená aktuálny stav a nie kumulovanú hodnotu v časovom rade. Ak by nebola špecifikovaná, mrtg by pri každom čítaní vstupnej hodnoty odčítalo predchádzajúcu hodnotu od aktuálnej a výslednú hodnotu by považovalo za hodnotu, ktorú chceme v grafe zobraziť.

Častým príkladom takéhoto použitia je grafické znázorňovaní hodnôt z prevádzky proxy daemona SQUID, ktorý má integrovaný snmp engine, ktorý nám poskytuje aktuálne hodnoty o stave, využití, dns requestoch… K tomuto sa ale môžeme vrátiť neskôr.

2. Užívateľské skripty

V minulých častiach sme si ukázali, že ako target môžeme špecifikovať ľubovoľný skript, ktorý na stdout poskytne hodnoty. Ukážeme si to na modeli showdisk od Stevena Micallefa. Myslím, že to bude najlepší príklad, pretože zahŕňa zber dát prostredníctvom jednoduchého skriptu s možnosťou zberu dát z viacerých linuxových strojov. Takže hor sa na to.

Na stroji, z ktorého budeme zbierať dáta o obsadenosti jednostivých partícií si umiestnime skript na zber dát s názvom showdisk.pl , ktorý môže vyzerať nasledovne:

  #!/usr/bin/perl
  foreach $_ (`df -k | grep -v "Filesystem"`)
  {
    ($device, $size, $used, $free, $percent, $mount) = split(/\s+/);
    chop($percent);
    print "$percent\n";
  }

Výstupom skriptu sú percentuálne využitia jednotlivých partícií, každá na samostatnom riadku.

Teraz si prostredníctvom daemona inetd aktivujeme skript na nejakom porte. V súbore /etc/services si zriadime na voľnom porte tcp službu s názvom df napríklad na 9047, nastavíme prístupové práva pre určenú ip adresu v /etc/hosts.allow a urobíme si záznam do /etc/inetd.conf

  df  stream  tcp  nowait  root  /usr/sbin/tcpd /sbin/showdisk.pl

Tým máme sprístupnený skript pre čítanie výstupu zo špecifikovaného stroja na ktorom nám beží mrtg, z ktorého jednoducho prostredníctvom telnetu zistíme aktuálnu hodnotu.

Teraz si na stroji s mrtg pripravíme skript, ktorý poskytne dáta pre grafické spracovanie. Dáme mu názov getdisk.pl:

  #!/usr/bin/perl
  use Net::Telnet;
  $hostname = $ARGV[0];
  $disk_no=$ARGV[1];
  $port = 9047
  $i=0;
  if (!defined($disk_no)) {$disk_no=1;}
  $t= new Net::Telnet ( Host =>$hostname, Port => $port);
  $t->open("$hostname");
  while ($i ne $disk_no) {
    $data = $t->getline(Timeout=>40);
    $i++;
    print $data,0,"\n" if $i eq $disk_no;
  }

Vstupnými parametrami skriptu sú hostname stroja, z ktorého sa má zber realizovať a poradové čislo partície. Výstupom je hodnota percentuálneho využitia danej partície sformátovaná pre mrtg.

Teraz už len stačí v konfiguračnom súbore si nadefinovať cieľ a možnosti nasledovne:

  Target[disk]: `/usr/local/mrtg-2/getdisk.pl xxx.xxx.xxx.xxx 1`
  Title[disk]: Obsadenosť root partície na xxx.xxx.xxx.xxx.
  Maxbytes[disk]: 100
  Suppress[disk]:y
  LegendI[disk]: % využitých
  LegendO[disk]:
  Legend1[disk]: % využitých
  Legend2[disk]:
  Options[disk]:gauge

Výsledným grafom bude priebeh využitia prvej partície na stroji xxx.xxx.xxx.xxx. Urobíme si teda záznamy pre ďalšie partície tým že zmeníme názov targetu a druhý parameter skriptu na 2,3,4.....

Analogickým spôsobom si na klientskej strane môžeme urobiť skript na zber ľubovoľných iných dát, ako napríklad vyťaženia procesoru (kvoli čítaniu jednej veličiny predsa nemusíme spojazdňovať snmp) napr:

bitcoin_skoleni

  #!/bin/sh
  top b -n 2 | grep "CPU state" tail -1 | awk '{print substr($9,1,2)}'
  echo 0

Teraz je už iba na nás, či nás budú zaujímať pre tvorbu grafu veličiny získané napríklad prostredníctvom LM_SENSORS, externých meterologických zariadení, počet prihlásených userov na dialup uzle, hodnoty získané z logových súborov. Jednoduchým spôsobom si upravíme skript a hor sa do grafovania.

Nabudúce si povieme niečo o mocnom nástroji pre tvorbu grafov z prevádzky squidu prostredníctvom mrtg.