RRdtool
De Wikillano
RRDTool funciona con bases de datos circulares "como su nombre indica" estas bbdd crean un archivo con extensión .rrd donde podemos crear varias bbdd las cuales se encargarán de guardar datos, por ejemplo los datos MAX los MIN o los AVERAGE de las 24h o por ej del año.
En este ejemplo que vamos a medir el número de procesos totales. Para ello, tenemos que definir una fuente de datos (DS, data source) y vamos a llevar la media, la máxima y la mínima de los procesos tanto para los datos de las 24 últimas horas, de la última semana, el último mes y el último año.
root@srv1:~# rrdtool create procesos.rrd -s 300 DS:proc:GAUGE:600:0:500 \ RRA:AVERAGE:0.5:1:600 \ RRA:AVERAGE:0.5:6:700 \ RRA:AVERAGE:0.5:24:775 \ RRA:AVERAGE:0.5:288:797 \ RRA:MIN:0.5:1:600 \ RRA:MIN:0.5:6:700 \ RRA:MIN:0.5:24:775 \ RRA:MIN:0.5:288:797 \ RRA:MAX:0.5:1:600 \ RRA:MAX:0.5:6:700 \ RRA:MAX:0.5:24:775 \ RRA:MAX:0.5:288:797
root@srv1:~# rrdtool create procesos.rrd -s 300 DS:proc:GAUGE:600:0:500 \
A continuación definimos las fuentes de datos (DS) para los procesos, indicandole que va a ser de tipo GAUGE , 600 indica el tiempo máximo que puede pasar hasta que consideremos los datos como desconocidos. En este caso hemos puesto 10 minutos. Los siguientes parámetros son valores mínimos y máximos que se pueden registrar, o sea, 0 hasta 500.
Los tipos de bases de datos que podemos tener son : GAUGE (Apropiado para temperaturas), COUNTER(apropiado para un contador), DERIVE (Calcula la derivada de la recta que va desde el último valor hasta el valor actual. Útil para saber la tasa de gente entrando en una habitación, por ejemplo), ABSOLUTE (Para valores absolutos que se ponen a 0 después de cada lectura, por ejemplo el número de mensajes recibidos en los últimos 5 minutos)
Tabla:
Data Source Fields: DS:DS-Name:DST:HeartBeat:Min:Max
- DS
- Defines a Data Source Field.
- DS-Name
- The name of this Data Source.
- DST
- Defines the Data Source Type. Can be GAUGE, COUNTER, DERIVE or ABSOLUTE.
- HeartBeat
- Defines the minimum heartbeat, the maximum number of seconds that can go by before a DS value is considered unknown.
- Min
- The minimum acceptable value. Values less than this number are considered unknown. This is optional. Specify "U" (unknown) to not set a min
- Max
- The maximum acceptable value. Values exceeding this number are considered unknown. This is optional. Specify "U" (unknown) to not set a max
Round Robin Archives: RRA:CF:XFF:Steps:Rows
- RRA
- Defines a Round Robin Archive.
- CF
- Consolidation Function. Can be AVERAGE, MIN, MAX, or LAST.
- XFF
- Defines XFiles Factor, the number of data points that can be anally probed by martians before RRD gives a crap.
- Steps
- Defines how many Primary Data Points (PDPs) are consolidated using the Consolidation Function (CF) to create the stored value.
- Rows
- Defines the number of Rows (records) stored in this RRA.
RRA:AVERAGE:0.5:1:600
- RRA: Round Robin Archive
- CF: AVERAGE, MIN y MAX
- xff:
- steps: indica cuantos de los datos primarios se necesitan para construir un dato consolidado
- rows: indica cuantos datos queremos que se guarden en el archivo
RRA:AVERAGE:0.5:1:600
según la anterior RRA cuanto tiempo voy a guardar los datos? Tengo un dato valido cada 300s y lo guardo 600 veces
1 dato * 300seg * 600 veces = 180000seg / 60 = 3000min / 60 = 50horas 50 horas guardaremos los datos.
RRA:AVERAGE:0.5:6:700
Tengo un dato valido cada 6 que leo, y como los leo cada 300s
6datos * 300seg =1800 seg cada 1800seg tendré un dato valido que meteré en la bbdd y para esta RRA guardaré los datos 700 veces
1800seg * 700 datosg =1260000 seg / 60 = 21000min / 60 = 350horas
RRA:AVERAGE:0.5:24:775
24 * 300 = 7200seg * 775 = 5580000seg / 60 = 93000min/60 =1550horas / 24 =64,5 dias
RRA:AVERAGE:0.5:288:797
288 * 300 = 86400seg * 797datosg = 68860800seg / 60 = 1147680min / 60 = 19128horas / 24 =797 dias
Script de insert a la bbdd
#!/bin/bash PROC=`ps -ef | wc -l` PROC=`expr $PROC "-" 3` /usr/bin/rrdtool update /root/procesos.rrd N:$PROC #echo $PROC >> procesos.txt
Este script lo deberemos ejecutar cada 5 min mediante cron, de este modo añadiremos info cada 5min a la bbdd
Este es el script que genera el gráfico mediante la info de la base de datos.
#!/bin/sh sleep 10 rrd=/root/procesos.rrd last=`rrdtool last $rrd` file1=/var/www/dia.png fecha=`date +"%c %Z"` width=600 height=250
# 1dia /usr/bin/rrdtool graph $file1 --imgformat PNG --start -1day --end $last --width $width --height $height \ --alt-autoscale-max \ --lower-limit=0 \ --vertical-label="Número de Procesos" \ DEF:procesos=$rrd:proc:AVERAGE \ AREA:procesos#4668E4:"Procesos Levantados" \ GPRINT:procesos:MIN:"Minimo\:%4.0lf" \ GPRINT:procesos:MAX:"Maximo\:%4.0lf" \ GPRINT:procesos:LAST:"Ultimo\:%4.0lf"
Esto se ve mas difícil de lo que parece, La Linea DEF define el DataSource DS a usar. LINE y AREA define la manera de representar los graficos, y GPRINT define el texto que queremos en el gráfico.
--vertical-label is an optional string that is printed on the Y axis, typically to denote the metric.
- AREA y LINE1, son las lineas del gráfico, hay tres tipos de linea LINE1, LINE2, LINE3 fina, media, gruesa. AREA pintaría el contenido de la misma. lo que sigue es el color en hexadecimal, si no lo ponemos ¡el gráfico no se verá!, lo último es el nombre de la linea.
- GPRINT nos permite escribir otras cosa en el gráfico, por ejemplo el número de procesos MIN,MAX y LAST, el siguiente parámetro es el texto y por último los valores numéricos, por ej 1.1 lf no daría un número con sóĺo un decimal como 5,2 0,2 1.9 , %2.4 lf sería 34,2165, para redondear podríamos poner %2.0 lf
Lineas CRON
# m h dom mon dow command */5 * * * * /root/procesos.sh */5 * * * * /root/grafico.sh
