Monitorizando el sistema con Cacti (parte 2): monitorizar la temperatura

En esta entrada vamos a ampliar un poco más los conceptos básicos de Cacti que vimos en la entrada anterior para que podamos ir monitorizando fácilmente cualquier cosa que se pueda obtener mediante un script. No voy a entrar al detalle fino de todos los conceptos porque sé que eso no es lo que queréis: queréis pintar una gráfica con algún valor que os interesa, y lo queréis ya, ¿me equivoco? Pues ahí vamos.

Para Cacti cuando hablamos de una forma de obtener los datos, ya sea SNMP, un script PHP, un comando, o lo que sea, estamos hablando de un Data Input Method. Mediante un Data Input Method podemos obtener uno o varios datos que nos interesará guardar a lo largo del tiempo.

Y ¿dónde se guardan esos datos? En los Data Sources, que son archivos en formato RRD que la utilidad rrdtool puede usar como base de datos para hacer las gráficas.

Y… lo habéis adivinado: la representaciones gráficas de la información almacenada en los Data Sources, y que conseguimos a través de los Data Input Methods, se llaman Graphs.

 Vale, bastante teoría por ahora, vamos con el ejemplo: Queremos monitorizar la temperatura de la CPU de nuestra flamante Odroid U3.

Creando el Data Input Method

El dato que necesitamos sabemos que se puede obtener leyendo el archivo /sys/class/thermal/thermal_zone0/temp del sistema de archivos (en el caso de la Raspberry Pi, el valor lo tenemos en el mismo fichero). Como somos administradores ordenados vamos a crear un repositorio para todos los scripts que hagamos en /etc/JDOMO, y a este primer script lo llamaremos dim_temp.sh:

y su contenido será el siguiente:

Ahora vamos a la consola web de Cacti y creamos el Data Input Method:

Console -> Data Input Methods (add)

Introducimos los datos que nos pide, y hacemos clic en Create:

Console -> Data Input Methods -> (Edit)

Cuando hacemos clic en Create, nos aparecerá una ventana ampliada para que le digamos que parámetros de entrada tiene el script, en nuestro caso ninguno, y qué valores nos devolverá. El script nos devolverá una serie de parejas clave:valor separadas por espacios. En nuestro caso nos devolverá un único par del tipo temp:entero. Es extremadamente importante que NO haya espacios entre el nombre de la clave y el valor, solo el símbolo de dos puntos. Si la salida del script no está formateada como espera Cacti, se producirán errores y no se generarán las gráficas.

Para decirle a Cacti que el script nos devolverá un valor, hacemos clic en Add en Output Fields.

Console -> Data Input Methods -> (Edit) output

Introducimos el nombre de la variable que nos devuelve el script, un nombre descriptivo (yo suelo poner siempre el mismo que arriba), y el check de abajo debe estar marcado para que nos guarde el valor que lea en la base de datos RRD.

Console -> Data Input Methods -> (Edit) -> Data Input Fields

Guardamos la información haciendo clic en Save, y ya tendremos el Data Input Method creado

Console -> Data Input Methods -> (Edit) completado

 

Creando el Data Source

De forma similar al punto anterior, vamos a Data Sources, y hacemos clic en Add:

Console -> Data Sources Add

Los datos que nos pide Cacti para crear el Data Source son: la plantilla base (en este caso ninguna) y el host al que pertenece:

Console -> Data Sources -> (Edit)

Cuando hacemos clic en Create, nos aparece la ventana de datos ampliada en la que deberemos completar la información. En Name suelo poner lo mismo que en el Data Input Method,  y en el Data Source Item, en esta base de datos RRD solo vamos a tener la temperatura del procesador, ponemos temp en Internal Data Source Item:

Console -> Data Sources -> (Edit) ampliada

Al pulsar en Create, nos aparece una ventana aun mas ampliada para añadir más Data Source Items y comprobar que todo está bien. Pulsamos en Save y salimos.

Console -> Data Sources -> (Edit) mas ampliada

Podéis comprobar que el Data Source Path nos lo ha generado automáticamente y que el Output Field está correcto también.

 

Creando la gráfica

Ya casi lo tenemos, nos falta ir a Graph Management, y  hacer clic en Add para crear nuestra nueva gráfica:

Console -> Graph ManagementEn la siguiente pantalla le decimos que la gráfica pertenece al host jdomo (o Localhost si no le habéis cambiado el nombre como hice yo):

Console -> Graph Management -> (Edit)

Ahora nos aparece la ventana de información ampliada, en la que tendremos que especificar el título (Title) y la etiqueta del eje Y (Vertical Label). El resto lo dejamos en los valores por defecto por ahora:

Console -> Graph Management -> (Edit) ampliada

Al pulsar en Create, nos aparece la ventana más ampliada, en la que podemos especificar los Graph Items, o lo que es lo mismo, los valores que queremos que nos pinte. Hacemos clic en Add para añadir la temperatura:

Console -> Graph Management -> (Edit) add graph item

Console -> Graph Management -> (Edit) -> Graph Items

Cuando queremos que nos dibuje un volor como en este caso, se suele usar el Type LINE1 (línea de un píxel de grosor), LINE2, LINE3, o AREA (línea vertical de 0 al valor). Si queremos una línea horizontal en algún valor concreto, usaremos HRULE y en Value le diremos el valor en el que nos pintara la línea. De forma similar tenemos el Type VRULE para líneas verticales.

Además del valor de la variable temp, vamos a pintar una leyenda, con los valores máximo, mínimo y actual de la temperatura. Es tan fácil como añadir tres Graph Items cambiando el Type a GPRINT, la Consolidation Function a MIN, MAX, y LAST respectivamente, y poniendo en el Text Format una Descripción para el valor. El color lo podemos dejar a None. Si marcamos Insert Hard Return, nos hará un salto de línea tras imprimir el valor, y los siguientes los mostrará en otra línea:

Console -> Graph Management -> (Edit) -> Graph Items 2

Con la leyenda ya creada, pulsamos en Save, para guardar la gráfica, y que empiece a dibujarla:

Console -> Graph Management -> (Edit) Save

Ya lo tenemos hecho. Es bastante mecánico, y no tiene mucha dificultad.

NOTA: En la imagen anterior se puede ver que la gráfica ya tiene valores. Esto es debido a que anoche acabé de crear el Data Source y el Data Input Method, y se puso a guardar la información en la base de datos RRD. Por eso hoy cuando le hemos pedido que nos genere la gráfica, ya tenía datos para pintar. Es posible que la gráfica os salga vacía si hay algún error o si no habéis esperado suficiente tiempo y en la base de datos no hay valores suficientes para generarlaa. Tened paciencia (unos 10 o 15 minutos deberían ser suficientes para ver algo en las gráficas).

Comentarios

  1. Por Andu

    Responder

    • Por José María

      Responder

      • Por Andu

        Responder

    • Por José María

      Responder

      • Por Andu

        Responder

        • Por Andu

          Responder

        • Por José María

          Responder

          • Por Andu

  2. Por Jujo

    Responder

    • Por José María

      Responder

  3. Por Jujo

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *