User Tools

Site Tools


informatique:logiciels:mrtg

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
informatique:logiciels:mrtg [2008/09/14 00:18] – créée pteuinformatique:logiciels:mrtg [2013/10/14 20:45] (current) – external edit 127.0.0.1
Line 3: Line 3:
 ======MRTG====== ======MRTG======
  
-Dans cet aide-mémoire nous allons touchotter un peu au **Multi Router Traffic Grapher** (MRTG pour les intimes), un script perl qui génère des graphiques d'utilisation de ressources réseaux à partir de données récupérées par SNMP (il peut aussi tracer d'autres courbes via l'utilisation de scripts). +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). 
-Le format de sortie (les résultatssont au format HTML avec des images PNG.+MRTG est lancé toutes les 5 minutes (par défautet 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.//
  
-=====SNMP===== 
  
-C'est un protocole client serveur qui permet à un client d'interroger un serveur sur l'utilisation de ses ressourcesCela se fait par datagramme UDP sur le port 161Pour récupérer les informations SNMP se base sur une (ou des) MIBs, qui se présentent sous la forme d'un arbre (comme le DNScontenant diverses informationsCes MIBs dépendant du matériel ; il y a une partie standard (pour les interfaces réseau par exempleet une autre propriétaire dans ce dernier cas il faudra installer soi-même la MIB de son matériel.+=====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 graphiqueCette 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===== =====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==== ====Sous winXP====
Line 26: Line 34:
 ====Sous Debian==== ====Sous Debian====
  
-  aptitude install snmpd+<code>aptitude install snmpd</code>
  
  
Line 32: Line 40:
 //sous Debian// //sous Debian//
  
-La première étape est d'installer le paquet :+Le répertoire qui contiend le(s) fichier(s) de configuration est déjà créé par l'installeur ; il s'agit de ''/etc/mrtg''.
  
-  apt-get install 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 : 
 +<code>cfgmaker --ifdesc=descr --output=/etc/mrtg/router.cfg public@router</code>
  
-On va ensuite créer un répertoire qui contiendra le(s) fichier(s) de configuration : +  * 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. 
-  mkdir /etc/mrtg +  * 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.
- +
-Puis on génère le fichier de conf : +
- +
-  cfgmaker --ifdesc=descr --output=/etc/mrtg/server.cfg public@server +
- +
-  * 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 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éseauc'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) : 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+<code>indexmaker --columns=2 --output=/var/www/mrtg/index.html /etc/mrtg/server.cfg</code>
  
 Sous Debian (par défaut) le démon MRTG ne se lance pas, c'est cron qui lance le script toutes les 5 min : 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 +<code>cat /etc/cron.d/mrtg 
-   */5 * * * * root  if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ];\ +  */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+    then env LANG=C /usr/bin/mrtg /etc/mrtg/server.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi 
 +</code>
  
-Pour ressentir le premier effet MRTG il faut soit attendre 5 à 10 min que le script se lance, ou bien le lancer à la main.+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é. Puis on va voir à l'adresse http://server/mrtg/ avec son navigateur préféré.
Line 63: Line 66:
 =====Fichier de conf===== =====Fichier de conf=====
  
-TODO+A titre d'exemple, voici le mien : 
 + 
 +<code> 
 +### 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 <head> 
 +#AddHead[_]: <LINK HREF="../favicon.ico" rel="shortcut icon" /> 
 + 
 +#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]: <h1>eth1 (Wifi) -- odin</h1> 
 +#WithPeak[odin_6]: mw 
 + 
 +### Interface 8 >> Descr: 'vlan1' | Name: '' | Ip: 'x.x.x.x' | Eth: '00-1a-70-xx-xx-xx' ### 
 +#Target[odin_8]: -8:public@odin: 
 +Target[odin_8]: 6:public@odin: 
 +SetEnv[odin_8]: MRTG_INT_IP="x.x.x.x" MRTG_INT_DESCR="vlan1" 
 +MaxBytes[odin_8]: 1250000 
 +Title[odin_8]: vlan1 (Internet) -- odin 
 +PageTop[odin_8]: <h1>vlan1 (Internet) -- odin</h1> 
 +#WithPeak[odin_8]: mw 
 + 
 +### ping google & free : on ping les IPs pour supprimer la latence des DNS 
 +#google 216.239.59.104, 66.249.93.104, 72.14.221.104 
 +#free 212.27.48.10, 212.27.63.123, 212.27.63.146 
 +#Target[ymir.ping]: `ping -i0.5 -w2 72.14.221.104 | tail -n1 | awk -F"/" '{printf("%d\n",$5)}' ;\ 
 + ping -i0.5 -w2 212.27.63.123 | tail -n1 | awk -F"/" '{printf("%d\n",$5)}'
 +Target[ymir.ping]: `ping -c3 -f -w0.5 74.125.77.104 | tail -n1 | awk -F"/" '{printf("%d\n",$5)}' ;\ 
 + ping -c3 -f -w0.5 212.27.63.123 | tail -n1 | awk -F"/" '{printf("%d\n",$5)}'
 +MaxBytes[ymir.ping]: 1000 
 +Options[ymir.ping]: gauge 
 +Title[ymir.ping]: Ping google & free 
 +YLegend[ymir.ping]: Millisecondes 
 +PageTop[ymir.ping]: <H1>Ping google / free - ymir</H1> 
 + 
 +### 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]: <H1>odin system load</H1> 
 + 
 +### 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]: <H1>odin memory use</H1> 
 + 
 +### 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]: <H1>connexions actives sur odin</H1> 
 + 
 +### odin uptime 
 +Target[odin.up]: `snmpget -v1 -c public odin .1.3.6.1.2.1.25.1.1.0 | awk '{if ($6 ~ /day/) print $5; else print 0}';echo 1` 
 +MaxBytes[odin.up]: 900 
 +Options[odin.up]: gauge,noo 
 +YLegend[odin.up]: Jours 
 +Title[odin.up]: uptime odin 
 +PageTop[odin.up]: <H1>Uptime - odin</H1> 
 + 
 +### system load 5/15 min ymir 
 +Target[ymir.sysload]: `uptime | sed s/.*load\ average:\ // | awk '{print $2*100 "\n" $3*100}'
 +MaxBytes[ymir.sysload]: 1000 
 +Options[ymir.sysload]: gauge 
 +YLegend[ymir.sysload]: IO 
 +Title[ymir.sysload]: System load (5, 15) - ymir 
 +PageTop[ymir.sysload]: <H1>System load (5, 15) - ymir</H1> 
 +WithPeak[ymir.sysload]:
 + 
 +### Memory used/total 
 +Target[ymir.mem]: `free -mo | grep Mem: | awk '{print $3"\n"$2}'
 +MaxBytes[ymir.mem]: 1500 
 +Options[ymir.mem]: gauge 
 +YLegend[ymir.mem]: Mo 
 +Title[ymir.mem]: Memoire utilisee/totale -- ymir 
 +PageTop[ymir.mem]: <H1>Memory used/total - ymir</H1> 
 + 
 +### Nombre de processus - ymir 
 +Target[ymir.process]: `ps -ef | wc -l ; echo 1` 
 +MaxBytes[ymir.process]: 500 
 +Options[ymir.process]: gauge,noo 
 +YLegend[ymir.process]: nb processus 
 +Title[ymir.process]: Nombre de processus - ymir 
 +PageTop[ymir.process]: <H1>Nombre de processus - ymir</H1> 
 + 
 +### Nb fichiers ouverts sur ymir 
 +Target[ymir.nbopenfic]: `lsof | wc -l ; echo 1` 
 +MaxBytes[ymir.nbopenfic]: 5000 
 +Options[ymir.nbopenfic]: gauge,noo 
 +YLegend[ymir.nbopenfic]: nb 
 +Title[ymir.nbopenfic]: Nb fichiers ouverts sur ymir 
 +PageTop[ymir.nbopenfic]: <H1>Fichiers ouvert sur ymir</H1> 
 + 
 +### Temp syst/cpu 
 +Target[ymir.cputemp]: `sensors | grep "Sys Temp" | awk '{print $3}' | sed s/,0°C/$1/ | sed s/+// ;\ 
 +  sensors | grep "CPU Temp" | awk '{print $3}' | sed s/,0°C/$1/ | sed s/+//` 
 +MaxBytes[ymir.cputemp]: 90 
 +Options[ymir.cputemp]: gauge 
 +YLegend[ymir.cputemp]: Celcius 
 +Title[ymir.cputemp]: Temp syst/cpu ymir 
 +PageTop[ymir.cputemp]: <H1>Temp syst/cpu - ymir</H1> 
 + 
 +### Temp disque 
 +Target[ymir.hddtemp]: `/usr/sbin/hddtemp -n /dev/sda ; /usr/sbin/hddtemp -n /dev/sdb` 
 +# marche aussi avec sensors: 
 +# sensors | grep "CPU Temp" | awk '{print $3}' | sed s/,0°C/$1/ | sed s/+//` 
 +MaxBytes[ymir.hddtemp]: 90 
 +Options[ymir.hddtemp]: gauge 
 +YLegend[ymir.hddtemp]: Celcius 
 +Title[ymir.hddtemp]: Temp disque sda/sdb ymir 
 +PageTop[ymir.hddtemp]: <H1>Temp disque sda/sdb - ymir</H1> 
 + 
 +### ymir uptime 
 +Target[ymir.up]: `uptime | awk '{if ($4 ~ /day/) print $3; else print 0}';echo 1` 
 +MaxBytes[ymir.up]: 900 
 +Options[ymir.up]: gauge,noo 
 +YLegend[ymir.up]: Jours 
 +Title[ymir.up]: Uptime ymir 
 +PageTop[ymir.up]: <H1>Uptime - ymir</H1> 
 + 
 +### Espace libre : /boot sur ymir (Mo) 
 +Target[ymir.boot]: `/etc/mrtg/mrtg_scripts/espace_libre.sh /dev/sda1 m;echo 1` 
 +MaxBytes[ymir.boot]: 1000 
 +Options[ymir.boot]: gauge,noo 
 +YLegend[ymir.boot]: Mo 
 +Title[ymir.boot]: Espace libre : /boot sur ymir (Mo) 
 +PageTop[ymir.boot]: <H1> Espace libre : /boot sur ymir (Mo)</H1> 
 + 
 +### Espace libre : / sur ymir (Mo) 
 +Target[ymir.root]: `/etc/mrtg/mrtg_scripts/espace_libre.sh /dev/md0 m;echo 1` 
 +MaxBytes[ymir.root]: 5000 
 +Options[ymir.root]: gauge,noo 
 +YLegend[ymir.root]: Mo 
 +Title[ymir.root]: Espace libre : / sur ymir (Mo) 
 +PageTop[ymir.root]: <H1> Espace libre : / sur ymir (Mo) </H1> 
 + 
 +### Espace libre : /mnt/data sur ymir (Go) 
 +Target[ymir.data]: `/etc/mrtg/mrtg_scripts/espace_libre.sh /dev/md1 g;echo 1` 
 +MaxBytes[ymir.data]: 3000 
 +Options[ymir.data]: gauge,noo 
 +YLegend[ymir.data]: Go 
 +Title[ymir.data]: Espace disque libre - ymir (Go) 
 +PageTop[ymir.data]: <H1>Espace disque libre (en Go) - ymir</H1> 
 + 
 +### ymir connexions tcp 
 +Target[ymir.tcp]: `netstat -net | grep tcp | wc -l;netstat -nt | grep tcp | wc -l` 
 +Options[ymir.tcp]: gauge,nopercent 
 +MaxBytes[ymir.tcp]: 500 
 +Title[ymir.tcp]: Connexions TCP established/totales sur ymir 
 +YLegend[ymir.tcp]: nb connex 
 +PageTop[ymir.tcp]: <H1>connexions TCP established/totales sur ymir</H1> 
 + 
 +### ymir nb users sys/ftp 
 +Target[ymir.nbusers]: `users | wc -w ; netstat -net | grep 192.168.x.x:21 | wc -l` 
 +MaxBytes[ymir.nbusers]: 30 
 +WithPeak[ymir.nbusers]: ymw 
 +Options[ymir.nbusers]: gauge 
 +YLegend[ymir.nbusers]: ymir users system/ftp 
 +Title[ymir.nbusers]: Utilisateurs sur ymir 
 +PageTop[ymir.nbusers]: <H1>Nb users system/ftp - ymir</H1> 
 +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]: <H1>Nb d'@ MAC visibles sur odin</H1> 
 +</code> 
 + 
 +====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. 
 + 
 +<code> 
 +# 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]:
 +ThreshMaxO[target.name]: 12345 
 +ThreshMinO[target.name]:
 +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 
 +</code> 
 + 
 +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 : 
 +<code> 
 +#!/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 
 +</code>
  
  
informatique/logiciels/mrtg.1221351504.txt.gz · Last modified: 2013/10/14 20:55 (external edit)