Mise en place de MRTG sous Linux  
 

 

A. Pré-requis
B. Installation de MRTG
C. Configuration
D. Démarrage de mrtg
E. Fonctionnement des fichiers de configurations


A. Pré-requis

Trois libraries doivent être préalablement installées :
zlib : http://www.gzip.org/zlib
libpng : http://www.libpng.org/pub/png/src/
gd : http://www.boutell.com/gd

Télécharger une version de MRTG :
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/
Il faut choisir un fichier avec l'extension .tar.gz
Dans mon cas j'ai choisi la version 2.9.29 qui est pour moi la version stable la plus récente.
Placer ce fichier dans un dossier temporaire.

B. Installation de MRTG

Toutes les opérations sont à effectuer dans une console shell.

Se placer dans le répertoire où se trouve le fichier d'installation.

Entrer :

tar -xvzf mrtg-2.*.tar.gz

où '*' est a remplacé par le numéro de version de MRTG de façon a avoir exactement le même nom que votre fichier.
Cette opération permet de décompresser.

Il faut maintenant compiler les fichiers pour pouvoir ensuite les installer.

il faut d'abord entrer dans le répertoire :

cd mrtg-2.*

puis entrer :

./configure --prefix=/usr/local/mrtg-2

Si des erreurs apparaissent c'est que toutes les librairies nécessaires n'ont pas été bien installées.

Une fois que la compilation est terminée un fichier Makefile est créé qui va permettre d'installer le logiciel.

Il faut donc maintenant rentrer :

make

puis :

make install

Cette dernière opération demande souvent d'avoir les droits 'root' pour être exécuté. Il faut donc utiliser la commande 'su', et entrer le mot de passe root.

L'installation est maintenant finie.

C. Configuration

Un fichier de configuration doit être préalablement créé grâce à la commande cfgmaker qui doit se trouver dans le répertoire : /usr/local/mrtg-2/bin/

On doit fournir quelques arguments :
Le répertoire où les mesures vont être enregistrées.
Le nom du fichier que l'on va créer et qui va prendre l'extension '.cfg'
L'adresse IP ou le nom de la machine que l'on veut monitorer

pour moi ça donne :

/usr/local/mrtg-2/bin/cfgmaker --global 'WorkDir: /home/besa-linux/MRTG-stats' --output /home/besa-linux/MRTG.cfg/test_158.cfg 172.16.1.158

On peut compléter avec de nombreux autres arguments, mais ceux-ci sont obligatoires. Pour avoir plus d'informations vous pouvez aller sur le site de MRTG:

    http://people.ee.ethz.ch/~oetiker/webtools/mrtg/cfgmaker.html

Le fichier test_158.cfg est maintenant créé et peut être utilisé par MRTG pour faire des mesures.

En éditant ce fichier on peut voir la liste des interfaces que contient la machine accompagnée de leur IP et leur adresses MAC mais aussi du numéro de l'interface. Par défaut deux variables de la MIB SNMP sont récupérées pour chaque interface : ifInOctets et ifOutOctets.

Si l'on veut avoir d'autres mesures il va falloir entrer manuellement les lignes de configurations.

Bien sur, il est possible de créer le fichier de configuration entièrement à la main, sans passer pas la commande cfgmaker. Mais celui ci aide pour commencer.

D. Démarrage de mrtg

Pour prendre une mesure il suffit de lancer MRTG en lui donnant pour argument le fichier de configuration:

/usr/local/mrtg-2/bin/mrtg /home/besa-linux/routers-cfg/test_157.cfg

Cette opération a pour conséquence de relever les premières mesures sur la machine choisie et de les stocker dans le répertoire spécifié précédemment.

Dans ce répertoire plusieurs fichiers sont créés :
172.16.1.157_2.log : fichier dans lequel toutes les mesures sont stockées
172.16.1.157_2.html : page web affichant 4 graphiques correspondant aux mesures effectuées (par jour, par semaine, par mois et par ans)

Et 4 images .png correspondant aux 4 graphiques.

Bien sur la première mesure se distingue à peine sur les graphiques.

MRTG est incapable de se lancer régulièrement tout seul. Il faut donc configurer manuellement la configuration du lancement automatique.

Il y a deux solutions pour configurer cela:
Utiliser un démon
Utiliser le planificateur de tache : crond

Je n'ai pour ma part utilisé que le démon dont je vais détailler la configuration.

Il faut tout d'abord insérer n'importe où dans le fichier .cfg (test157.cfg pour moi) la ligne suivante :

RunAsDaemon: Yes

Par défaut l'intervalle de temps entre deux mesures est de 5 minutes. Pour changer manuellement cette valeur il faut rentrer (ici réglé à 2 minutes) :

Interval: 2

Il suffit maintenant de redémarrer MRTG avec le fichier de configuration comme précédemment. MRTG se lance maintenant automatiquement toutes les X minutes que vous avez spécifié.

Il faut également configurer le démarrage de linux pour que MRTG soit lancé automatiquement.
Cette opération est plus délicate puisqu'elle touche directement linux.

Il faut tout d'abord créer un script qui va être lancé au démarrage. Celui ci pour commencer peut ne contenir que la simple ligne de démarrage.

Mais il faut lui rajouter en tête du script ces deux lignes importantes:

# chkconfig: 345 60 30

# description: commentaires sur le script

Explication:

Il faut savoir que linux au démarrage se lance avec un niveau d'exécution compris entre 1 et 5. Sur mandrake ce niveau est de 5 par défaut.
Les numéros 3,4,5 (accolés) après 'chkconfig représentent les niveaux pour lesquels on veut que le service (MRTG) soit lancé.
Le numéro 60 correspond à la priorité de démarrage et 30 à la priorité d'arrêt.

La ligne suivante doit obligatoirement contenir " # description: " puis du texte.

Ce script sera enregistré dans un fichier sans extension, ex : script_mrtg. Il doit être placé dans le répertoire " /etc/init.d " Il faut avoir pour cela les droits 'root '(su).

Ensuite une fois placé dans ce répertoire et toujours avec les droits root tapez :

chkconfig --add script_mrtg

Cette commande va valider le script pour le démarrage. En fait il crée simplement un lien symbolique dans les répertoires rcN.d (0Ce fichier se décompose en 3 parties : le S (Start), le 60 correspondant à la priorité, scrip_mrtg étant un nom quelconque. Et dans les répertoires rc0.d, rc1.d,rc2.d,rc6.d le fichier K30script_mrtg. K étant ici pour Kill.

Voila donc l'essentiel qu'il faut savoir pour installer et lancer MRTG. Ce script pourra être amélioré pour lancer plusieurs mesures en même temps ainsi que la possibilité de lui attacher des arguments comme start ou stop pour pouvoir démarrer et arrêter MRTG manuellement.

Personnellement je fais ce script (script_mrtg) de façon à ne pas avoir à y retoucher même si on devait rajouter des machines à mesurer. Ce script passe en fait par l'intermédiaire de deux autres scripts qui sont run.sh et kill.sh. Ces deux scripts peuvent être placés dans un repertoire quelconque. Ce sont eux qu'il va falloir modifier par la suite. Le script run.sh, comme son nom l'indique, va démarrer autant de fois MRTG qu'il y a de fichier de configuration. Ces différentes sessions vont donc se dérouler en parallèles. Et le script kill.sh va tuer les différents process de MRTG.

Avec les droits 'root' la commande : /etc/init.d script_mrtg start permet de lancer manuellement les différentes mesures, tandis que /etc/init.d script_mrtg stop permettra de les arrêter.

On peut noter que le script kill.sh se base sur les numéros des processus. Donc pour arrêter une analyse de MRTG il suffit de killer son processus. Par ailleurs, MRTG stocke automatiquement ses numéros de processus dans un fichier du même nom que le fichier de configuration. Kill.sh se base bien sur dessus.

E. Fonctionnement des fichiers de configurations

Maintenant que MRTG se lance et tourne en fond tout seul, il va falloir compléter le fichier de configuration, test_157.cfg pour ma part, pour pouvoir recueillir les mesures souhaitées.

Voici un lien où sont décrites toutes les options :

http://people.ee.ethz.ch/~oetiker/webtools/mrtg/config.html

Il faut d'abord savoir que MRTG ne fait pas des graphiques uniquement à partir de mesures récupérées dans les MIB SNMP. Il est capable de recevoir n'importe quelles données. Par exemple on peut faire un script qui exécute un ping et retourne la valeur du ping vers MRTG qui va le stocker.

Il faut donc planifier ce que l'on veut relever pour pouvoir organiser le fichier de configuration efficacement.

Chaque mesure doit avoir au minimum 3 informations qui vont permettre à mrtg de mettre en place une mesure. Ces trois informations sont : Target, MaxBytes et Title et sont organisées de cette façon :

Target[xxx]: N:yyy@IP
MaxBytes[xxx]: m
Title[xxx]: zzz

Explication :
La ligne Target est primordiale. C'est elle qui va décrire l'élément que l'on veut mesurer.
'xxx' est un nom quelconque que l'on donne à notre mesure. Il faut utiliser le même nom pour toutes les lignes lui correspondant. C'est aussi sous ce nom que seront enregistrées les mesures le concernant.
N peut être deux choses :
le numéro d'une interface : ce sera pour cela les valeurs de ifInOctets et ifOutOctets qui seront relevées.
Une OID complète, exemple 1.3.0: l'OID que l'on souhaite.
yyy est la communauté, exemple : public (souvent utilisé)
IP étant l'IP de la machine ciblée ou même son propre nom.
Le @ ne doit pas être oublié entre la communauté et l'IP

La ligne MaxBytes comme son nom l'indique va renseigner la valeur maximale que pourra atteindre notre mesure. Si la valeur relevée est supérieure à MaxBytes, celle ci sera ignorée. Cela évite les erreurs. Pour une interface ethernet sa valeur est de 12500000 -> 100Mb/s. Cela représente une valeur maximale non utilisée pour les graphiques. En effet ceux ci se dimensionnent automatiquement en fonction de la valeur maximale relevée et non de ce paramètre.

Puis la ligne Title qui peut recevoir n'importe quel texte.

A remarquer que chaque paramètre va contenir entre crochet exactement le même nom que celui donné à la ligne Target.

Voici un exemple (réalisé automatiquement lors de la création avec cfgmaker) :

Target[172.16.1.157_2]: 2:public@172.16.1.157:
MaxBytes[172.16.1.157_2]: 12500000
Title[172.16.1.157_2]: Traffic Analysis for 2 - SRV-DNSPRIV

Cet exemple va donc relever les valeurs de ifInOctets et ifOutOctets sur l'interface 2 de la machine qui a l'IP 172.16.1.157.

le '2' peut donc être remplacé par un OID, exemple :

Target[UcastPkts]: .1.3.6.1.2.1.2.2.1.11.2&.1.3.6.1.2.1.2.2.1.12.2:public@172.16.1.157
MaxBytes[UcastPkts]: 2000000
Title[UcastPkts]: UcastPkts

Ici je relève les valeurs des OID qui représentent InUcastPkts et OutUcastPkts.

IMPORTANT :
Le ' & ' est obligatoire. MRTG doit recevoir 2 valeurs. Même si l'on ne veut relever qu'une seule mesure, il va falloir lui définir deux fois la même cible; c'est pareil pour les scripts qui devrons renvoyer deux valeurs (souvent les mêmes).
C'est pour ça que quand on spécifie simplement l'interface, il relève les deux valeurs In et OutOctets.

Si l'on veut maintenant utiliser un script pour faire les mesures il faut remplacer le N:yyy@IP par le lien vers le script :

Target[ping]: `/home/besa-linux/MRTG-cfg/scriptping.sh www.tibco.fr`
Title[ping]: Ping time to www.tibco.fr
MaxBytes[ping]: 1000000

Il faut toujours que ce script renvoie deux valeurs. 'www.tibco.fr' étant ici un paramètre qu'il faut associer au script.

A noter que cette commande de lancement de script est `entre côte`. Ce sont les côtes (Alt Gr - 7) et non l'apostrophe de la touche 4.

Mais on peut également insérer directement la ligne de commande sans passer par un script :

Target[ping]: `t=\`ping -c1 -n www.tibco.fr | /bin/sed --quiet 's/.*= \([0-9]\+\)\..*/\1/p'\`;t=$[$t+0];echo $t;echo $t`
MaxBytes[ping]: 2000000
Title[ping]: ping

N'ayant pas eu le temps d'étayer mes recherches sur les lignes de commande et les scripts, je n'ai pas plus d'information pour cela. La ligne que j'utilise a été recopiée depuis un exemple sur internet. De plus mon travail était principalement de m'attacher à la capture des valeurs des OID.

Un autre point intéressant est la possibilité d'effectuer des opérations entre les valeurs. Par exemple on peut additionner les valeurs de deux interfaces:

Target[Operation]: 1:public@172.16.1.157+2:public@172.16.1.157
MaxBytes[Operation]: 12500000
Title[Operation]: Operation

Bien sur on peut aussi remplacer les interfaces par les OID, mais en faisant toujours attention de bien renvoyer deux valeurs:

Target[Coll-Frag_3com_253]: .1.3.6.1.2.1.16.1.1.1.13.103&.1.3.6.1.2.1.16.1.1.1.13.103:public@ 172.16.253.253+.1.3.6.1.2.1.16.1.1.1.11.103&.1.3.6.1.2.1.16.1.1.1.11.103:public@172.16.253.253
MaxBytes[Coll-Frag_3com_253]: 2000000
Title[Coll-Frag_3com_253]: Coll-Frag_3com_253

Tout cela est détaillé sur internet vers le lien donné précédemment.

Une multitude d'autres options et paramètres peuvent être ajoutées, souvent pour la mise en forme des graphiques. Voici quelques paramètres que je trouve intéressant d'utiliser:

Le premier paramètre très souvent utilisé est Options. Voici les options les plus utilisées:
Growright : permet d'avoir un graphique qui affiche la dernière valeur relevée à droite et repousse donc les anciennes à gauche. Cela permet de mieux lire le graphique en ayant le plus récent à droite et le plus ancien à gauche.
Bits : permet de traduire les valeurs relevées en bits et non en octets.
Gauge : utilise la valeur brut relevée. Les OID étant souvent des compteurs qui s'incrémentent constamment (ex: quantité d'octets rentrant) il faut retrancher la valeur prise à celle relevée précédemment. Gauge permet donc de ne pas retrancher ces valeurs, exemple pour l'utilisation cpu ou ram qui varie mais ne n'incrémente pas.
Nopercent: cette option permet de ne pas afficher un pourcentage sous les graphiques. (je n'ai jamais vu l'utilité de ces pourcentages).

Les autres options sont expliquées sur internet.

Directory : Ce paramètre est très utile pour organiser les mesures. Cela permet de créer un sous répertoire où va être mis toutes les mesures et graphiques. Cela permet de séparer chacune des mesures. Ce sous répertoire sera créé dans le répertoire principal que l'on a spécifié lors de la création du fichier de configuration.

Ces prochains paramètres sont utilisés pour modifier l'affichage des commentaires autour des graphiques.

PageTop: Permet d'écrire un texte en haut de la page internet. Souvent utilisé pour mettre un titre.

Title: Permet d'inscrire un texte dans la barre du navigateur web.

LegendI, LegendO, Legend1, Legend2 : permet de choisir les légende en dessous des graphiques.

Ylegend: Affiche un texte a gauche du graphique

ShortLegend: permet de choisir l'unité affichée dans les légendes.

De nombreux autres paramètres sont généralement utiles pour organiser au mieux les pages internet générées.

Il est possible que certains paramètres ou certaines options soit communs à toutes les mesures. On peut les spécifier pour cela une seule fois.
Il suffit de mettre entre les crochets, à la place d'un nom, le caractère '_' :

exemple :
Options[_]:growright, bits
Cette ligne est d'ailleurs insérée automatiquement dans le fichier de configuration mais avec le # pour ne pas être pris en compte. Il suffit de l'enlever pour que les options soit comptées pour tout.

Pour ces options et toutes les autres je pense qu'il est mieux de s'apercevoir par sois-même ce qu'ils font et quelles sont leurs fonctions.

Voila les informations les plus importantes pour installer et configurer MRTG.
Toutes les informations complémentaires se trouvent sur internet dont voici quelques liens utiles que j'ai utilisés:

Le site officiel de MRTG : http://people.ee.ethz.ch/~oetiker/webtools/mrtg/

Le site de quelqu'un qui a utilisé MRTG et qui livre une copie de son fichier config (pratique pour prendre exemple) : http://ed.zehome.com/?page=mrtg

Ici de même avec des explications supplémentaires :
http://www.int-evry.fr/mci/user/procacci/Doc/monitor-snmp-ldap-rrd.html

L'explication des différents paramètres :
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/config.html

Un lien qui m'a aidé à m'améliorer sous linux: http://lea-linux.org/

Lien vers une doc proposée par shadow : http://www.egs-howto.com/fr/reseaux/admin.php

benton - 11/2003
 

-= From guill.net =-