Implementando RRDTool con MRTG y no morir en el intento

y bueno empecemos... si has leído el primer post sabras que de esto se trata el blog, de ir registrando todo lo que considere que valga la pena...

y lo primero se lo llevan las RRDTools... siempre que he podido he instalado SNMP+MRTG para poder registrar el consumo del trafico y poder ver anomalías en las redes. MRTG es muy útil para poder ver que esta pasando con el trafico de la red (aunque tambien he llegado a consultar la temperatura del micro de los servidores con SNMP y un par de cosas mas), pero es muy útil para ver el estado en ese momento o los registros de las ultimas horas, pero al momento de volver a ver el trafico de red de hace varios dias atras, o incluso unas 10 horas atras, se queda corto.

Y es aca donde las RRDToos entran en juego. Las RRDTools en realidad no remplazan al MRTG, y es mas, al final del documento terminaremos implementando SNMP + MRTG + RRDTools...

Las RRD en realidad es otra forma de guardar la información recolectada por el MRTG (es mas, la D de RRD es de database :) Round Robin Database). Lo que hace las RRD es tomar cada registro que consige el MRTG por SNMP y guardarlo. Después y con otro proceso separado podemos consultar esa base de datos y graficar la porción de tiempo que uno quiera y con la resolucion, tamaño de imagen que uno quiera. El tema es que acostumbrado a lo fácil de implementar que es MRTG y un poco por el cambio de concepto que son las RRDTools es que, en un par de veces lo había intentado pero sin llegar a buen puerto.... pero esta tarde y depués de un par de lecturas y pruebas ya tengo andando RRDTools... y es aca donde nace:

"Implementando RRDTool con MRTG y no morir en el intento"

Vamos a partir de la base que ya tenemos MRTG funcionando, que ya tenemos los HTML del MRTG y hasta un index con el resumen de las interfases principales. Todos los comandos y directorios van a estar dados para ser usados bajo Debian... igual bajos otras distribuciones podrás hacer algo para que funcione.

Cabe destacar y antes de empezar que esta implementación representa un "borrón y cuenta nueva" en lo que respecta a los gráficos. Al cambiar la forma de guardar los datos y de graficar, los gráficos de trafico que ya teníamos no nos sirven y empezaremos a crear gráficos nuevos. Por lo cual te aconsejo que guardes una copia de tus viejos gráficos de trafico.

Lo primero es instalar las RRDTools con nuestro querido comando:

aptitude install rrdtool librrds-perl

El siguiente paso es localizar los archivos de configuración del MRTG. Yo por lo general genero un archivo por cada dispositivo que monitoreo y lo guardo en el /etc/mrtg/cfg y después con un pequeño script de BASH disparo cada una de las consultas a los dispositivos. Es este script de BASH el que coloco en el /etc/crontab para poder programar la tarea.

Una vez instalado las rrdtool el siguiente paso es decirle al MRTG que ahora empiece a usar las rrd. Para ello, en nuestro archivo .cfg en las primeras lineas, luego de definir el el WorkDir, es que agramos las siguientes lineas:

WorkDir: /var/www/mrtg
Options[_]: bits,growright

WriteExpires: Yes

Logformat: rrdtool


Logico que lo importante en realidad es solo la última linea, la del Logformat. De ahora en mas cada vez que ejecutemos el MRTG con este archivo de configuración, se guardaran datos en un archivo con el nombre con que ya nos venia generando los archivos el MRTG, pero ahora con extensión .rrd en el directorio /var/www/mrtg. Con esto ya tenemos la primera parte, guardar los datos.

Al guardar los datos desde MRTG lo que hace es guardar los datos del trafico entrante en un campo llamado ds0 y los datos del trafico saliente en el ds1 dentro del archivo .rrd. Esto es muy importante porque de aca en más, lo que haremos es consultar por estos campos, por ds0 y por ds1, para realizar los gráficos.

Vamos a la segunda parte, a generar los gráficos nuevos. La idea es generar, en primera instancia los graficos con los mismos nombres que usa el MRTG para no perder nuestras paginas HTML "tan chulas" que ya teníamos. Para generar los graficos usamos el comando rrdtool graph y de la siguiente forma:

rrdtool graph 192.168.218.27_1-day.png \
-s -12h -e -5min -v 'Bits por Segundo' \

-w 500 -h 135 \

DEF:in=192.168.218.27_1.rrd:ds0:AVERAGE \

DEF:out=192.168.218.27_1.rrd:ds1:AVERAGE \

CDEF:in_bits=in,8,* \

CDEF:out_bits=out,8,* \

AREA:in_bits#00FF00 \

LINE1:out_bits#0000FF


Donde:
192.168.218.27_1-day.png : sera nuestro archivo de salida
-s -12h : es para que el inicio del gráfico sea 12 horas en el pasado
-e -5min : y el final del gráfico sea 5 minutos en el pasado
-w 500 -h 135 : son las dimensiones de nuestro gráfico

y aca viene lo importante:

DEF:in=192.168.218.27_1.rrd:ds0:AVERAGE
CDEF:in_bits=in,8,* \
AREA:in_bits#00FF00 \


en estas lineas definimos que, del archivo 192.168.218.27_1.rrd tome el campo ds0 y que lo guarde en la "variable" in. Después en la linea del CDEF convertimos de Byts a Bits y guardamos el resultado en una nueva variable (in_bits), en la linea AREA, lo que hacemos es graficar estos datos, pintando de color verde la parte que queda por debajo de la linea.

De esta forma generamos el gráfico del trafico diario. Para generar el resto de los graficos la idea es al misma, pero cambiando la fecha de origen y agregando la opcion -S que indica el paso o escala del dibujo. De esta forma si queremos hacer el grafico de la semana y con el promedio del trafico cada 30 minutos (1800 segundos) el comando seria:

rrdtool graph 192.168.218.27_2-week.png \
-s -168h -e -5min -S 1800 -v 'Byts por segundo
' \
-w 900 -h 200 \

DEF:in=192.168.218.27_2.rrd:ds0:AVERAGE \

DEF:out=192.168.218.27_2.rrd:ds1:AVERAGE \

CDEF:in_byts=in,8,* \

CDEF:out_byts=out,8,* \

AREA:in_byts#00FF00 \

LINE1:out_byts#0000FF



Después de esto nos quedan una sola cosa, que es la automatizar la generación de los gráficos. Acá temamos varias opciones, desde usar las herramientas de rrdtool.cgi, hasta el soporte para rrdtools en php. Por lo pronto, yo he tomado el camino mas simple y rápido. Arme otro script en BASH que me genera todos los gráficos, y a este script lo llamo desde el script del MRTG, de esta forma cada vez que corre el MRTG genero los gráficos.

Posiblemente después incursionaremos en las php-rrdtool y haremos alguna pagina bien bonita para poder consultar por periodos de fechas y demás.... pero por lo pronto fue BASH

Si te intereso esto, puede que te interese este otro post

8 comentarios:

Diego

11 de marzo de 2008, 14:12

Hola que tel me ayudó mucho la manera de cómo creaste las gráficas, muchas gracias.
Soy estudiante de IT y estoy haciendo una práctica con rrdtool pero quisiera saber como es que mandas llamar tu BASH desde CFG que comando usas para mandarlo llamar?

Pablo Vargas

11 de marzo de 2008, 23:15

Hola Diego: para generar los graficos lo hago de la siguiente manera (siempre desde una maquina linux)

en el archivo /etc/crontab tengo la siguiente linea:
############# MRTG #################
0-59/5 * * * * root /etc/mrtg/mrtg.cron > /dev/null 2>/dev/null


eso hace que cada 5 minutos me ejecute el archivo /etc/mrtg/mrtg.cron el cual adentro tiene las siguintes lineas:

export LANG=en_US
dir_cfg=/etc/mrtg/cfg
mrtg=/usr/bin/mrtg

$mrtg $dir_cfg/cisco.cfg

/etc/mrtg/hace.sh


el archivo cisco.cfg es el que me trae los datos, y el scrip /etc/mrtg/hace.sh es el que me genera los graficos, que tiene algo asi como:


#!/bin/bash
cd /var/www/priv/mrtg
for file in `ls *.rrd | awk -F".rrd" '{ print $1 }'`
do
rrdtool graph $file-day.png \
-s -12h5min -e now -v 'bits/seg' \
-w 500 -h 135 \
DEF:in=$file.rrd:ds0:AVERAGE \
DEF:out=$file.rrd:ds1:AVERAGE \
CDEF:in_bits=in,8,* \
CDEF:out_bits=out,8,* \
COMMENT:" Hora\: `date +%H`\:`date +%M`\:`date +%S` \n" \
COMMENT:" Maximo Promedio Actual \n" \
AREA:in_bits#00FF00:"Entrante \t" \
GPRINT:in_bits:MAX:'%7.2lf %Sb/s\t' \
GPRINT:in_bits:AVERAGE:"%7.2lf %Sb/s\t" \
GPRINT:in_bits:LAST:"%7.2lf %Sb/s \n" \
LINE1:out_bits#0000FF:"Saliente\t" \
GPRINT:out_bits:MAX:'%7.2lf %Sb/s\t' \
GPRINT:out_bits:AVERAGE:"%7.2lf %Sb/s\t" \
GPRINT:out_bits:LAST:"%7.2lf %Sb/s \n"

done

zaira

1 de octubre de 2008, 12:52

hola mi nombre es Zaira

He estado realizando algunas pruebas con rrdtools, sin embargo estoy muy verde en esto, lo malo es que debo de entregar un monitoreo de toda la red por medio de esta herramienta, aunque no he entendido si puedo utilizar rrdtools sin mrtg, solo obtener directamente los datos de snmp, y me gustaria saber si conoces alguna pagina donde muestre la configuracion. Otra duda es acerca de la actualizacion ya que las personas que requieren el monitoreo lo quieren en tiempo real y la verdad por lo que he leido no he encontrado si si se puede realizar esto, a excepcion con el ntop.
Bueno en conclusion mis preguntas serian: 1.- ¿Puedo utilizar rrdtools sin mrtg?
2.- Puedo realizar graficas en tiempo real con rrdtools.
Gracias de antemano y espero su respuesta

Pablo Vargas

2 de octubre de 2008, 8:56

Hola Zaira: RRDTools es solo para guardar datos y luego generar las gráficas, por lo que si no usas MRTG deberás usar alguna otra herramienta para capturar los datos.

En mi caso, debido a que yo ya conocía MRTG es que use esa combinación.

Si tienes que monitorear toda una red con varios dispositivos puedes usar Nagios o Cacti

Cacti es muy bueno si solo tienes Switch y Router, y Nagios es la mejor solución si también quieres monitorear Servidores Windows y/o Linux

Aun asi, ninguno lo hace en tiempo real, sino en intervalos de 5 minutos, debido a que de hacerlo en tiempo real y por la red consumirían mucho tiempo de procesador de los dispositivos analizados y generarían mucho trafico de red, por lo que te diría que no vas a encontrar ninguna herramienta de "tiempo real"

Anónimo

29 de abril de 2010, 15:49

Buen dia,
me gustaria saber como puedo realizar una consulta(NO grafico) del promedio y el maximo de datos entre una fecha inicial y final

Pablo Vargas

29 de abril de 2010, 17:47

Hola Leidy: podes usar una librería de perl para poder hacer las consultas directamente al archivo rrd

aca te paso el link de donde podes tener mas informcion al respcto.

http://kobesearch.cpan.org/htdocs/rrdpoller/RRD/Query.pm.html

denninson

10 de mayo de 2010, 13:55

q tal amigo una pregunta yo estoy implementando mrtg ya funcionando en debian, de que me serviria RRDTool, y otra duda teniendo mrtg y quiero monitorear una ip especifica como se puede hacer, espero su respuesta gracias

Antonio

17 de mayo de 2011, 10:40

Saludos, implementé RRDTOOL con un colector desarrollado por mi en perl, y funciona perfectamente pero en las graficas salen unos picos que no son producto del trafico del equipo, en mrtg no salen estos picos tan abruptos, me imagino que es producto del reinicio de los contadores del trafico de los dispositivos monitoreados, me gustaria saber como eliminar dichos picos, para que la grafica se vea perfecta.