Enchulame el grafiquito !!!

Y seguimos jugando y avanzando con las rrdtool y fuimos mejorando varios aspecto del gráfico y sacándole un poco el jugo a la implementación.




Básicamente el avance fue en dos direcciones, por un lado en los comentarios al pie del gráfico, que nos indica máximo, promedio y valores actuales, y por el otro lado la posibilidad de armar un gráfico con varios datos a la vez, que es lo que vemos arriba.

El comando "rrdtool graph" tiene varios parámetros para la creación de los gráficos. Para poder agregar textos y los datos al final de la pagina usamos dos que son el "COMMENT" para agregar comentarios y textos y que no utilizan datos de la base de datos del rdd, y la opcion "GPRINT" para cuando el comentario o texto queremos que nos imprima algun datos de los gráficos.

De esta forma si, por ejemplo, quisiéramos agregarle la hora a nuestro gráfico, entre los parámetros del "rrdtools graph" deberíamos agregarle algo asi como:

COMMENT:"\n Hora\: `date +%H`\:`date +%M`\:`date +%S` \n"

Con esto le estaremos agregando al pie del gráfico la hora. Ahora si quisieramos generar los textos de las estadisticas al pie del grafico, podriamos agregar algo asi como:

COMMENT:"Entrante : " \
GPRINT:in_eth0_bits:MAX:'%7.2lf %sb/s' \
GPRINT:in_eth0_bits:AVERAGE:"%7.2lf %Sb/s" \
GPRINT:in_eth0_bits:LAST:"%7.2lf %Sb/s \n" \

Con esto estaríamos agregando una linea con con los valores máximos, promedio y ultimo de la variable "in_eth0_bits". Cabe destacar que los máximos y promedios son tomados entre los valores que vamos e imprimir en el gráfico, y no entre los totales de la base de datos del rdd.

Con el "GPRINT" aparecen un par de opciones especiales, por un lado el "%7.2lf" esto no marca la precisión con la que se debe imprimir el valor, en este caso, vamos a tener un numero decimal de 7 caracteres y 2 decimales. La otra opción es la "%s", esto nos va a indicar la unidad de medida en K,M o G según correspondan a kilo, mega y giga segón haya sido necesario modificar el numero por la precisión definida. De esta forma entre el "%7.2lf" y el "%s" vamos a transformar los valor grandes en números mas legibles.


Pero esto no es lo que hace poderoso o lo mas atractivo del uso de las rrdtools. El verdadero potencial esta en poder obtener varios valores e incluso de multiples archivos rrd y poderlos combinar en un solo grafico y hasta con operaciones matematicas de por medio, pudiendo sumarlos, restarlos, etc, para poder obtener un nuevo valor a graficar.

De esta forma solucionamos un problema muy interesante. En una de las redes que administro tengo en mi router de frontera un túnel ip, que es como una vpn pero sin encriptar (por no decir la verdad que es justamente al revés, una vpn es un túnel ip sobre ip que antes de montar los datos ip sobre otro paquete ip primero los encriptamos ).

El tema en cuestión estaba en que originalmente tenia dos gráficos generado por el MRTG por separados, uno para ver el trafico del túnel y otro que me mostraba el trafico total (el saliente a internet y el saliente por el túnel).

Ahora con las RRDtools podemos hacer un solo gráfico con los cuatro valores ( interfase y túnel, entrante y saliente de cada uno) y de esta forma, en un solo gráfico poder ver no solo cuanto sale hacia afuera, sino poder ver cuanto va a internet y cuanto al túnel. Este es el gráfico que se ve un poco mas arriba, aunque justo en ese momento la mayor parte del trafico era por el túnel y muy poco hacia internet. Acá les dejo el comando completo con lo que estoy haciendo ese grafiquito tan chulo.

rrdtool graph salida-day.png \

-s -12h5min -e now -v 'bits/seg' \

-w 500 -h 135 \
DEF:in_eth0=192.168.218.222_2.rrd:ds0:AVERAGE \
DEF:in_tunnel0=192.168.218.222_9.rrd:ds0:AVERAGE \
DEF:out_eth0=192.168.218.222_2.rrd:ds1:AVERAGE \
DEF:out_tunnel0=192.168.218.222_9.rrd:ds1:AVERAGE \
CDEF:in_eth0_bits=in_eth0,8,* \ CDEF:in_tunnel0_bits=in_tunnel0,8,* \
CDEF:out_eth0_bits=out_eth0,-8,* \ CDEF:out_tunnel0_bits=out_tunnel0,-8,* \
COMMENT:" Hora\: `date +%H`\:`date +%M`\:`date +%S` \n" \
COMMENT:" Maximo Promedio Actual \n" \
AREA:in_eth0_bits#00FF00:"Entrante Total" \
GPRINT:in_eth0_bits:MAX:'%4.2lf %sb/s' \
GPRINT:in_eth0_bits:AVERAGE:"%4.2lf %Sb/s" \
GPRINT:in_eth0_bits:LAST:"%4.2lf %Sb/s \n" \
AREA:in_tunnel0_bits#FF0000:"Entrante Uncu" \
GPRINT:in_tunnel0_bits:MAX:'%4.2lf %sb/s' \
GPRINT:in_tunnel0_bits:AVERAGE:"%4.2lf %Sb/s" \
GPRINT:in_tunnel0_bits:LAST:"%4.2lf %Sb/s \n" \
AREA:out_eth0_bits#F000FF:"Saliente Total" \
GPRINT:out_eth0_bits:MAX:'%4.2lf %sb/s' \
GPRINT:out_eth0_bits:AVERAGE:"%4.2lf %Sb/s" \
GPRINT:out_eth0_bits:LAST:"%4.2lf %Sb/s \n" \
AREA:out_tunnel0_bits#0000FF:"Saliente Uncu" \
GPRINT:out_tunnel0_bits:MAX:'%4.2lf %sb/s' \
GPRINT:out_tunnel0_bits:AVERAGE:"%4.2lf %Sb/s" \
GPRINT:out_tunnel0_bits:LAST:"%4.2lf %Sb/s \n"

Algo a destacar es que es muy importante en el orden en que se colocan las sentencias que imprimen los textos y los gráficos. En lo que son los gráficos, si vamos a usar "AREA" debemos imprimir las de valor mas grande primero, ya que al no ser transparentes, vamos a tapar a las de menor tamaño.

Ahora estamos jugando con el demonio de snmp en linux, asique es muy probable que sea nuestro próximo paso a documentar.



2 comentarios:

Andres Felipe Garcia

22 de julio de 2014, 16:49

después de tantos años me han sido muy útiles sus post. Aun administras este blog?

Pablo Vargas

26 de julio de 2014, 14:54

Hola Andres al blog (y en general a eso de escribir tutoriales) lo tengo ya algo abandonado... y aunque mas de una vez he pensado en volver a escribir en el y tengo varios articlos "posibles"... siguen estando en el tintero.

Pero es bueno y lindo saber que hay gente que le sirven mis aportes.

saludos
Pablo