ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Réseaux, Graphiques avec RRDTool

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...

Author : O.Romain.Jaillet-ramey

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 :

  1. Création de la base de données
  2. Mise à jour de la base de données
  3. 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

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

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é)

Load Average de la journée en flaming
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 :

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(..)