rrdtool

RRDTool

C'est un ensemble d'outils permettant de créer une base en format .rrd et aussi de la gérer, créer des graphes … il est utilisé notamment dans le monitoring (exp: Cacti, Nagios…).

Création d'une base rrd

Une base rrd doit être créée avec Data Source (DS) et au moins une archive rra (Round Robin Archive). Syntaxe:

 rrdtool create base.rrd\
 DS:nom_des_données:type:heartbeat:min:max\
 RRA:Fonction:xff:step:rows

Analysons cette commande:

DS:nom_des_données:type:heartbeat:min:max\

Une base rrd peut accepter plusieurs source de données qu'on peut définir avec DS (Data Source) nom_des_données le nom des données type : il existe plusieurs types:

  • GAUGE: des données comme la température ou une occupation disque par exemple.
  • COUNTER est un compteur incrémental qui n'accepte pas d'enregistrements inférieurs a la dernière valeur entrée. Utile pour mesurer le flot de paquets d'une interface réseau par exemple
  • DERIVE effectue une dérivée par rapport au dernier enregistrement effectué.
  • ABSOLUTE est un compteur particulier puisqu'il empêche les valeurs négatives.
  • COMPUTE est utilisé pour appliquer une formule sur une source de données dans la rrd

heartbeat c'est le délai maximal entre 2 enregistrements avant qu'il prend une valeur Unknown min/max les valeurs qui sont hors cette limite seront marqué comme Unknown (on peut ne pas les préciser en mettant U)

 RRA:CF:xff:step:rows
  • RRA permet de définir une archive.
  • consolidation function les valeurs qui seront mis dans cet archive sont le résultat de cette fonction d'agrégation de données, il en 4: AVERAGE MIN MAX LAST
  • xff (xFile Factor) c'est un paramètre d'interpolation utilisé pour combler les trous lorsqu'on rencontre une valeur de DS a UNKNOWN par contre j'arrive pas à cerner exactement le calcul utilisé, donc j'utilise le paramètre 0.5 sans chercher à trop comprendre. Cette valeurs est comprise entre 0 et 1 exclusive.
  • step c'est le nombre de valeurs prises du DS pour construire une seul valeur dans l'archive.
  • rows c'est le nombre maximal de step qu'on vas conserver dans l'archive

Exemple d'une création d'une base rrd prévue pour conserver des prélevements chaque 5 min pour 1 jour:

 rrdtool create base.rrd\
 DS:traffic_in:COUNTER:600:U:U\
 RRA:AVERAGE:0.5:1:600

pour une journée on a besoin juste de 288 step mais j'ai pris l'exemple du template de cacti qui conserve 600 step= 600x5min = 3000/(60mx24h) = 2 jour

Mettre à jour la base

(!) rrdtool update… Oups en cours… (!)

Exporter une base rrd

Pour pouvoir lire la base dans une autre machine il faut exporter la base au format

 rrdtool dump base.rrd fichier.xml

Restaurer une base en format xml en rrd

Pour manipuler une base rrd en format xml il faut la restaurer

 rrdtool restore fichier.xml base.rrd

Créer un graphe

 rrdtool graph restore.png \
 --imgformat=PNG \
 --start=-86400 \   # rrdtool commance à générer le graphe à partir de cette date (en UTC)
 --end=-300 \       #date de fin de graphe
 --title="Traffic - eth0" \  #titre
 --rigid \
 --base=1000 \
 --height=120 \              #la hauteur du graphe
 --width=500 \               #largeur du graphe
 --alt-autoscale-max \
 --lower-limit=0 \
 --vertical-label="bits per second" \
 --slope-mode \
 --font TITLE:12: \
 --font AXIS:8: \
 --font LEGEND:10: \
 --font UNIT:8: \
 DEF:a="restore.rrd":traffic_in:AVERAGE \    #affecter à la variable a les donnée du trafic entrant nommé traffic_in
 DEF:b="restore.rrd":traffic_out:AVERAGE \   #affectation du 2ième variable
 CDEF:cdefa=a,8,* \
 CDEF:cdefe=b,8,* \
 AREA:cdefa#00CF00FF:"Inbound"  \            #donnée une couleur verte à la variable a (trafic entrant) + 
                                           # coloration de tout la surface
 GPRINT:cdefa:LAST:" Current\:%8.2lf %s"  \   #afficher la dernière valeur
 GPRINT:cdefa:AVERAGE:"Average\:%8.2lf %s"  \
 GPRINT:cdefa:MAX:"Maximum\:%8.2lf %s\n"  \
 LINE1:cdefe#002A97FF:"Outbound"  \           #dessiner juste une ligne pour le trafic sortant
 GPRINT:cdefe:LAST:"Current\:%8.2lf %s"  \
 GPRINT:cdefe:AVERAGE:"Average\:%8.2lf %s"  \
 GPRINT:cdefe:MAX:"Maximum\:%8.2lf %s\n"  \
 HRULE:17272190.27#FF0000FF:"95th Percentile"  \  # :!: à chercher :!:
 COMMENT:"blabla\n"                               #on ajoute un commentaire

calculer le temps universel UTC

Pour connaitre le temps en type UTC (nombre de seconde après 1970) qui correspondant à une date donnée, il faut utilisé la commande date:

 date +%s -d 20100726

Liens

documentation

Haut de page