Outils pour utilisateurs

Outils du site


brouillon_rrd

Ceci est une ancienne révision du document !


rrd

rrdtool

Install

# aptitude install rrdtool

Exemple

creer

Quelque part…

$ rrdtool create test.rrd --start 920804400 DS:speed:COUNTER:600:U:U RRA:AVERAGE:0.5:1:24 RRA:AVERAGE:0.5:6:10
test.rrd We created the round robin database called test (test.rrd)
–start 920804400 7th of March, 1999 (this date translates to 920'804'400) ⇒ time(NULL) !
DS:speed:COUNTER:600:U:U Our database holds one data source (DS) named “speed” that represents a counter. This counter is read every five minutes (this is the default therefore you don't have to put –step=300)
RRA:AVERAGE:0.5:1:24 In the same database two round robin archives (RRAs) are kept, one averages the data every time it is read (e.g., there's nothing to average) and keeps 24 samples (24 times 5 minutes is 2 hours)
RRA:AVERAGE:0.5:6:10 The other averages 6 values (half hour) and contains 10 such averages (e.g. 5 hours)
$ ls -lart
-rw-r--r-- 1 thierry thierry 1008 aoû 16 14:51 test.rrd

La data “–start” est facultative ! A defaut, c'est la date actuelle.

DS

Syntaxe: DS:Nom:Type:Heartbeat:Min:Max

DS Data Source
Nom libre choix
Type COUNTER ou GAUGE ou DERIVE ou ABSOLUTE
Heartbeat intervalle de temps au bout duquel une donnée est considérée comme “unknown”
Min valeur minimum. En dessous, la valeur est stockée “unknown”. U ⇒ pas de minimum
Max valeur maximum. (garde-fou) U ⇒ pas de maximum

COUNTER c'est pour des valeurs qui s'incremente dans le temps, comme par exemple:

  1. une distance (compteur de kilometres…)
  2. une quantité (compteur d'octets transmis/recus…)

GAUGE c'est pour des valeurs occilantes dans le temps, comme par exemple:

  1. une temperature
  2. une quantité (nombre de process, mémoire occupé, place disque)

Les autres “type” sont plus rares.

RRA

Pour chaque DS, on créé un certain nombre d'archives RRA.

Syntaxe: RRA:CF:XFF:STEPS:ROWS

CF facteur de consolidation entre plusieurs mesures: AVERAGE, MAX, MIN, LAST (la moyenne, le max, le min ou la dernière mesure)
XFF pourcentage de points acceptables. sinon unknown. “0.5” est souvent l'usage
STEPS ou “pdp_per_rows” (pourcentage de point par rangée). combien de mesure pour faire une donnée
ROWS Nombre de valeurs a garder

remplir

Il parait qu'on rentre des “Kilometres”, mais en fait, “rrd” s'en moque un peu…

Remplissons la base de donnée comme suit:

$ rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
$ rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
$ rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
$ rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
$ rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423

Retrouvons les données:

$ rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200
                          speed

 920804700: nan
 920805000: 4.0000000000e-02
 920805300: 2.0000000000e-02
 920805600: 0.0000000000e+00
 920805900: 0.0000000000e+00
 920806200: 3.3333333333e-02
 920806500: 3.3333333333e-02
 920806800: 3.3333333333e-02
 920807100: 2.0000000000e-02
 920807400: 2.0000000000e-02
 920807700: 2.0000000000e-02
 920808000: 1.3333333333e-02
 920808300: 1.6666666667e-02
 920808600: 6.6666666667e-03
 920808900: 3.3333333333e-03
 920809200: nan
 920809500: nan

Cela est correct:

12357-12345 = 12
12:10 - 12:05 = 5

Attention:

  1. “rrd” ne connait pas les “KM”
  2. l'unité de temps est la seconde !

Donc: 5*60 = 300 secondes

Soit:

(12357-12345) / ( 5*60 ) => 12/300 => 0.040

C'est bien ça:

   920805000: 4.0000000000e-02

graphique

graph "40 m"

Creation de graphique:

$ rrdtool graph speed.png --start 920804400 --end 920808000 DEF:myspeed=test.rrd:speed:AVERAGE LINE2:myspeed#FF0000


Fameux…

Expliquons vite:

–start / –end periode de temps a considerer
DEF:myspeed=test.rrd:speed:AVERAGE definition d'une “variable” “myspeed” en utilisant le “RRA” speed
LINE2:myspeed#FF0000 Tracé avec une epaisseur de “2” (points?) , et en rouge

On peut donc changé la couleur… huhuhu

:!: 40 m signifie “40 milli”
0.040 => 40/1000 => 40 m

Autre forme

$ rrdtool graph speed.png --start 920804400 --end 920808000 --vertical-label m/s DEF:myspeed=test.rrd:speed:AVERAGE CDEF:realspeed=myspeed,1000,\* LINE2:realspeed#FF0000

On a ajouté un “label” vertical, et appliqué un petit calcul dans une nouvelle variable, afin de la tracer.

En ajoutant un label, et multipliant par “1000”, on ne modifie que la présentation, notamment et faisant disparaitre le “m”.

“CDEF” semble signifier une definition par un calcul.

CDEF:realspeed=myspeed,1000,\* The calculations are specified in the CDEF part above and are in Reverse Polish Notation (“RPN”). What we requested RRDtool to do is: “take the data source myspeed and the number 1000; multiply those”

Cela aurait été different si on avait entré comme données des “metres” au lieu de “kilomètres”… mais c'est pour illuster.

Encore

$ rrdtool graph speed.png --start 920804400 --end 920808000 --vertical-label km/s DEF:myspeed=test.rrd:speed:AVERAGE "CDEF:kmh=myspeed,3600,*" CDEF:fast=kmh,100,GT,kmh,0,IF CDEF:good=kmh,100,GT,0,kmh,IF HRULE:100#0000FF:"Maximum allowed" AREA:good#00FF00:"Good speed" AREA:fast#FF0000:"Too fast"


Waouh!

Explications:

CDEF:fast=kmh,100,GT,kmh,0,IF

C'est du polonais ;-)

(((kmh,100)GT),kmh,0)IF

GT ⇒ Greater than

  • ( kmh, 100 ) GT ⇒ kmh > 100 ? Soit: “kmh est-il plus grand que 100 ?” ( GT= greater than)
  • ( x, y, z ) IF ⇒ si “x” alors retourne “y” sinon “z”

Donc:

(((kmh,100)GT),kmh,0)IF

Si “kmh” est plus grand que “100”, alors retourner “kmh” Sinon, si “kmh” est plus petit ou egale a “100”, alors retourner “0”

CDEF:good=kmh,100,GT,0,kmh,IF

C'est l'inverse de la précédente.

Si “kmh” est plus grand que “100”, alors retourner “0”, sinon “kmh” .

C'est simple le polonais ^_^

Encore et encore

$ rrdtool graph speed4.png                          \
    --start 920804400 --end 920808000               \
    --vertical-label km/h                           \
    DEF:myspeed=test.rrd:speed:AVERAGE              \
    "CDEF:kmh=myspeed,3600,*"                       \
    CDEF:fast=kmh,100,GT,100,0,IF                   \
    CDEF:over=kmh,100,GT,kmh,100,-,0,IF             \
    CDEF:good=kmh,100,GT,0,kmh,IF                   \
    HRULE:100#0000FF:"Maximum allowed"              \
    AREA:good#00FF00:"Good speed"                   \
    AREA:fast#550000:"Too fast"                     \
    STACK:over#FF0000:"Over speed"


Mouai …

brouillon_rrd.1218930934.txt.gz · Dernière modification : 2008/08/16 23:55 de thierry