Le protocole SNMP
09/02/2005
 Christian CALECA 
Liste des cours

MRTG intro  

Accueil ] [ Le principe ] [ Le protocole ] [ Install.  SNMP. ] [ La MIB ] [ Managers ] [ MRTG intro ] [ MRTG en production ]


Qu'est-ce ?

Multi Router Traffic Grapher

Le but de ce logiciel est de construire des pages HTML avec des jolis graphes, représentant diverses choses que l'on extrait généralement d'une machine via SNMP.

De quoi a-t-on besoin ?

MRTG se contente de construire des pages HTML. Il vous faudra donc disposer de plusieurs choses :

La manip proposée

Commençons simplement. Sur une machine Mandrake 9.1 équipée d'une seule interface réseau, nous avons déjà un serveur Apache. Nous allons installer le paquetage MRTG, avec les outils Mandrake habituels.

Nous configurerons alors MRTG pour qu'il affiche le trafic généré sur l'unique interface réseau.

Nous verrons ensuite comment aller plus loin. LA machine sur laquelle la manip est faite s'appelle pchris2.maison.mrs et dispose de l'adresse 192.168.0.15.

Installation de MRTG

Le paquetage

MRTG ne figure pas sur les CD ROM de la distribution. Il faut aller le chercher, par exemple, sur http://fr2.rpmfind.net .  A l'heure où je rédige ces lignes, le paquetage disponible est mrtg-2.9.27-1mdk.i586.rpm. Voyez sur le site les dépendances et téléchargez et installez ce qui vous est nécessaire.

Le paquetage installe une somme impressionnante de fichiers. Ceux qui sont les plus remarquables dans un premier temps sont dans :

Parce que si vous croyez qu'après avoir installé le paquetage, vous allez tout de suite voir de beaux graphes bien colorés, vous allez être déçus...

A part l'installation des fichiers nécessaires, le paquetage s'est contenté d'ajouter dans /etc/crontab une ligne du genre : 

0-59/5 * * * * root /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg

On n'est pas là pour gloser de crond. Si vous ne comprenez pas le sens de cette ligne, sachez qu'elle va faire que mrtg sera exécuté toutes les 5 minutes, en utilisant la configuration décrite dans /var/www/html/mrtg/mrtg.cfg.

Ce fichier existe bien, certes, mais il est vide. Plutôt, il ne contient que des commentaires, qui ne serviront à rien pour mrtg. Il nous faudra donc construire un fichier de configuration adapté à ce que l'on veut visualiser.

Construire une configuration

Comme MRTG est bien fait, le script cfgmaker va nous aider à construire cette configuration.

Comme MRTG est très bien fait, il nous suffit d'aller avec notre butineur sur le site web de notre machine (celle où nous installons MRTG) et de faire :

http://pchris2.maison.mrs/mrtg/cfgmaker.html, dans notre exemple. (Sur une distribution Debian, la documentation HTML est placée dans /usr/share/doc/mrtg/html).

Lisez bien cette page. Si vous la comprenez du premier coup, alors vous êtes un vrai informaticien...

Sinon, on va essayer de s'en sortir quand même. Mais avant de commencer, il faut que je vous confesse quelque chose. Ma machine pchris2 dispose de deux cartes Ethernet, mais une seule est active. A preuve :

[root@pchris2 root]# ifconfig
eth0 Lien encap:Ethernet HWaddr 00:05:5D:48:2B:84
inet adr:192.168.0.15 Bcast:192.168.0.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:234851 errors:0 dropped:0 overruns:0 frame:0
TX packets:1692 errors:0 dropped:0 overruns:0 carrier:0
collisions:17 lg file transmission:100
RX bytes:58112272 (55.4 Mb) TX bytes:454788 (444.1 Kb)
Interruption:10 Adresse de base:0xe000

lo Lien encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:684 errors:0 dropped:0 overruns:0 frame:0
TX packets:684 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:150267 (146.7 Kb) TX bytes:150267 (146.7 Kb)

Mais SNMP va voir la seconde et va indiquer sa présence, tout en indiquant qu'elle est "down".

Bien. Premier essai simplissime, avec cfgmaker. Comme nous allons le voir tout de suite, ce script va se contenter de sortir une configuration sur l'écran :

## Nous nous contentons d'invoquer cfgmaker en lui indiquant la "communauté"@"l'hôte"
[root@pchris2 root]# cfgmaker public@localhost

## Et l'affichage de donner dans un premier temps les infos SNMP:
--base: Get Device Info on public@localhost:
--base: Vendor Id:
--base: Populating confcache
--snpo: confcache public@localhost: Descr lo --> 1
--snpo: confcache public@localhost: Descr eth0 --> 2
--snpo: confcache public@localhost: Descr eth1 --> 3
--snpo: confcache public@localhost: Ip 127.0.0.1 --> 1
--snpo: confcache public@localhost: Ip 192.168.0.15 --> 2
--snpo: confcache public@localhost: Type 24 --> 1
--snpo: confcache public@localhost: Type 6 --> 2
--snpo: confcache public@localhost: Type 6 --> 3 (duplicate)
--snpo: confcache public@localhost: Eth --> 1
--snpo: confcache public@localhost: Eth 00-05-5d-48-2b-84 --> 2
--snpo: confcache public@localhost: Eth 00-20-af-07-1a-3d --> 3
--base: Get Interface Info
--base: Walking ifIndex
--base: Walking ifType
--base: Walking ifSpeed
--base: Walking ifAdminStatus
--base: Walking ifOperStatus

## Puis la configuration proprement dite :
# Created by
# /usr/bin/cfgmaker public@localhost


### Global Config Options

# for UNIX
# WorkDir: /home/http/mrtg

# or for NT
# WorkDir: c:\mrtgdata

### Global Defaults

# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits


######################################################################
# System: pchris2.maison.mrs
# Description: Linux pchris2.maison.mrs 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
# Contact: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
# Location: Unknown (edit /etc/snmp/snmpd.conf)
######################################################################


### Interface 1 >> Descr: 'lo' | Name: '' | Ip: '127.0.0.1' | Eth: '' ###
### The following interface is commented out because:
### * it is a Software Loopback interface
#
# Target[localhost_1]: 1:public@localhost:
# SetEnv[localhost_1]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"
# MaxBytes[localhost_1]: 1250000
# Title[localhost_1]: Traffic Analysis for 1 -- pchris2.maison.mrs
# PageTop[localhost_1]: <H1>Traffic Analysis for 1 -- pchris2.maison.mrs</H1>
# <TABLE>
# <TR><TD>System:</TD> <TD>pchris2.maison.mrs in Unknown (edit /etc/snmp/snmpd.conf)</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>Root &lt;root@localhost&gt; (configure /etc/snmp/snmp.local.conf)</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>1250.0 kBytes/s</TD></TR>
# <TR><TD>Ip:</TD> <TD>127.0.0.1 (localhost)</TD></TR>
# </TABLE>


### Interface 2 >> Descr: 'eth0' | Name: '' | Ip: '192.168.0.15' | Eth: '00-05-5d-48-2b-84' ###

Target[localhost_2]: 2:public@localhost:
SetEnv[localhost_2]: MRTG_INT_IP="192.168.0.15" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_2]: 1250000
Title[localhost_2]: Traffic Analysis for 2 -- pchris2.maison.mrs
PageTop[localhost_2]: <H1>Traffic Analysis for 2 -- pchris2.maison.mrs</H1>
<TABLE>
<TR><TD>System:</TD> <TD>pchris2.maison.mrs in Unknown (edit /etc/snmp/snmpd.conf)</TD></TR>
<TR><TD>Maintainer:</TD> <TD>Root &lt;root@localhost&gt; (configure /etc/snmp/snmp.local.conf)</TD></TR>
<TR><TD>Description:</TD><TD>eth0 </TD></TR>
<TR><TD>ifType:</TD> <TD>ethernetCsmacd (6)</TD></TR>
<TR><TD>ifName:</TD> <TD></TD></TR>
<TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR>
<TR><TD>Ip:</TD> <TD>192.168.0.15 (pchris2.maison.mrs)</TD></TR>
</TABLE>


### Interface 3 >> Descr: 'eth1' | Name: '' | Ip: '' | Eth: '00-20-af-07-1a-3d' ###
### The following interface is commented out because:
### * it is administratively DOWN
### * it is operationally DOWN
#
# Target[localhost_3]: 3:public@localhost:
# SetEnv[localhost_3]: MRTG_INT_IP="" MRTG_INT_DESCR="eth1"
# MaxBytes[localhost_3]: 1250000
# Title[localhost_3]: Traffic Analysis for 3 -- pchris2.maison.mrs
# PageTop[localhost_3]: <H1>Traffic Analysis for 3 -- pchris2.maison.mrs</H1>
# <TABLE>
# <TR><TD>System:</TD> <TD>pchris2.maison.mrs in Unknown (edit /etc/snmp/snmpd.conf)</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>Root &lt;root@localhost&gt; (configure /etc/snmp/snmp.local.conf)</TD></TR>
# <TR><TD>Description:</TD><TD>eth1 </TD></TR>
# <TR><TD>ifType:</TD> <TD>ethernetCsmacd (6)</TD></TR>
# <TR><TD>ifName:</TD> <TD></TD></TR>
# <TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR>
# </TABLE>

Je ne détaille pas ce fichier, nous allons essayer de faire mieux en utilisant les options de cfgmaker.

Déjà, nous constatons que le répertoire de travail de MRTG est resté en commentaire. Ce répertoire nécessite peut-être quelques mots d'explication.

MRTG peut générer une multitude de pages différentes. Nous pouvons par exemple auditer plusieurs machines du réseau à partir de la même installation de MRTG. Il suffit de le lancer plusieurs fois, avec des fichiers de configuration différents ou, plus simplement, définir dans un même fichier de configuration. des représentations de paramètres issus de plusieurs machines. Nous allons ici créer un répertoire pour la machine locale : /var/www/html/mrtg/local

[root@pchris2 root]# md /var/www/html/mrtg/local

Et nous allons utiliser cfgmaker, avec l'option qui permet de spécifier ce répertoire de travail :

[root@pchris2 root]# cfgmaker --global 'WorkDir: /var/www/html/mrtg/local' public@localhost
--base: Get Device Info on public@localhost:

## Le début ne change pas...
--base: Vendor Id:
--base: Populating confcache
...

# Created by
# /usr/bin/cfgmaker --global 'WorkDir: /var/www/html/mrtg/local' public@localhost


### Global Config Options

# for UNIX
# WorkDir: /home/http/mrtg

# or for NT
# WorkDir: c:\mrtgdata

### Global Defaults

# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits

WorkDir: /var/www/html/mrtg/local

######################################################################
# System: pchris2.maison.mrs
## Le reste ne change pas non plus.
...

Mais nous pouvons constater que la directive "WorkDir" figure maintenant dans la configuration. A ce stade, nous pourrions déjà utiliser ce fichier de configuration, qui montrerait le trafic présent sur eth0, mais ça donnerait des pages pas très belles :

Nous allons essayer de faire mieux.

[root@pchris2 root]# cfgmaker --global 'WorkDir: /var/www/html/mrtg/local' --ifdesc=descr public@localhost
...
### Interface 2 >> Descr: 'eth0' | Name: '' | Ip: '192.168.0.15' | Eth: '00-05-5d-48-2b-84' ###

Target[localhost_2]: 2:public@localhost:
SetEnv[localhost_2]: MRTG_INT_IP="192.168.0.15" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_2]: 1250000
Title[localhost_2]: eth0 -- pchris2.maison.mrs
PageTop[localhost_2]: <H1>eth0 -- pchris2.maison.mrs</H1>
<TABLE>
<TR><TD>System:</TD> <TD>pchris2.maison.mrs in Unknown (edit /etc/snmp/snmpd.conf)</TD></TR>
<TR><TD>Maintainer:</TD> <TD>Root &lt;root@localhost&gt; (configure /etc/snmp/snmp.local.conf)</TD></TR>
<TR><TD>Description:</TD><TD>eth0 </TD></TR>
<TR><TD>ifType:</TD> <TD>ethernetCsmacd (6)</TD></TR>
<TR><TD>ifName:</TD> <TD></TD></TR>
<TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR>
<TR><TD>Ip:</TD> <TD>192.168.0.15 (pchris2.maison.mrs)</TD></TR>
</TABLE>
...
Title[localhost_2]: eth0 -- pchris2.maison.mrs

C'est tout de même plus compréhensible que  :

Title[localhost_2]: Traffic Analysis for 2 -- pchris2.maison.mrs

Bien. Pour finir, nous allons dire à cfgmaker que nous voulons du français et aussi un comptage en bits par seconde. En effet, par défaut, le comptage se fait en octets par seconde.

Attention, l'astuce de l'anti-slash ( \ ) permet de saisir une ligne de commande longue en plusieurs morceaux :

[root@pchris2 root]# cfgmaker \
> --global 'WorkDir: /var/www/html/mrtg/local' \
> --global 'Language: french' \
> --global 'Options[_]: bits,growright' \
> --ifdesc=descr public@localhost

...
WorkDir: /var/www/html/mrtg/local
Language: french
Options[_]: bits,growright
...

Notez bien qu'il est parfaitement possible de reprendre à la main le fichier de configuration, pour arriver au même résultat. Cette méthode des options n'est vraiment utile que si vous devez créer des  fichiers de configuration du même style pour de nombreux noeuds de votre réseau.

Parce que bien entendu, je peux créer sur pchris2 des pages d'audit pour ma passerelle qui s'appelle gw1.maison.mrs :

[root@pchris2 root]# cfgmaker public@gw1.maison.mrs 
--base: Get Device Info on public@gw1.maison.mrs:
--base: Vendor Id:
--base: Populating confcache
--snpo: confcache public@gw1.maison.mrs: Descr lo --> 1
--snpo: confcache public@gw1.maison.mrs: Descr eth0 --> 2
--snpo: confcache public@gw1.maison.mrs: Descr eth1 --> 3
--snpo: confcache public@gw1.maison.mrs: Descr ppp0 --> 4
--snpo: confcache public@gw1.maison.mrs: Ip 80.8.146.171 --> 4
--snpo: confcache public@gw1.maison.mrs: Ip 127.0.0.1 --> 1
--snpo: confcache public@gw1.maison.mrs: Ip 192.168.0.250 --> 2
--snpo: confcache public@gw1.maison.mrs: Ip 192.168.100.250 --> 3
--snpo: confcache public@gw1.maison.mrs: Type 24 --> 1
--snpo: confcache public@gw1.maison.mrs: Type 6 --> 2
--snpo: confcache public@gw1.maison.mrs: Type 6 --> 3 (duplicate)
--snpo: confcache public@gw1.maison.mrs: Type 23 --> 4
--snpo: confcache public@gw1.maison.mrs: Eth --> 1
--snpo: confcache public@gw1.maison.mrs: Eth 00-20-18-2c-0e-e9 --> 2
--snpo: confcache public@gw1.maison.mrs: Eth 00-60-8c-50-f3-3e --> 3
--snpo: confcache public@gw1.maison.mrs: Eth --> 4 (duplicate)
...

Bien. Revenons à notre cas local et finissons par créer le fichier de configuration dans /var/www/html/mrtg/local, nous l'appellerons local.cfg :

[root@pchris2 root]# cfgmaker \
> --global 'WorkDir: /var/www/html/mrtg/local' \
> --global 'Language: french' \
> --global 'Options[_]: bits,growright' \
> --ifdesc=descr public@localhost \
> --output /var/www/html/mrtg/local/local.cfg

--base: Get Device Info on public@localhost:
--base: Vendor Id:
--base: Populating confcache
--snpo: confcache public@localhost: Descr lo --> 1
--snpo: confcache public@localhost: Descr eth0 --> 2
--snpo: confcache public@localhost: Descr eth1 --> 3
--snpo: confcache public@localhost: Ip 127.0.0.1 --> 1
--snpo: confcache public@localhost: Ip 192.168.0.15 --> 2
--snpo: confcache public@localhost: Type 24 --> 1
--snpo: confcache public@localhost: Type 6 --> 2
--snpo: confcache public@localhost: Type 6 --> 3 (duplicate)
--snpo: confcache public@localhost: Eth --> 1
--snpo: confcache public@localhost: Eth 00-05-5d-48-2b-84 --> 2
--snpo: confcache public@localhost: Eth 00-20-af-07-1a-3d --> 3
--base: Get Interface Info
--base: Walking ifIndex
--base: Walking ifType
--base: Walking ifSpeed
--base: Walking ifAdminStatus
--base: Walking ifOperStatus
--base: Writing /var/www/html/mrtg/local/local.cfg

Nous pouvons vérifier que ce fichier existe bien et qu'il ressemble à ce que nous avons vu. Il nous reste au moins une chose à faire, si vous avez suivi, il faut aller modifier la ligne dans la crontab comme suit :

0-59/5 * * * * root /usr/bin/mrtg /var/www/html/mrtg/local/local.cfg

Pour que MRTG s'exécute avec le bon fichier de configuration.

Après avoir attendu au moins 5 minutes (si vous êtes pressé, vous pouvez toujours utiliser la commande mrtg manuellement dans une console), nous trouvons dans le répertoire /var/www/html/mrtg/local :

[root@pchris2 root]# cd /var/www/html/mrtg/local
[root@pchris2 local]# ls -l
total 140
-rw-r--r-- 1 root root  3608 sep 6 20:14 local.cfg
-rw-r--r-- 1 root root  1771 sep 7 09:30 localhost_2-day.png
-rw-r--r-- 1 root root  8907 sep 7 09:30 localhost_2.html
-rw-r--r-- 1 root root 49102 sep 7 09:30 localhost_2.log
-rw-r--r-- 1 root root  1481 sep 7 09:00 localhost_2-month.png
-rw-r--r-- 1 root root 49113 sep 7 09:25 localhost_2.old
-rw-r--r-- 1 root root  1621 sep 7 09:00 localhost_2-week.png
-rw-r--r-- 1 root root  1679 sep 6 20:20 localhost_2-year.png
-rw-r--r-- 1 root root     0 sep 7 09:30 local.ok
-rw-r--r-- 1 root root   538 aoû 11 2002 mrtg-l.png
-rw-r--r-- 1 root root   414 aoû 11 2002 mrtg-m.png
-rw-r--r-- 1 root root  1759 aoû 11 2002 mrtg-r.png

Les trois derniers fichiers sont des icônes qui apparaissent en bas des pages générées par MRTG. Il faut les recopier manuellement depuis le répertoire /var/www/html/mrtg.

Il me suffit d'aller maintenant sur http://pchris2.maison.mrs/mrtg/local/localhost_2.thml pour voir le résultat.

Remarques

Une jolie page d'index pour MRTG

Le script indexmaker est là pour ça.

[root@pchris2 local]# indexmaker /var/www/html/mrtg/local/local.cfg
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>MRTG Index Page</TITLE>
<META HTTP-EQUIV="Refresh" CONTENT="300">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="Sun, 07 Sep 2003 08:06:57 GMT">
</HEAD>

<BODY bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<!-- commandline was: /usr/bin/indexmaker /var/www/html/mrtg/local/local.cfg -->


<H1>MRTG Index Page</H1>

<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10>
<TR>
<TD><DIV><B>eth0 -- pchris2.maison.mrs</B></DIV>
<DIV><A HREF="localhost_2.html">
<IMG BORDER=1 ALT="localhost_2 Traffic Graph" SRC="localhost_2-day.png"></A><BR>
<SMALL><!--#flastmod file="localhost_2.html" --></SMALL></DIV>
</TD></TR>
</TABLE>

<BR>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR>
<TD WIDTH=63><A
HREF="http://www.ee.ethz.ch/~oetiker/webtools/mrtg/"><IMG
BORDER=0 SRC="mrtg-l.png" WIDTH=63 HEIGHT=25 ALT="MRTG"></A></TD>
<TD WIDTH=25><A
HREF="http://www.ee.ethz.ch/~oetiker/webtools/mrtg/"><IMG
BORDER=0 SRC="mrtg-m.png" WIDTH=25 HEIGHT=25 ALT=""></A></TD>
<TD WIDTH=388><A
HREF="http://www.ee.ethz.ch/~oetiker/webtools/mrtg/"><IMG
BORDER=0 SRC="mrtg-r.png" WIDTH=388 HEIGHT=25
ALT="Multi Router Traffic Grapher"></A></TD>
</TR>
</TABLE>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR VALIGN=top>
<TD WIDTH=88 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
version 2.9.21</FONT></TD>
<TD WIDTH=388 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
<A HREF="http://www.ee.ethz.ch/~oetiker/">Tobias Oetiker</A>
<A HREF="mailto:oetiker@ee.ethz.ch">&lt;oetiker@ee.ethz.ch&gt;</A>
and&nbsp;<A HREF="http://www.bungi.com/">Dave&nbsp;Rand</A>&nbsp;
<A HREF="mailto:dlr@bungi.com">&lt;dlr@bungi.com&gt;</A></FONT>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

La documentation installée dans le répertoire mrtg vous éclairera sur les paramètres que l'on peut utiliser pour aménager la présentation.

Voici une solution possible :

[root@pchris2 local]# indexmaker --columns=1 --sort=descr \
> --sidebyside /var/www/html/mrtg/local/local.cfg \
> --output=/var/www/html/mrtg/local/index.html

Ceci va créer dans http://pchris2.maison.mrs/mrtg/local/ une page index.html dont voici la représentation.

Et voilà. nous avons une installation MRTG fonctionnelle, quoique peu utile sur une station de travail.

Nous allons refaire la même chose sur une passerelle entre un LAN et l'Internet. Ce sera tout de même plus intéressant.


Précédente ] [ Accueil ] [ Suivante ]