{{tag>monitoring réseau graphe}}
======MRTG======
Dans cet aide-mémoire nous allons touchotter un peu au [[http://oss.oetiker.ch/mrtg/|Multi Router Traffic Grapher]] (MRTG pour les intimes), un script perl conçu à l'origine pour tracer les courbes de débit de ressources réseaux à partir de données récupérées par SNMP (mais nous allons voir qu'il peut aussi tracer d'autres courbes que les débits réseau).
MRTG est lancé toutes les 5 minutes (par défaut) et génère des données statiques : des graphiques sous forme d'images PNG statiques, affichées dans une page web (HTML).
//NB : bien sur maintenant la mode est à RRDTool avec des outils comme Cacti, Zabbix, Nagios avec récupération ds perfdata, etc... mais en y regardant de plus près, un simple petit MRTG suffit souvent très largement pour l'utilisation qu'on en fait.//
=====Particularités de MRTG=====
* c'est un outil assez vieux, créé à l'origine pour tracer les débits entrant et sortant des équipements réseau. Il n'est pas conçu pour afficher plus de 2 courbes par graphique. Cette limitation est corrigée par son successeur RRDtool.
* MRTG peut récupérer le trafic d'une interface à partir de son numéro (cf configuration générée par ''cfgmaker''). Il existe 2 autres façons à MRTG pour récupérer des données :
* interroger 2 OIDs (protocole SNMP)
* utiliser un script externe ; ce dernier doit être placer entre ''``'' et retourner sur 2 lignes les 2 valeurs à grapher
* on peut tracer une seule courbe via les options ''noi'' (no input) ou ''noo'' (no output), mais il faut quand même obligatoirement envoyer 2 valeurs à MRTG.
=====Installation de SNMP=====
Le **SNMP** (Simple Network Management Protocol) un protocole client-serveur qui permet à un client d'interroger un serveur sur l'utilisation de ses ressources. Cela se fait par datagramme UDP sur le port 161 (udp/161). Pour récupérer les informations, SNMP se base sur des MIBs, qui se présentent sous la forme d'un arbre (comme le DNS) contenant diverses informations. Certaines MIBs sont standard, d'autre sont propriétaires et dépendant du matériel (il faudra alors les installer sur le client pour lui "apprendre" les OIDs à interroger) ; ces dernière viennent se greffer à l'arbre de référence à un emplacement bien précis.
====Sous winXP====
On se rend dans le panneau de configuration, dans "Ajout/Suppression de programmes", "Ajouter ou supprimer des composants Windows."\\
Puis dans "Outils de gestion et d'analyse" on sélectionne SNMP. On doit insérer le CDROM de Windows pour l'installation.
Une fois le service installé, on doit le configurer : Menu démarrer, puis Exécuter, puis on saisit ''services.msc''. On obtient la liste des services installé, et on va dans les propriétés de "Service SNMP".
Nous n'allons pas utiliser de sécurité concernant les communautés, donc dans l'onglet "Sécurité" on va désélectionner "Envoyer une interruption d'authentification". En revanche nous allons limiter l'accès à notre machine Linux, en spécifiant son IP dans "Accepter les paquets SNMP provenant de ces hôtes".
On valide et on vérifie que le service est bien lancer ; c'est tout pour la partie Windows.
====Sous Debian====
aptitude install snmpd
=====Configuration de MRTG=====
//sous Debian//
Le répertoire qui contiend le(s) fichier(s) de configuration est déjà créé par l'installeur ; il s'agit de ''/etc/mrtg''.
MRTG dispose d'un outil de détection des interfaces réseau : cfgmaker. On lui donne l'IP d'un routeur et sa communauté SNMP, et MRTG génère le fichier de conf automatiquement :
cfgmaker --ifdesc=descr --output=/etc/mrtg/router.cfg public@router
* Il faut vérifier que l'option ''WorkDir'' est correcte. Il s'agit du répertoire de travail qui va contenir les pages HTML et les images des courbes ; c'est généralement un sous-dossier du répertoire du serveur web.
* Par défaut MRTG ne détecte que les interfaces réseau car c'est son but originel. Pour le reste il va falloir éditer le fichier de conf à la main.
On génère ensuite l'index (la page HTML) à partir de notre fichier de conf (le dossier ''/var/www/'' est la racine d'Apache, installé sur la machine) :
indexmaker --columns=2 --output=/var/www/mrtg/index.html /etc/mrtg/server.cfg
Sous Debian (par défaut) le démon MRTG ne se lance pas, c'est cron qui lance le script toutes les 5 min :
cat /etc/cron.d/mrtg
*/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ];\
then env LANG=C /usr/bin/mrtg /etc/mrtg/server.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
Pour ressentir le premier effet MRTG il faut soit attendre 5 à 10 min que le script se lance et qu'il récupère quelques valeur.
Puis on va voir à l'adresse http://server/mrtg/ avec son navigateur préféré.
=====Fichier de conf=====
A titre d'exemple, voici le mien :
### Global Config Options
WorkDir: /var/www-ssl/mrtg
### Global Defaults
# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits
EnableIPv6: no
Language: French
# taille des courbes, en pixels
XSize[_]: 600
YSize[_]: 100
# pngdate affiche la date sur les graphes
Options[_]: pngdate
# par defaut, afficher les max pour les Months et Weeks mais pas Years
WithPeak[_]: mw
# ajouter dans
#AddHead[_]:
#Colours[_]: YELLOW#FFCC33,BLUE#1000ff,RED#CC0000,VIOLET#ff00ff
#Colours[_]: clair#ffd6ad,fonce #ff7575,BLEU #cce8ff,vert #d9ffcc
### Interface 6 >> Descr: 'eth1' | Name: '' | Ip: '' | Eth: '00-1a-70-xx-xx-xx' ###
#Target[odin_6]: 6:public@odin:
Target[odin_6]: 4:public@odin:
SetEnv[odin_6]: MRTG_INT_IP="" MRTG_INT_DESCR="eth1"
MaxBytes[odin_6]: 1250000
Title[odin_6]: eth1 (Wifi) -- odin
PageTop[odin_6]:
### odin system load
Options[odin.system]: gauge,nopercent
Target[odin.system]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@odin
MaxBytes[odin.system]: 500
Title[odin.system]: odin system load
YLegend[odin.system]: System load
Legend1[odin.system]:5min
Legend2[odin.system]:15min
PageTop[odin.system]:
odin system load
### odin memory used
Options[odin.mem]: gauge,nopercent
Target[odin.mem]: .1.3.6.1.2.1.25.2.3.1.6.101&.1.3.6.1.2.1.25.2.3.1.5.101:public@odin
MaxBytes[odin.mem]: 15000
Title[odin.mem]: odin memory use
YLegend[odin.mem]: Memory use
Legend1[odin.mem]: Used
Legend2[odin.mem]: Total
PageTop[odin.mem]:
odin memory use
### odin connexions actives
# marche plus depuis la laj en 2.4sp1
#Options[odin.con]: gauge,nopercent,noo
#Target[odin.con]: .1.3.6.1.4.1.2021.8.1.101.1&.1.3.6.1.4.1.2021.8.1.101.1:public@odin
#MaxBytes[odin.con]: 4100
#Title[odin.con]: connexions actives sur odin
#YLegend[odin.con]: nb connex
#PageTop[odin.con]:
Legend1[ymir.nbusers]: nb system users
Legend2[ymir.nbusers]: nb ftp users
ShortLegend[ymir.nbusers]: nb users
### nb d'adresses MAC détectées sur le réseau (dont une du DSLAM de free)
Target[odin.voisins]: `snmpwalk -v2c -c public odin IP-MIB::ipNetToMediaPhysAddress | wc -l ; echo 1`
MaxBytes[odin.voisins]: 20
Options[odin.voisins]: gauge,noo
YLegend[odin.voisins]: nb clients
Title[odin.voisins]: Nb d'@ MAC visibles sur odin
PageTop[odin.voisins]:
Nb d'@ MAC visibles sur odin
====Seuils d'alerte====
Il est possible d'indiquer à MRTG de lancer un script d'alerte si les valeurs dépassent un seuil min et/ou max ; on peut définir un seuil min et un max pour l'input et 2 autres pour l'output.
# variable globale
#
# dossier accessible en ecriture a MRTG, pour enregistrer l'etat des seuils
ThreshDir: /var/mrtg/thresh
# variables par cible
#
# respect. max input, min input, max output, min output
# ce sont les seuils de declenchement
ThreshMaxI[target.name]: 1234
ThreshMinI[target.name]: 1
ThreshMaxO[target.name]: 12345
ThreshMinO[target.name]: 1
ThreshDesc[target.name]: Description de l'indicateur
# definition des programmes a lancer en cas de depassement des seuils
ThreshProgI[target.name]: /path/to/script_alarm_input.sh
ThreshProgO[target.name]: /path/to/script_alarm_output.sh
# definition des programmes a lancer en cas de retour a l'etat normal
ThreshProgOKI[target.name]: /path/to/scripts/script_ok_input.sh
ThreshProgOKO[target.name]: /path/to/scripts/script_ok_output.sh
Les scripts appelés par MRTG sont lancés avec 3 paramètres, respectivement le nom de la cible (target.name), la valeur du seuil et la valeur actuelle.
Exemple de script minimaliste :
#!/bin/bash
#/path/to/script_alarm_input.sh
echo "`date` - Depassement de seuil sur $1 : valeur actuelle = $3 ; valeur limite = $2" >> /path/to/file.log
=====MIBs=====
Les MIBs utilisées pour l'agent SNMP de Windows XP : http://support.microsoft.com/kb/237295/fr
=====Liens=====
* iReasoning MIB browser : un client graphique permettant d'émettre des requêtes SNMP vers un serveur.
* [[http://oss.oetiker.ch/mrtg/doc/mrtg-reference.en.html|MRTG reference]]
* http://www.xenux.net/?article=15
* http://christian.caleca.free.fr/snmp/install_snmp1.htm
* http://net-snmp.sourceforge.net/wiki/index.php/TUT:snmpwalk
* http://perso.orange.fr/fingers-in/mrtg/index.html