RRD Tool

Reference:

Cómo crear una base de datos RRD

rrdtool create meteo.rrd --start=1404406800 --step=900 DS:T:GAUGE:1900:-10:40 DS:P:GAUGE:1900:990:1040 DS:H:GAUGE:1900:0:100 DS:DP:GAUGE:1900:0:20 RRA:MAX:0.5:1:40000

En este ejemplo se crea la base de datos meteo.rrd que cada 15 minutos (–step=900) almacena valores de Temperatura (T), Presión (P), Humedad Relativa (H) y Punto de Rocío (DP).

El parámetro –start=1404406800 determina que la base de datos RRD no va a aceptar datos anteriores a las 14:00 horas del 3 de julio de 2014 (epoch = 1404406800 seconds since 1 jan 1970)

Directiva DS

Una base de datos RRD consiste en un conjunto de campos o valores, y cada uno se declara con la directiva DS. La estructura de los campos de datos que se van a almacenar es esta (usaremos el caso de la Temepratura como ejemplo):

DS:T:GAUGE:1900:-10:40
DS:variable_name:GAUGE:heartbeat:min:max
  • DS: define que se trata de un Data Set
  • T: es el nombre de la variable que se va a almacenar, en este caso T corresponde a temperatura
  • GAUGE: determina que se trata de un valor medido que se quiere almacenar. Las alternativas con COUNTER si es un valor que se acumula. Ver otras alternativas coom DERIVE, ABSOLUTE y COMPUTE en doc de RRD.
  • heartbeat: define el máximo número de segundos entre dos updates antes de que se consideren pardidos los valores correspondientes (es una especie de misterio, pero lo que se suele poner acá es el doble del step o un poco más).
  • min: valor mínimo que se espera leer
  • max: valor máximo que se espera leer

Directiva RRA

La directiva RRA define cómo y cuantos datos se van a almacenar en la base de datos Round Robin. Cuando un dato se ingresa a la base de datos, primero se ingresa en el tiempo (time slot) correspondiente al –step, eso constituye un dato primario. Luego se procesa mediante una función de consolidación (CF) que se declara en la directiva RRA.

Las funciones de consolidación (CF) disponibles son: AVERAGE, MIN, MAX, LAST

RRA:CF:xff:steps:rows

ejemplo:

RRA:MAX:0.5:1:40000
  • xff: ??? misterio, no entendí la documentación, revisar y aclarar. Por ahora usar 0.5, pues el valor de xff debe estar entre 0 y 1
  • steps define cuantos primary data points serán usados para consolidar un dato. En el caso del ejemplo, se usa 1
  • rows: determina cuando datos se van a almacenar en la base de datos. Eso dependerá de la frecuencia de toma de datos y de cuanto tiempo en el pasado se desea disponer de datos. Por ejemplo si se toma un dato cada 15 minutos, esto corresponde a 4 datos por hora, 24*4 datos por día y 24*4*365 datos por año. En el caso del ejemplo se almacenan 40000 datos que corresponde a un poco más de un año.

Cómo graficar los datos

Ejemplo:

rrdtool graph temperatura.png  --end=now --start=1404406800  --width=1024 --height=400 DEF:temp=meteo.rrd:T:LAST  LINE2:temp#FF5522:"Temperatura"

rrdtool graph presion.png  --end=now --start=1404406800  --width=1024 --height=400 -u 1030 -l 990 -r -x HOUR:4:DAY:1:DAY:1:86400:%A -y 10:2  -X 1 DEF:pres=meteo.rrd:P:LAST  LINE2:pres#2255FF:"Presión"