Informations :
Dates
- Publish : : Saturdy 02 february 2008
- Modification : Thursday 02 february 2012
- 5827 views
Share :
Cet article est une ébauche à compléter, vous pouvez partager vos connaissances en le modifiant.
Qu'est-ce que RRDTool ?
RRDTool, ou plus exactement Round Robin Database Tool.
Pour la signification exacte de Round Robin, referez vous à la documentation Officielle [1].
RRDTool, c'est une suite d'outils permettant de stocker des données, sous un format ".rrd", de les restaurer, d'afficher un graphique avec ces données...
Que permet de faire RRDTool ?
Conserver des données dans une base rrdtool, pour ensuite en faire un graphique. Par exemple, on peut imaginer l' utilisation classique de ce genre d'outils : on utilise snmp
pour récolter des informations sur une interface réseau (par exemple le nombre de kilobits transférés), pour faire un graphique de débits par seconde.
Mais rrdtool
ne se limite pas à ça!
A partir du moment ou vous avez des données de type entier (int
) ou nombre à virgule (float
), vous pouvez en faire des graphiques. Par exemple, on peut monitorer la température de votre ville, la température de votre processeur, le nombre de voitures passant dans votre rue (grâce a des outils pour utiliser votre webcam en mode "détection de mouvements", avec motion [2] par exemple ;-))
Pourquoi RRDTool, et pas MRTG [3]?
RRDTool et MRTG sont du même auteur : Tobias Oetiker. MRTG permet de faire des graphes, tout comme rrdtool
, mais est très limité, par exemple, MRTG n'est pas capable d'afficher des valeurs négatives, ce que fait sans aucun soucis rrdtool. MRTG est très limité dans la «customisation» des graphes : mis a part changer la taille du graphique, changer la couleur de fond, l'échelle, ça s'arrête la ! RRDTool est lui capable de faire tout ce que vous pouvez imaginer en manipulation graphique, ce que nous allons voire plus loin dans l'article. Dans MRTG, vous êtes obligés d'utiliser l'interface web fournie par MRTG, justement, pas sous RRDTool. MRTG est programmé en perl, et utilise GD pour faire les graphiques, RRDTool est programmé en C, et est nettement plus rapide. Il «stressera» beaucoup moins la machine chargée de faire des statistiques.
MRTG garde un historique de TOUT les enregistrement effectués, contrairement a RRDTool, qui au lieu de garder tout les enregistrements, en fait la moyenne, selon les RRA
définies...
Flaming ??
Le flaming, c'est une technique de tuning, utilisé principalement dans le milieu automobile. Cela consiste a dessiner des flammes sur la carrosserie d'une voiture... Mais alors, quel rapport avec rrdtool
??
Tout bêtement, je trouvais les graphiques sortis par rrdtool
, certes mieux que ceux de mrtg, mais quand même vilains. En naviguant un peu sur le net, j'ai aperçu un graphe, fait avec rrdtool fabuleux : une "flamme" de transfert réseau ! J'ai alors décidé de faire la même chose, et d'expliquer comment faire pour avoir une joli flamme très simplement sur n'importe lequel de vos graphiques rrdtool
.
Un peu de théorie - Comment ça marche ?
L'exploitation de rrdtool
se fait en 3 étapes :
- Création de la base de données
- Mise à jour de la base de données
- Création des graphiques au format .gif ou .png
Création d'une base rrd
Pour créer la base de données, on utilise la commande rrtool create
. Celle-ci est suivis de valeurs comme le temps Unix de la création de la base, des données que nous voulons sauvegarder et d'autres paramètres.
rrdtool create base.rrd [--start|-b start time] [--step|-s step] DS:nom_variable:DST:heartbeat:valeurmin:valeurmax RRA:CF:XFF:steps:rows
DS
: Data Source.
Une ligne de création commence toujours parDS
. On met autant de DS qu'on a de valeurs à acquérir.nom_variable
: C'est le nom de la variable dans la base de donnée.DST
: Data Source Type.
En fonction des données à traiter, on choisiraGAUGE
,COUNTER
,DERIVE
,ABSOLUTE
etc.GAUGE
: les valeurs sont les mêmes que lorsque vous les avez entrer, on constate donc une sorte de vague.COUNTER
: c'est un compteur, il devrait constamment s'incrémenter et RRDtool devrait calculer les différences.DERIVE
: Cela peut être un compteur décroissant. Les valeurs peuvent donc descendre en dessous de 0.ABSOLUTE
: Ce type est analogue au counter. Cependant, aucune différence n'est faite entre les valeurs, vous retrouvez donc exactement les même valeurs que celles que vous avez entrer.
heartbeat
: Si cette valeur est de 100, alors rrdtool considère la valeurnom_variable
comme inconnue si il se passe plus de 100 s entre 2 mises à jour.valeurmin
etvaleursmax
sont les valeurs min et max des données que l'on va acquérir. Si on ne sait pas, on peut mettreU
à la place (=unknown)RRA
: Round Robin Archive.
Ce sont les archives que l'on va conserver. Il faut mettre au moins une ligneRRA
pour chaques lignesDS
.CF
: Consolidation Function.
On peut choisirMIN
,MAX
,AVERAGE
en fonction des données à conserver.XFF
: XFile Factor.
En fait c'est trés souvent0.5
...steps
: Par défautrrdtool
conserve les mesure toutes les 5 min (ce qui correspond au paramètre-s 300
). C'est donc un multiple de 300. Si on spécifie le paramètre?s 60
lors de la création de la base, l'intervalle sera alors de une mesure conservée toutes les minutes.rows
: Défini le nombre de mesures (steps * 300
) que l'on conserve.
Le temps de conservation d'une donnée est égal à :
> historique (sec) = steps
* (parametre -s
) * rows
Bon ok ce n'est pas clair, voiçi donc des exemples pour éclaicir :
On prend comme hypothèse que la valeur de steps est celle par défaut -s 300
( = 5 min). La valeur de XFF
ne change pas, elle sera toujours égale à "0.5".
Pour garder un historique de 2 jours : RRA:AVERAGE:0.5:1:576
>historique = 1 * 300 * 576
>= 172 800 secondes
>= 2 jours.
Pour garder un historique de 7 jours : RRA:AVERAGE:0.5:6:336
>historique = 6 * 300 * 336
>= 604 800 secondes
>= 7 jours.
Pour garder un historique de 31 jours : RRA:AVERAGE:0.5:72:144
>historique = 72 * 300 * 144
>= 2 678 400 secondes
>= 31 jours.
Pour garder un historique de 366 jours : RRA:AVERAGE:0.5:144:732
>historique = 144 * 300 * 732
>= 31 622 400 secondes
>= 366 jours.
Pour obtenir des courbes plus ou moins précises, il faudra jouer sur la valeur de steps
et/ou la valeur du paramètre -s
. Plus on voudra obtenir une courbe jolie et précise, plus steps
devra être élevé mais plus la taille de la base de donnée rrd gonflera.
Ainsi pour garder des données et tracer une courbe hebdomadaire, il vaut mieux utiliser : RRA:AVERAGE:0.5:6:336
que RRA:AVERAGE:0.5:12:168
Mise à jour d'une base rrd
Pour alimenter la base de données, on utilise la commande rrtool update
. Les données mises en argument sont issues d'une capture de données soit par snmp
, soit par un autre moyen qui dépendra de la valeur à surveiller. On doit respecter l'ordre dans lequel les éléments ont été placés lors de sa création. Pour que les résultats aient un sens, il faut acquérir les valeurs et les mettre dans la base à intervalles réguliers. La plupart du temps on fera un script que l'on mettra dans un crontab
.
Il faut également inclure le moment auquel on relève les données. Pour cela, rrdtool utilise le temps "unix", c'est à dire le nombre de secondes qui se sont écoulées depuis le 1° janvier 1970 à 00h00. On obtient cela grâce à la commande date +%s
.
Si on a une base base.rrd
qui contient 2 valeurs, on l'alimentera avec la commande :
rrdtool update base.rrd temps_unix:valeur1:valeur2
Créer le graph d'une base rrd
Pour créer un graphique rrd, on utilise la commande rrdtool graph
, suivi de paramètres comme le nom de l'image, le format de celle-ci ainsi que les données pour créer le graphique.
rrdtool graph image.png --imgformat PNG --start 1051481100 --end 1051485300 DEF:moyenne=laMoyenne.rrd:moyenne:AVERAGE LINE2:moyenne#FF0000
LINE
: représente une Ligne d'un pixel (LINE2
= de 2 pixels)AREA
: représente un bloc.STACK
: représente un bloc, sauf qu'au lieu de commencer à 0, elle commencera à la dernière valeur maximale de la dernièreAREA
, ouLINE
. Donc, la place d'uneSTACK
est importante.
Vous avez la possibilitée avec rrdtool
de modifier pas mal de paramètres sur les graphiques, comme dit plus haut dans l'article. Parmis ces paramètres, on notera :
--vertical-label "texte"
--title "titre du graph"
--width x (ou x est en pixels)
--height x (ou x est en pixels)
--color X#xxxxxx (ou X est l'objet à colorer a voir dans la doc officielle pour le détail)
exemple :
--color CANVAS#000000
--color BACK#101010
--color FONT#C0C0C0
--color MGRID#80C080
--color GRID#808020
--color FRAME#808080
--color ARROW#FFFFFF
--color SHADEA#404040
--color SHADEB#404040
Le flaming (graph en dégradé)
La technique du flaming est simple, puisqu?il s?agit d?associer à une couleur du dégradé un pourcentage donné de la valeur à représenter. L?auteur du site graphe une zone représentant 40% de la valeur, puis 12 zones représentant 5% : 40 + (12 x 5) = 40 + 60 = 100%. Pour ma part, je privilégie une transition plus douce en réalisant 16 zones de 6,25%. Oui, je sais, ca fait moins rond, mais quand on graphe des couleurs en RGB, ca a son interêt.
A supposer que nous graphions du jaune (RGB:FFFF00) vers le rouge (RGB:FF0000), il suffit donc de faire 16 paliers :
- FFFF00 (jaune)
- FFEE00
- FFDD00
- ...
- FF1100
- FF0000 (rouge)
En adaptant cela à RRDTool, on réalisera donc 16 zones (AREA) superposées (STACK) :
DEF:maValeur="monFichier.rrd":laValeur:AVERAGE
CDEF:pourcent=maValeur,6.25,*,100,/
AREA:pourcent#FFFF00:"Int"
STACK:pourcent#FFEE00
STACK:pourcent#FFDD00
STACK:pourcent#FFCC00
STACK:pourcent#FFBB00
STACK:pourcent#FFAA00
STACK:pourcent#FF9900
STACK:pourcent#FF8800
STACK:pourcent#FF7700
STACK:pourcent#FF6600
STACK:pourcent#FF5500
STACK:pourcent#FF4400
STACK:pourcent#FF3300
STACK:pourcent#FF2200
STACK:pourcent#FF1100
STACK:pourcent#FF0000
Références
[1] http://ee-staff.ethz.ch/~oetik(..)
[2] http://motion.sourceforge.net/
[3] http://people.ee.ethz.ch/~oeti(..)
[4] http://people.ee.ethz.ch/~oeti(..)
[5] http://people.ee.ethz.ch/~oeti(..)
[6] http://ed.zehome.com/?page=rrd(..)
[7] http://www.jiache.org/index.ph(..)