Lav grafer af målinger med MRTG på Linux

Jeg har de sidste par uger haft behov for at måle system-performance løbende og lave grafer af målingerne.
Det kan være ping-tid, disk-temperatur, disk-forbrug eller den tid det tager at kopiere data til den enkelte netværks-diske.
Dette blog-indlæg handler om at få lavet en graf ud fra en vilkårlig måling. Det kræver lidt scripting-gymnastik, men det er ikke ret svært.

Her er et eksempel på slut-resultatet, hvor jeg løbende måler ping-ping mellem min server og www.sslug.dk:

Illustration: Privatfoto

Den første del af opgaven er at lavet et script, som måler det man synes er interessant.
Her vælger jeg tiden det tager at pinge www.sslug.dk fra min hjemmemaskine - dvs. jeg vil køre "ping -c 1 www.sslug.dk".

$ ping -c 1 www.sslug.dk
PING www.sslug.dk (130.225.213.113) 56(84) bytes of data.
64 bytes from www.sslug.dk (130.225.213.113): icmp_req=1 ttl=55 time=9.00 ms
 
--- www.sslug.dk ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 9.002/9.002/9.002/0.000 ms

Den interessante måling er de 9 msek, som står på linie 2. Denne kan jeg gradvist isolere ved at tage de to første linier ud med "head -n 2" og derefter kun tage den sidste linie med "tail -n 1"

$ ping -c 1 www.sslug.dk | head -n 2 | tail -n 1
64 bytes from www.sslug.dk (130.225.213.113): icmp_req=1 ttl=55 time=10.2 ms

Med lidt ekstra cut efter = og mellemrum så har jeg selve tallet

$ ping -c 1 www.sslug.dk | head -n 2 | tail -n 1 | cut -d "=" -f 4- | cut -d " " -f 1
10.2

Det virker fint - det gemmer jeg som et shell-script f.eks. under navnet "~/bin/pingprog"

#!/bin/bash
ping -c 1 www.sslug.dk | head -n 2 | tail -n 1 | cut -d "=" -f 4- | cut -d " " -f 1
# husk at afslutte sidste linie med linieskift

Husk at lave "chmod u+x ~/bin/pingprog" så det kan køres. Kør dit program et par gange og se at det spiller.

Hvis du er interesseret i f.eks. diskforbrug på første disk så er det noget ala
"df | head -n2 | tail -n 1 | cut -d \% -f 1 | awk '{print $5}'", du har interesse i.

MRTG lever af et skript, som laver fire linier. De to første linier skal indeholde det man vil måle - dvs. "/home/pto/bin/pingprog" som jeg lavede ovenfor.
Man kan også bruge to forskellige målinger, så så ender i samme plot.
De to sidste linier bruges reelt ikke her. Skriv "1" i 3. linie og en vilkårlig tekst i 4. linie.

Jeg gemmer følgende skript som "/home/pto/bin/mrtgping" og husker "chmod +x /home/pto/bin/mrtgping"

#!/bin/bash
pingtid=<code>/home/pto/bin/pingprog</code>
echo $pingtid
echo $pingtid
echo 1
echo "Peter"

Jeg kan lige teste det

$ /home/pto/bin/mrtgping
9.30
9.30
1
Peter

Det ser fint ud.

Nu skal der lavet en MRTG-opsætning - her for Debian/Ubuntu Linux.

sudo apt-get install mrtg

Hvis man får spørgsmål om "Gør /etc/mrtg.cfg ejet af og kun læsbar af root?" så svar "No".

For at gøre det nemt har jeg lagt den konfigurations-fil som MRTG skal køre om lidt i samme web-server katalog som resultat-filerne skal komme i - dvs. /home/pto/www/v2/mrtg".
Her er filen " /home/pto/www/v2/mrtg/mrtg.cfg"

Det eneste der mangler nu er at få cron til køre:
Kør "crontab -e" og tilføj

*/5 * * * * env LANG=C /usr/bin/mrtg /home/pto/www/v2/mrtg/mrtg.cfg

Så opdateres grafen hvert 5. minut.

Det super-fede med MRTG er at nå man er nået så langt, er det meget nemt at få flere grafer.
Tilføj blot flere linier i mrtg.cfg fra "Target" og ned til "MaxBytes" - den tekst "[pingtid]" som står på hver af de linier erstattes med et nyt id-navn.

I kan se alle de relevante filer på http://petertoft.dk/v2/mrtg

/pto

Kommentarer (14)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Baldur Norddahl

rrd kommer med mrtg. Det er samme mand der har opfundet dem og mrtg er bare en overbygning på rrd. Man kan efterfølgende lave alternative dataudtræk direkte med rrdtool. Det blev nyttigt en dag, hvor jeg fik brug for at beregne vores 95. percentil i forbindelse med tilbud på indkøb af internet.

Hvis det handler om ping så er Smokeping langt overlegen. I det hele taget er mrtg nok lidt gammeldags...

  • 0
  • 0
Adam Sjøgren

Super med en nede-på-jorden sådan-kommer-du-i-gang introduktion!

Cacti kan være rart hvis man skal tegne en masse (f.eks. hevet ud via SNMP) og have graferne pænt delt ud på f.eks. maskiner i et interface man kan klikke sig rundt i, zoom'e i og kigge tilbage i.

Dog er brugergrænsefladen i PHP og indimellem noget besynderlig.

Men hvis man har en flink kollega der kan huske hvordan det liiige er man gør, så er det ikke helt tosset som kompagning til overvågning med f.eks. Nagios.

  • 0
  • 0
Kristian Vilmann

Rigtigt. Smokeping er virkelig sej. Men Peters pointe er jo at det er nemt at lave grafer over snart sagt hvad som helst med mrtg. Hvad med en graf over ungernes SMS-forbrug? Eller bussens afvigelse fra køreplanen?
Det kan Smokeping ikke. Rrdtool kan vist noget i samme retning som mrtg, men hvis jeg husker ret er den lidt mere tricky at komme i gang med.

  • 0
  • 0
Henrik Kramshøj Blogger

Jeg anbefaler ofte og hele tiden Observium http://observium.org/wiki/Main_Page

Det er rettet mod netværksudstyr - hvad MRTG tidligere også var. RRDtool er idag super fedt og bruges af en stor del af værktøjer, også Observium.

MRTG vil jeg dog godt "advare" imod, det er ikke dynamisk og skal konfigureres, gaaaab Error No Time Available
- hvor det eneste Observium skal have er en SNMP og så følge nogle konsistente konfigurationsregler og vupti - overvågning af næsten hele netværkets udstyr.

Reglerne er forøvrigt beskrevet på http://www.observium.org/wiki/Interface_Description_Parsing

Så ved at sætte Location, Description osv. på interfaces på routere og porte på switche, vupti! Samlede grafer over en kundes internetporte eller alle transit porte eller alle enheder på CPH lokation.

NB: Observium giver ikke serverdata, og RRDtool er bestemt et bekendtskab værd til alle mulige målinger man selv vil lave grafer over - temperatur i serverrum eksempelvis, hvor jeg brugte det.

Jeg kender også Xymon/Hobbit og det er efter min mening på tide at lægge det i graven ;-)

  • 0
  • 0
Thomas Jansson

Det var en dejlig kort og lige til sagen introduktion. Jeg vidste ikke at MRTG var så simpelt, men til små ting projekter er det jo en ret nem måde at få plottet data op på.

Jeg kan se at alle har deres eget yndlings RRDtool baserede monitoring løsning og min personlige favorit er munin:
http://munin-monitoring.org/
Den største fordel ved munin er mine øjne at det er lige så nemt som dit eksempel at skrive plugins. Et script tilsvarende dit kunne være:

if [ "$1" = "config" ]; then  
        echo 'graph_title Pingtid'  
        echo 'graph_vlabel Pingtid [ms]'  
        echo 'pingtid.label Pingtid til www.sslug.dk'  
        exit 0  
fi  
echo pingtid.value  `ping -c 1 www.sslug.dk | head -n 2 | tail -n 1 | cut -d "=" -f 4- | cut -d " " -f 1"`

Henrik Kramshøj: Tak for linket til observium. Det ser rigtigt godt ud.

  • 0
  • 0
Ole Kaas

Hvis der er noget der er snyde nemt at installere, så er det Munin:

#> apt-get install munin-node  
#> apt-get install munin

Hvis det kører på samme maskine, er det kun nødvendigt at redigere munin.conf (tilføj 3 linier). Hvis server kører remote, skal den have lov og munin-node.conf skal redigeres (og iptables :).

Der findes allerede et væld af plugins og de mest gængse er med som standard (cpu, load, disk, disk io, net, nfs, o.m.a). Ellers er et det ikke svært at strikke et custom plugin selv i favorit sprog.

  • 0
  • 0
Lars Meldgård

Nu er jeg Windows mand, men har også brugt rigtig mange timer i kælderen sammen med mrtg snmp protokoller. Der er bestemt ikke ligetil - slet ikke når man skal hoppe rundt på mange forskellige maskiner og indsamle data som måske ikke nødvendigvis kommer fra snmp protokollen.

Jeg vil anbefale PRTG ( fra paessler.com). Bevares - det er med GUI (undskyld) men den er altså lige ud af boksen og aldrig har jeg oplevet noget så nemt. Den scanner selv dine enheder og sætter grafer op med "2 klik".
Den har i hvert fald sparet mig for mange timers arbejde.

  • 1
  • 0
Log ind eller Opret konto for at kommentere
IT Company Rank
maximize minimize