Table des matières

, ,

Historique du trafic d'une interface avec RRDtool

On se propose ici d'historiser les trafics entrant/sortant d'une interface réseau via RRDtool.

Définition de la RRD

On souhaite créer une base qui sera alimentée au moins toutes les 60 secondes et commencera immédiatement. On identifie 2 DS (Data Source) qui correspondent aux quantités d'octets émis Rx et reçus Rx par l'interface. Si aucune valeur n'est transmise à la RRD pour Rx ou Tx au bout de 120 secondes, la valeur sera considérée inconnue. On souhaite avoir deux historiques, un sur la journée et une second sur la semaine.

Le script ci dessous permet de créer la base:

make_rrd.sh
#!/bin/bash
 
START=$(date +%s)
 
rrdtool create trafic_wlan0.rrd --step 60 --start $START \
        DS:rx:COUNTER:120:0:U \
        DS:tx:COUNTER:120:0:U \
        RRA:LAST:0.5:1:1440 \
        RRA:AVERAGE:0.5:5:2016 \

Alimenter la base

Maintenant que la base est créée, il faut l'alimenter régulièrement, pour cela on utilisera l'outil rrdupdate en séparant les paramètres via le caractère ':'.

$ rrdupdate base.rrd timestamp:rx:tx

Le script suivant met en forme les données et de les transmet à la base via rrdupdate:

update_rrd.sh
#!/bin/bash
 
RRD=/tmp/trafic_wlan0.rrd
 
DATAS=$(grep wlan0 /proc/net/dev | cut -d: -f 2 | awk -v ts=$(date +%s) '{print ts":"$2":"$10}')
 
rrdupdate $RRD $DATAS

Utiliser crontab pour l’exécuter régulièrement (toutes les minutes):

$ crontab -l
...
* * * * * /tmp/update_rrd.sh

Tracer le graphique

La base est régulièrement alimentée, on peut à présent tracer un graphique simple:

make_graph.sh
#!/bin/bash
 
RRD=/tmp/trafic_wlan0.rrd
 
rrdtool graph trafic_wlan0.png -s -1h -t "Trafic wlan0" \
	DEF:Rx=$RRD:rx:AVERAGE \
	DEF:Tx=$RRD:tx:AVERAGE \
	LINE:Rx#ff0000:"Rx\n" \
	LINE:Tx#0000ff:"Tx\n"