{{tag>sysadmin netadmin rrdtool}}
====== 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:
#!/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 \
* La première ligne déclare le nom de la base et spécifie le step de 60 secondes et la date de départ à l'instant présent via la variable $START.
* Les DS, en premier argument le nom suivit du type **COUNTER** de leur hertbeat de 120 secondes, puis la valeur minimale 0 et la maximum n'est pas définie U = Unknown.
* Enfin définition de 2 RRA:
* la première utilisant la CF LAST et un seul DPD (pas de consolidation) enregistrant 1440 CDP toutes les 60 secondes ce qui donne un visibilité sur 1440 * 60 = 86400 secondes équivalent à une journée.
* La secondes utilisant 5 PDP pour former le CDP, ce qui donne 1 CDP toutes les 5 * 60 =300 secondes et enregistrant 2016 CDP. La visibilité est donc de 300 * 2016 = 604800 secondes équivalent a une semaine.
===== 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:
#!/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:
#!/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"