Outils pour utilisateurs

Outils du site


app:rrdtool:exemples:trafic-interface

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 \
  • 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:

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"
app/rrdtool/exemples/trafic-interface.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1