On se propose ici d'historiser les trafics entrant/sortant d'une interface réseau via RRDtool.
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:
#!/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 \
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:
#!/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
La base est régulièrement alimentée, on peut à présent tracer un graphique simple:
#!/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"