IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: SeguretatXarxesInformàtiques, LinuxAdministracioAvancada, DissenyXarxesLinux
Fitxers: EinesMonitoritzacio.pdf (EinesMonitoritzacio.odp)

EinesMonitoritzacio2.pdf (EinesMonitoritzacio2.odp)

Repositori SVN: https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SeguretatXarxesInformàtiques
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas
MRTG logo

Multi Router Traffic Grapher (MRTG) és una eina Open Source per monitoritzar i mesurar la càrrega de trànsit d'enllaços de xarxa. Permet als usuaris visualitzar gràfiques de trànsit de xarxa.

Originalment va ser creat per Tobias Oetiker i Dave Rand per monitoritzar el tràfic dels routers, però realment es pot utilitzar per crear gràfiques i estadístiques de gairebé qualsevol cosa.

MRTG està escrit en Perl, és multiplataforma i disponible sota una llicència GNU General Public License.

Com funciona?

MRTG utilitza el protocol SNMP per tal de monitoritzar valors OID d'un dispositiu remot. Els dispositius a monitoritzar han de tenir activat el SNMP i han de tenir una base de dades MIB que proporcioni el valor OID que s'està intentant monitoritzar.

MRTG guarda les dades obtingudes en un log on s'emmagatzema el nou valor i els anteriors.

NOTA: Per defecte MRTG no utilitza RRDTool. De fet MRTG és un sistema anterior a RRDTool. Es pot però configurar MRTG per tal que utilitzi RRDTool. Consulteu MRTG i RRDTool

Més endavant es pot crear un document HTML amb aquesta base de dades per tal mostrar les gràfiques de trànsit del dispositiu monitoritzat.

Característiques

TODO:

  • Measures two values (I for Input, O for Output) per target.
  • Gets its data via an SNMP agent, or through the output of a command line.
  • Typically collects data every five minutes (it can be configured to collect data less frequently).
  • Creates an HTML page per target that features four graphs (GIF or PNG images).
  • Results are plotted vs time into day, week, month and year graphs, with the I plotted as a full green area, and the O as a blue line.
  • Automatically scales the Y axis of the graphs to show the most detail.
  • Adds calculated Max, Average and Current values for both I and O to the target's HTML page.
  • Can also send warning emails if targets have values above a certain threshold.

History

    In 1994 I was working at a site where we had one 64kbit line to the
      outside world. Obviously, everybody was interested in knowing how the
      link was performing. So I wrote a quick hack which created a constantly
      updated graph on the web that showed the traffic load on our Internet
      link. This eventually evolved into a rather configurable Perl script
      called MRTG-1.0 which I released in spring 1995. After a few updates, I
      left my job at DMU to start work at the Swiss Federal Institute of
      Technology. Due to lack of time I had to put MRTG aside. One day in
      January of 1996, I received email from Dave Rand asking if I had any
      ideas why MRTG was so slow. Actually, I did. MRTG's programming was not
      very efficient and it was written entirely in Perl. After a week or so,
      Dave wrote back to me and said he had tried what I had suggested for
      improving MRTG's speed. Since the changes did not help much, he had  
      decided to rewrite the time-critical sections of MRTG in C. The code  
      was attached to his email. His tool increased the speed of MRTG by a
      factor of 40! This got me out of my 'MRTG ignorance' and I started to
      spend my spare time developing of MRTG-2.

      Soon after MRTG-2 development had begun I started to give beta copies
      to interested parties. In return I got many feature patches, a lot of
      user feedback and bug fixes. The product you are getting now wouldn't
      be in this state if it hadn't been for the great contributions and
      support I received from of many people. I would like to take this
      opportunity to thank them all. (See the files CHANGES for a long list
      of folk people who helped to make MRTG what it is today.)

Instal·lació

$ sudo apt-get install mrtg

Debconf ens preguntarà el següent:

MRTG.jpg

L'opció per defecte és la correcta en la majoria de casos.

Un cop instal·lat ens interessen els següents fitxers:

Fitxers de configuració:

$ dpkg -L mrtg | grep etc
/etc
/etc/cron.d
/etc/cron.d/mrtg
/etc/logrotate.d
/etc/logrotate.d/mrtg
/etc/mrtg.cfg

Comandes:

$ dpkg -L mrtg | grep bin
/usr/bin
/usr/bin/cfgmaker
/usr/bin/indexmaker
/usr/bin/mrtg
/usr/bin/rateup

Fitxers web:

NOTA: Corregit. Abans potser si existien? Ara s'han de crear a mà almenys a una Ubuntu 11.10 no formen part del paquet

$ dpkg -L mrtg | grep www

/var/www
/var/www/mrtg
/var/www/mrtg/mrtg-l.png
/var/www/mrtg/mrtg-m.png
/var/www/mrtg/mrtg-r.png
/var/www/mrtg/mrtg-ti.png

Comandes

/usr/bin/mrtg

/usr/bin/cfgmaker

Aquesta comanda s'utilitza per crear un fitxer mrtg.cfg per a un dispositiu concret. Es connecta via SNMP al dispositiu i configura mrtg.conf per tal que tingui en compte aquell dispositiu. Consulteu l'apartat Configuració.

/usr/bin/indexmaker

/usr/bin/rateup

Configuració

El fitxer de configuració de mrtg és:

/etc/mrtg.cfg

Normalment s'utilitza l'eina cfgmaker per generar el fitxer de configuració. El que necessitem és un dispositiu amb suport per a SNMP i executar la següent comanda:

$ sudo cfgmaker --community public --output /etc/mrtg.cfg localhost

On l'important és l'últim paràmetre localhost que pot ser substituir per l'adreça IP del dispositiu que voleu monitoritzar. El fitxer:

/etc/mrtg.cfg

Es on es guarda la configuració d'aquest dispositiu.

NOTA: public és la clau típica READ_ONLY de SNMP. Cal que modifiqueu aquest valor si aquesta no és la vostra clau.
NOTA 2: Cada dispositiu ha de tenir un fitxer de configuració diferent

Aquesta comanda crea el fitxer /etc/mrtg.cfg.

Ara tenim dos opcions per aplicar els canvis:

  1. Esperar un màxim de 5 minuts a que cron actualitzi mrtg
  2. o executar la comanda:
$ sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg

Que és el que s'executa cada 5 minuts amb cron:

$ cat /etc/cron.d/mrtg
*/5 *   * * *   root    if [ -d /var/lock/mrtg ]; then if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg >>   
/var/log/mrtg/mrtg.log 2>&1; fi else mkdir /var/lock/mrtg; fi

Per a crear les imatges i una pàgina html básica podem executar la utilitat indexmaker:

$ sudo indexmaker /etc/mrtg.cfg --output routerADSL.html
$ sudo cp routerADSL.html /var/www/mrtg

NOTA: Per cada dispositiu, heu de canviar la pàgina web que utilitzeu (per exemple passar de routerADSL.htm a routerADSL2.htm) i el fitxer de

configuració (per exemple canviar /etc/mrtg.cfg per /etc/mrtg1.cfg)

I ara podem accedir a un resum de les gràfiques del router ADSL accedint a la web

http://localhost/mrtg/routerADSL.html

Format del fitxer /etc/mrtg.cfg

Com es comportarà la comanda mrtg es control a partir del fitxer de configuració mrtg.conf. Si no s'indica el contrari aquest fitxer de configuració es troba a:

/etc/mrtg/mrtg.conf

Es pot però indicar explícitament un altre fitxer com es fa per exemple amb l'eina snpservices de Guifi.net simplement executant:

/usr/bin/mrtg PATH_FITXER_CONFIGURACIO

Per exemple:

/usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg

Es poden crear fitxers molt bàsics de configuració utilitzant l'eina cfgmaker però si es vol fer una configuració complexa o a mida cal configurar el fitxer a mà.

NOTA: De fet a snpservices el fitxer de configuració es genera de forma dinàmica a partir de les dades de la web de guifi.net (fitxers XML i el CNML. S'accedeix a aquestes dades a través d'un servei web)

La sintaxi general del fitxer és:

  • S'utilitzen paraules claus (keywords). Les paraules claus han d'aparèixer al principi d'una línia
  • Les línies que segueixen a una línia amb paraula clau i que comencen per un espai s'afegeixen a la línia anterior.appended to the keyword line
  • Les línies en blanc són ignorades
  • Les línies que comencen per # són comentaris
  • Es poden incloure altres fitxers utilitzant include:

Vegem un exemple de fitxer bàsic creat amb l'ordre:

$ sudo cfgmaker --community public --output /etc/mrtg.cfg 10.139.221.162

El fitxer queda de la següent forma:

NOTA: NO es mostren totes les interfícies de xarxa, només la que està sense comentar.

# Created by 
 # /usr/bin/cfgmaker --community public --output /etc/mrtg.cfg 10.139.221.162
 
 ### Global Config Options
 
 #  for UNIX
 # WorkDir: /home/http/mrtg
 
 #  for Debian
 WorkDir: /var/www/mrtg
 
 #  or for NT
 # WorkDir: c:\mrtgdata
 
 ### Global Defaults 
 
 #  to get bits instead of bytes and graphs growing to the right
 # Options[_]: growright, bits
 
 EnableIPv6: no
 
 ######################################################################
 # System: UBNT
 # Description: Linux 2.6.15-5.2 #1 Tue Jul 26 11:43:34 EEST 2011 mips
 # Contact: guifi@guifi.net
 # Location: TortosaCrtaTortosaAlRd1
 ######################################################################
 
 
 ### Interface 1 >> Descr: 'lo' | Name: '' | Ip: '' | Eth: '' ###
 ### The following interface is commented out because:
 ### * it is a Software Loopback interface
 ### * has a speed of 0 which makes no sense
 # 
 # Target[10.139.221.162_1]: 1:public@10.139.221.162:
 # SetEnv[10.139.221.162_1]: MRTG_INT_IP="" MRTG_INT_DESCR="lo"
 # MaxBytes[10.139.221.162_1]: 0
 # Title[10.139.221.162_1]: Traffic Analysis for 1 -- UBNT
 # PageTop[10.139.221.162_1]: <h1>Traffic Analysis for 1 -- UBNT</h1>
 # 		<div id="sysdetails">
 # 			<table>
 # 				<tr>
 # 					<td>System:</td>
 # 					<td>UBNT in TortosaCrtaTortosaAlRd1</td>
 # 				</tr>
 # 				<tr>
 # 					<td>Maintainer:</td>
 # 					<td>guifi@guifi.net</td>
 # 				</tr>
 # 				<tr>
 # 					<td>Description:</td>
 # 					<td>lo  </td>
 # 				</tr>
 # 				<tr>
 # 					<td>ifType:</td>
 # 					<td>softwareLoopback (24)</td>
 # 				</tr>
 # 				<tr>
 # 					<td>ifName:</td>
 # 					<td></td>
 # 				</tr>
 # 				<tr>
 # 					<td>Max Speed:</td>
 # 					<td>0.0 Bytes/s</td>
 # 				</tr>
 # 			</table>
 # 		</div>
 
 ...
 ...
 
 ### Interface 7 >> Descr: 'ath0' | Name: '' | Ip: '' | Eth: '' ###
 
 Target[10.139.221.162_7]: 7:public@10.139.221.162:
 SetEnv[10.139.221.162_7]: MRTG_INT_IP="" MRTG_INT_DESCR="ath0"
 MaxBytes[10.139.221.162_7]: 37500000
 Title[10.139.221.162_7]: Traffic Analysis for 7 -- UBNT
 PageTop[10.139.221.162_7]: <h1>Traffic Analysis for 7 -- UBNT</h1>
 		<div id="sysdetails">
 			<table>
 				<tr>
 					<td>System:</td>
 					<td>UBNT in TortosaCrtaTortosaAlRd1</td>
 				</tr>
 				<tr>
 					<td>Maintainer:</td>
 					<td>guifi@guifi.net</td>
 				</tr>
 				<tr>
 					<td>Description:</td>
 					<td>ath0  </td>
 				</tr>
 				<tr>
 					<td>ifType:</td>
 					<td>ethernetCsmacd (6)</td>
 				</tr>
 				<tr>
 					<td>ifName:</td>
 					<td></td>
 				</tr>
 				<tr>
 					<td>Max Speed:</td>
 					<td>37.5 MBytes/s</td>
 				</tr>
 			</table>
 		</div>

Vegem un altre exemple, en aquest cas és una porció del fitxer MRTG generat per snpservices de Guifi.net

# PathAdd: /usr/local/rrdtool-1.2.12/bin
 # LibAdd: /usr/local/rrdtool-1.2.12/lib/perl/5.8.8/i386-linux-thread-multi
 HtmlDir: /var/lib/snpservices/rrimg/
 ImageDir: /var/lib/snpservices/rrimg/
 LogDir: /var/lib/snpservices/rrdb/
 LogFormat: rrdtool
 ThreshDir: /var/lib/snpservices/rrdb/
 Forks: 25
 Title[30946_ping]: Temps del ping de #Av.stadi5cRd1
 PageTop[30946_ping]: <H1>Latència #Av.stadi5cRd1</H1>
      <TABLE
      <TR><TD>System:</TD>     <TD>#Av.stadi5cRd1</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>ping</TD></TR>
      <TR><TD>IP:</TD>         <TD>10.36.253.201</TD></TR>
      </TABLE>
 Target[30946_ping]: `/usr/share/snpservices/common/ping.sh 10.36.253.201`
 MaxBytes[30946_ping]: 2000
 Options[30946_ping]: growright,unknaszero,nopercent,gauge
 LegendI[30946_ping]: Perduts LegendO[30946_ping]: Temps mig
 Legend1[30946_ping]: Temps max. en ms
 Legend2[30946_ping]: Temps min. en ms
 YLegend[30946_ping]: RTT (ms)
 Target[30946-0_traf]: \wifi0:public@10.36.253.201:
 SetEnv[30946-0_traf]: MRTG_INT_IP="10.36.253.201" MRTG_INT_DESCR="#Av.stadi5cRd1"
 MaxBytes[30946-0_traf]: 3000000
 Title[30946-0_traf]: Trafic a Tortosavstd5cRd1CPE0 de #Av.stadi5cRd1
 PageTop[30946-0_traf]: <H1>Tràfic a Tortosavstd5cRd1CPE0 de #Av.stadi5cRd1</H1>
      <TABLE>
      <TR><TD>System:</TD>     <TD>#Av.stadi5cRd1</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>Tortosavstd5cRd1CPE0</TD></TR>
      <TR><TD>Max Speed:</TD>  <TD>30.0 Mbits/s</TD></TR>
      </TABLE>
 
 Title[27385_ping]: Temps del ping de #avremolinsRd1
 PageTop[27385_ping]: <H1>Latència #avremolinsRd1</H1>
      <TABLE
      <TR><TD>System:</TD>     <TD>#avremolinsRd1</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>ping</TD></TR>
      <TR><TD>IP:</TD>         <TD>10.36.253.42</TD></TR>
      </TABLE>
 Target[27385_ping]: `/usr/share/snpservices/common/ping.sh 10.36.253.42`
 MaxBytes[27385_ping]: 2000
 Options[27385_ping]: growright,unknaszero,nopercent,gauge
 LegendI[27385_ping]: Perduts LegendO[27385_ping]: Temps mig
 Legend1[27385_ping]: Temps max. en ms
 Legend2[27385_ping]: Temps min. en ms
 YLegend[27385_ping]: RTT (ms)
 Target[27385-0_traf]: \wifi0:public@10.36.253.42:

Cron

El fitxer principal és:

$ cat /etc/cron.d/mrtg 
*/5 *	* * *	root	if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then mkdir -p /var/log/mrtg ; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 &>  
/dev/null | tee -a /var/log/mrtg/mrtg.log ; fi

Com podeu veure s'executa l'ordre mrtg cada 5 minuts. El cron pot semblar llarg i complicat però el que fa és executar:

env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 &>  /dev/null | tee -a /var/log/mrtg/mrtg.log ;

Això només ho fa si existeixen els fitxers /usr/bin/mrtg i /etc/mrtg.cfg. El resultat d'executar aquesta comanda es guarda al fitxer de log:

/var/log/mrtg/mrtg.log 

Vegeu també cron.

MRTG i RRDTool

Per tal que MRTG utilitzi RRD i no pas el format de fitxers de log cal modificar la configuració:

$ sudo joe /etc/mrtg.cfg
...
#LOGFORMAT. Afegir per Sergi Tur
LogFormat: rrdtool

Un cop feta la modificació cal tenir en compte que:

  • MRTG agafarà els antics fitxers .log i els convertira al format .rrd. Els fitxers originals log no es modifiquen per poder tornar endarrere.
  • MRTG utilitzarà l'eina rrdtool per actualitzar la base de dades.
  • MRTG ja no crearà més pàgines web ni cap mena de gràfica. Només farà les peticions SNMP als dispositius i guardarà les dades a la base de dades RRD.

El rendiment és bastant més ràpid i les gràfiques només es generen sota demanda (cal cridar a l'ordre RRDTOOL)

IMPORTANT: Noteu que la presentació i creació de les gràfiques no dependrà en absolut de MRTG, sino de com crideu l'eina rrdtool!

Vegeu també Routers2 un frontend web que combina MRTG i RRDTool.

Exemples

Airos i MRTG

Vegeu també

Enllaços externs