LibreNMS – Exportando data a Influxdb para crear gráficos en Grafana.

LibreNMS – Exportando data a Influxdb para crear gráficos en Grafana.

Grafana es un software para crear gráficos con distintas formas y colores, lo interesante es que la data a desplegar se puede manipular de muchas maneras y puede originarse desde diferentes softwares/plataformas.

Esto no es nada nuevo, personalmente vi Grafana hace más de 4 años en un subreddit, quede impresionado e inmediatamente busque como hacer los mismo, el primero intento fue exportando data desde un pfSense para crear un heatmap con los IPs bloqueados por el firewall. Luego de un tiempo se hizo más difícil mantener los equipos enviando información a InfluxDB para graficar en Grafana y decidí detener el proyecto.

LibreNMS soporta exportar a influxDB.

Para mi sorpresa encontré que LibreNMS soportaría exportar data desde su DB en MySQL a una InfluxDB, todo era experimental y en el primero intento nada funciono.

¡En el segundo intento todo funciono a la primera, impresionante!!

Se instaló InfluxDB en el mismo equipo que tiene LibreNMS, también se instaló Grafana. Una vez ambos softwares corriendo correctamente, la configuración de LibreNMS es muy sencilla. Pero primero crearemos la base de datos para LibreNMS en InfluxDB.

CREATE DATABASE librenms
CREATE USER admin WITH PASSWORD ‘admin’ WITH ALL PRIVILEGES
CREATE USER librenms WITH PASSWORD 'admin
GRANT ALL ON librenms TO admin
GRANT READ ON librenms_db TO grafana
exit

Configuración en config.php

$config['influxdb']['enable'] = true;
$config['influxdb']['transport'] = 'http'; # Default, other options: https, udp
$config['influxdb']['host'] = '127.0.0.1';
$config['influxdb']['port'] = '8086';
$config['influxdb']['db'] = 'librenms';
$config['influxdb']['username'] = 'admin';
$config['influxdb']['password'] = 'admin';
$config['influxdb']['timeout'] = 0; # Optional
$config['influxdb']['verifySSL'] = false; # Optional

Si revisamos el documento oficial de como conectar LibreNMS con InfluxDB ( https://docs.librenms.org/#Extensions/metrics/InfluxDB/ ), se puede ver que no se ha cambiado absolutamente nada, ya sé que debería de haber cambiado por lo menos el password, eso será para otra ocasión.

Como validamos que se está exportando data a InfluxDB ¿?

Podemos conectarnos a la InfkuxDB desde la línea de comando y ejecutar un query contra la base de datos de librenms que creamos anteriormente.

$ influx
> use librenms
> show measurements

En pantalla tendremos los nombres de nuestros equipos en LibreNMS con información relacionada a sus NIC, CPU, Espacio en Disco y mucho más, básicamente todo lo que tiene LibreNMS en los gráficos, será exportado a InfluxDB.

¿Pero, si ya tengo graficos en LibreNMS, para que quiero Grafana?

En mi caso, quería crear gráficos personalizados los cuales LibreNMS aún no soporta de una manera tan sencilla como Grafana.

Un ejemplo es relacionado al “app” de ATS-Watts, usando Grafana con la data recibida desde LibreNMS puede crear gráficos que muestren el consumo diario y lo calculen para saber el precio de cada KWh consumido.

En LibreNMS tengo esto:

En Grafana tengo esto:

Otro caso es tener todas las interfaces de equipos de bordes en una misma pantalla, en LibreNMS es muy sencillo hacerlo, pero si decidimos usar Grafana, al momento de compartir esta información es mucho más fácil que con LibreNMS.

El potencial de Grafana es grande, también tenemos la posibilidad de recibir datos desde equipos que no estén en LibreNMS y mezclar esta información en gráficos de la manera que más nos guste.

LibreNMS – Como crear una aplicación para monitorear componentes no soportados.

LibreNMS – Como crear una aplicación para monitorear componentes no soportados.

LibreNMS soporta muchos equipos y dentro de esos equipos existen componentes que también tienen soporte en la plataforma, pero que pasa cuando uno de estos componentes no existe o simplemente el grafico que necesitamos no ha sido creado.

En mi caso todo comenzó cuando agregue un ATS APC el cual tiene soporte SNMP, pero no reporta el consumo en Watts, en realidad tampoco lo reporta en el portal de administración del mismo. Pero si reporta los Amperes consumidos por la regleta en cualquiera de sus líneas de consumo.

Mi primer intento fue usando Collectd, cree un script en Bash que buscaba el OID con el valor de amperes consumidos en el árbol de SNMP y lo calculaba para obtener su equivalente en Watts. Inicialmente todo estaba de maravillas, pero luego el grafico se corrompió y dejo de reportar.

Últimamente eso me ha pasado con varios gráficos que obtenían su información de Collectd, en fin, decidí cambiar de Collectd a otra forma y al parecer la manera oficial en LibreNMS es “desarrollar” una aplicación.

Dentro de LibreNMS existen varias ubicaciones (paths) donde deben existir los componentes de la aplicación, por ejemplo, si se hace un find al nombre de una aplicación existente, se pueden ver cuáles son esas ubicaciones.

En la imagen, realizo una búsqueda del App llamado pi-hole, el autor de esta app describió lo fácil que es crear una aplicación con simplemente copiar pi-hole como base, eso fue lo que hice para resolver el monitoreo de consumo de mi ATS APC.

Nota: en la imagen se puede ver un archivo .rrd, en este caso es el resultado de los valores tomados del host resolver.aanetworks.org que cuenta con pi-Hole y tiene el App habilitado.

ATS-Watts:

Este es el nombre que le he asignado a la nueva “app” que resultó de copiar los archivos usados en la aplicación de pi-hole.

Luego de remover los valores que no necesitaba, en pi-hole se generan alrededor de 12 gráficos. En el caso de ATS-Watts, solo estaré generando uno que es el resultado de un script.

La funcionalidad de este script es colectar la información en SNMP del ATS, este ATS no cuenta con un OID donde muestre el valor en Watts, cuenta con dos valores OID donde la unión con un (.) de estos es el total de Amperes consumidos, luego los multiplica por 110 para tener los Watts.

ats-watts.inc.php:

Este es el primero componente de la aplicación, se puede ver como tomo el OID generado por el script y se asigna a las variables para ser graficadas por rrd.

Para seguir entendiendo como funciona ATS-Watts, se puede ver el resto del código en el repositorio Git que me he montado para jugar un poco y tener mejor control de algunos proyectos que tengo en mente, hello Kubernetes yaml!.

https://git.aanetworks.org/ariel/ATS-Watts

Habilitando la aplicación a un host de LibreNMS:

Una vez terminado de editar los archivos correspondientes, debemos tener la habilita de encender la nueva aplicación en el host que designemos o donde se haya habilitado el script, en mi caso el script de ats-watts.sh se habilito en el mismo servidor de LibreNMS.