Raspberry Grafana

Si piensas instalar una plataforma de monitorización a día de hoy, es imprescindible contar con alguno de los elementos que vamos a describir a continuación (Grafana, InfluxDB y Telegraf). Todavía se siguen utilizando las clásicas herramientas para monitorizar como Zabbix o Nagios, pero cuando se trata de visualizar datos, métricas, recursos, … Grafana es una de las mejores opciones, por su versatilidad y posibilidad de integración con multitud de fuentes de datos, plugins, diseños para mostrar información, …

Antes de empezar, resumir lo que vamos a montar a continuación. Vamos a utilizar una RaspBerry Pi 3B+, que puedes conseguir por menos de 40€ en Amazon, y que es un dispositivo ideal para multitud de usos, entre ellos disponer de un pequeño pero potente servidor donde almacenar y mostrar la monitorización de tus sistemas, líneas de comunicaciones, servicios web, bases de datos o lo que necesites. En esta RaspBerry vamos a instalar lo siguiente:

  • Grafana: Una herramienta que te permite visualizar series de datos temporales de una forma visualmente muy atractiva. Además de la parte visual, dispone de un potente motor y editor de consultas, que te permite seleccionar y tratar los datos que necesitas mostrar en las gráficas y Dashboards que puedes crear en su interfaz web. Además, los datos que muestra se pueden incluir desde diversas fuentes de datos, entre las que se encuentran Graphite, InfluxDB, Prometheus, ElasticSearch, AWS CloudWatch, StackDriver, MySQL y muchos otros mediante los plugins que tiene disponibles.
  • InfluxDB: Es una base de datos diseñada para almacenar series de datos temporales, esto quiere decir, que se almacenan una serie de datos en registros asociados a un valor principal o índice, que es la marca de tiempo (fecha y hora). La monitorización es un caso típico de este almacenamiento de datos, donde se guarda la marca de tiempo, el nombre del host y los valores de métricas que se pretenden almacenar (CPU, memoria, IO, red, …). InfluxDB es software libre, y el rendimiento que definen para este tipo de entornos es muy competitivo.
  • Telegraf: Es un agente que se encarga de recopilar datos/métricas de un determinado sistema y almacenarlos donde le indiquemos. En este caso este agente de Telegraf recopilará datos de sistema tradicionales (uso de memoria, uso de MySQL/Apache, …) y los enviará a la URL con la API de InfluxDB, que se encargará de almacenarlo. Telegraf, al igual que InfluxDB, pertenecen a Influxdata, por lo que la integración entre ambos es perfecta.

Instalación de Telegraf

Hay que tener en cuenta que esta instalación está basada en una Raspberry Pi 3B+, y el sistema operativo (Raspbian) que he instalado está basado en Debian 9 Stretch. Si tu versión de Raspbian/Debian es diferente, tendrás que modificarlo en el segundo comando donde se identifica la versión del repositorio:

Agregar claves PGP del repositorio:

$ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

Añadir el repositorio de InfluxData para integrarlo en el sistema de gestión de paquetes de Debian con APT:

 $ echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

Actualizar los paquetes disponibles e instalar el correspondiente paquete de telegraf:

$ sudo apt-get update
$ sudo apt-get install telegraf

Configuración de Telegraf

Después de tener instalado el agente de Telegraf, tendremos que configurarlo. Toda su configuración se encuentra en el fichero /etc/telegraf/telegraf.conf y ahí tendrás que modificar los siguientes apartados:

Configurar donde almacena la información recopilada por Telegraf:

[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "telegraf"
skip_database_creation = true

Con esto anterior, le indicamos que envíe los datos recogidos a una base de datos InfluxDB, a la dirección IP 127.0.0.1 de localhost al puerto 8086, el estándar de InfluxDB. Además, le indicamos que la base de datos donde almacenar todos los registros se llama telegraf, y le decimos que no cree la base de datos. ¿Porqué? Porque la vamos a crear a mano en el siguiente apartado, luego os explicaré porqué.

Una configuración adicional que vamos a realizar, es que las conexiones entre Telegraf e InfluxDB vayan autenticadas. Esto no se suele hacer, pero es importante si vamos a abrir el puerto del InfluxDB al exterior, para poder almacenar datos de máquinas que no estén en nuestra propia red local, y así evitar que alguien pueda descubrir este puerto y comenzar a leer o ingestar datos en la base de datos. Simplemente tenemos que añadir lo siguiente al mismo apartado anterior ([[outputs.influxdb]]):

## HTTP Basic Auth
username = "telegraf"
password = "ESTAESMICONTRASENA"

Hay otras medidas de seguridad adicionales a tener en cuenta, como el cifrado de la conexión con HTTPS o similar, pero eso lo excluimos de esta guía inicial para configurar Grafana con InfluxDB y Telegraf.

Arrancar servicio Teletraf

Una vez está correctamente configurado el servicio de Telegraf, debemos arrancarlo y habilitarlo para que se arranque solo cuando la máquina se reinicie la próxima vez:

Arrancar el servicio de forma manual:

$ sudo systemctl start telegraf

Habilitar el servicio de telegraf para que arranque automáticamente:

$ sudo systemctl enable telegraf

Instalación de InfluxDB

Como ya hemos configurado el repositorio de paquetes de InfluxData anteriormente para la instalación de Telegraf, ahora ya podemos instalar directamente la última versión de InfluxDB desde los repositorios oficiales simplemente así:

$ sudo apt-get install influxdb

Configuración de InfluxDB

En InfluxDB debemos realizar varias tareas de configuración tras la instalación inicial. Por defecto, InfluxDB levanta varios servicios por defecto en los siguientes puertos:

  • Puerto 8083: portal web de administración (obsoleto):
Interfaz web de administración de InfluxDB
  • Puerto 8086: servicio HTTP con la API de servicio. A este puerto es al que se conectan los clientes para leer o escribir datos en las bases de datos de InfluxDB. Es donde se conectará el Telegraf que hemos configurado anteriormente.
  • Puerto 8088: servicio RPC para backup y restore.

Antes de levantar el servicio, vamos a configurar el acceso con autenticación para el servicio HTTP del puerto 8086, que hemos configurado ya previamente en Telegraf con usuario y contraseña. Para ello, editamos el fichero de configuración de InfluxDB (/etc/influxdb/influxdb.conf) y modificamos el apartado de [http] con lo siguiente:

[http]
enabled = true
bind-address = ":8086"
auth-enabled = true

De esta forma, para conectar al puerto 8086 hará falta credenciales correctas, en caso contrario la conexión sería rechazada.

Después de esto levantamos el servicio:

$ sudo systemctl start influxdb

Y lo habilitamos para que levante automáticamente al arrancar la máquina:

$ sudo systemctl enable influxdb

Después de esto, ya podremos acceder al interfaz de administración y cambiar la contraseña del usuario administrador. Esto nos lo solicitará la primera vez que accedamos a la URL http://X.X.X.X:8083, donde tendrás que intercambiar X.X.X.X por la IP del equipo donde estás haciendo esta instalación.

Después, desde ese mismo interfaz de administración, vamos a crear lo primero la base de datos donde vamos a almacenar los datos que va a recopilar Telegraf:

La versión web de administración ha quedado obsoleta, por lo que necesitarás conectarte mediante línea de comandos para ejecutar los siguientes comandos, es tan sencillo como ejecutar lo siguiente desde tu consola:

pi@raspberrypi:~ $ influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.3
>

Una vez conectado, ya podrás comenzar creando la base de datos donde vamos a almacenar los datos que va a recopilar Telegraf:

CREATE DATABASE telegraf

Después, vamos a crear el usuario que hemos configurado anteriormente en Telegraf para que se conecte al servicio, de esta forma:

CREATE USER "telegraf" WITH PASSWORD 'ESTAESMICONTRASENA'
GRANT ALL ON "telegraf" TO "telegraf"

Después de esto, Telegraf ya debe ser capaz de comenzar a almacenar datos en InfluxDB. Para comprobarlo, puedes ejecutar lo siguiente desde el interfaz web de administración (http://X.X.X.X:8083), seleccionando en la parte superior derecha la base de datos telegraf: En lugar de hacerlo desde el interfaz web, hazlo desde la misma consola seleccionando primero la base de datos Telegraf:

> use telegraf
Using database telegraf
> show measurements
name: measurements
name
apache
cpu
disk
diskio
docker
[...]

Si no te muestra los campos que está registrando Telegraf, prueba a reiniciar el servicio y revisar la configuración realizada hasta ahora:

$ sudo systemctl restart telegraf

También puedes revisar el siguiente fichero de log donde te mostrará eventos y posibles errores tanto del servicio Telegraf como de InfluxDB:

/var/log/daemon.log

Cuando ya tengas esto funcionando, y solo cuanto lo esté, puedes pasar al último apartado para instalar la parte de Grafana, donde podrás visualizar los datos almacenados.

Instalación de Grafana

Finalmente, con los datos que recopila Telegraf y que almacena en InfluxDB vamos a proceder a instalar Grafana, que nos permitirá de una forma muy visual presentar todos estos datos.

Para instalar Grafana en la Raspberry Pi no hay repositorios para añadir a nuestro sistema, pero si tienen preparado el paquete para arquitecturas diferentes. En nuestro caso para la Raspberry Pi 3B+, podemos descargar e instalar el paquete desde la página oficial para la arquitectura ARM.

Siguiendo sus instrucciones oficiales, simplemente hay que descargar el paquete e instalarlo:

wget https://dl.grafana.com/oss/release/grafana_6.1.2_armhf.deb
sudo dpkg -i grafana_6.1.2_armhf.deb 

Lo que te ocurrirá al intentar instalarlo, es que te mostrará que no es posible porque hay dependencias de paquetes que no se han resuelto. Para completar la instalación solo tendrás que instalar esas dependencias, de esta forma:

 $ sudo apt-get --fix-broken install 

Después de esto, ya podrás iniciar el servicio y configurarlo para que arranque automáticamente cuando inicie nuestra Raspberry de nuevo:

$ sudo systemctl enable grafana-server
$ sudo systemctl start grafana-server

Configurar Grafana

Una vez levantado el servicio, se habrá levantado un servicio HTTP de gestión escuchando en el puerto 3000, al que podrás acceder con tu navegador mediante la URL http://X.X.X.X:3000 reemplazando X.X.X.X por la IP de la Raspberry. Cuando entres a este interfaz, te pedirá que cambies la contraseña de administración, es importante este paso para asegurar el acceso a Grafana de forma autenticada.

Después de eso, hay que configurar la fuente de datos donde Grafana leerá los datos que va a representar de forma visual, en nuestro caso será un datasource del InfluxDB configurado anteriormente. Para ello, al entrar en el portal de administración, debes ir al apartado de Configuración, al apartado Data Sources:

Configuración de Data Sources en Grafana

Cuando pulses el botón para añadir un nuevo Data Source, tendrás que rellenar los datos para poder acceder a InfluxDB, de esta forma:

Ejemplo de configuración de Data Source en Grafana

Aquí debes indicar la URL de InfluxDB (http://localhost:8086), habilitar la autenticación y el usuario para acceder. Después de rellenar todos estos datos pulsa el botón de «Test and Save» hasta que valides los datos de conexión. Si te muestra algún error, corrige la parte de configuración que corresponda, porque a menudo nos aparece algún error en esta parte de la configuración si nos hemos equivocado en algo.

Una vez validada la fuente de datos, ya nos queda solamente el último paso, configurar un Dashboard con las gráficas o datos que nos interese mostrar. Para ello, vamos con el último apartado.

Añadir un Dashboard en Grafana

Grafana incluye un editor de consultas muy potente, con el que podremos seleccionar los datos que queremos mostrar, configurar cómo queremos visualizar esos datos, … Pero si nunca te has enfrentado a esta tarea, puede no resultar nada sencillo. Te recomiendo lo siguiente para configurar de forma sencilla un nuevo Dashboard en Grafana.

Grafana tiene disponibles en su web muchos Dashboards de ejemplo, selecciona el que más te guste o el que incluya los datos que quieres representar y copia el ID que aparece en la página con los detalles, por ejemplo:

Ejemplo de Dashboard de Grafana

Ves que en ese ejemplo, el ID de ese Dashboard corresponde con el número 9675. Ahora vete a tu portal de Grafana, pulsa en crear nuevo Dashboard y en la opción de importar introduce el número de ID que has elegido:

Importación de Dashboard en Grafana

Eso te importará esa plantilla de Dashboard, y tendrás directamente tu Dashboard desplegado con los datos que estará leyendo de tu base de datos InfluxDB:

Dashboard de Apache en Grafana

Consideraciones adicionales

Echa un vistazo a la documentación de Telegraf, porque tienes cientos de plugins de entrada de los que puedes obtener y almacenar datos para mostrarlos posteriormente en tu sistema de monitorización. Tienes desde servicios tradicionales como MySQL, PostgreSQL, Apache, nginx, a datos propios de sistema operativo como CPU, memoria, ocupación y uso de disco, inodos, tráfico de red,.. hasta otras cosas más recientes, como servicios Pub/Sub de Google Cloud, Amazon CloudWatch, contenedores Docker, Kubernetes, o una infinidad más de servicios que podrás monitorizar.

Grafana también permite generar alertas y enviar notificaciones en base a los valores recopilados por Telegraf en InfluxDB. Para ello puedes revisar la documentación de alertas de Grafana, donde puedes ver cómo hacerlo junto con algunos ejemplos.

Por Byte

7 comentarios en «Grafana, InfluxDB y Telegraf en una RaspBerry Pi»
  1. Hola Isma, le afecta muy poco, no he notado un aumento significativo de consumo de recursos. Todo dependerá de la cantidad de datos que guardes en la base de datos, y el uso que hagas de Grafana, pero en general para un uso comedido como el mío no he notado nada relevante.

  2. Buenas, estoy intentando instalar Grafana con las indicaciones que das en el artículo pero tengo un problema, a ver si tú supieras qué puede estar pasando.

    Cuando intento acceder a la interfaz web de InfluxDB no consigo conectar. He configurado el archivo influxdb.conf tal como propones y si hago systemctl status influxdb me dice que está activo y funcionando.

    ¿Te ha pasado algo similar o tienes alguna idea de lo que puede estar pasando?

    Un saludo y gracias.

  3. Hola
    En el proceso de instalación de InfluxDB me he encontrado con problemas y después he visto que la última versión de Influxdb ha eliminado la interfaz web: https://docs.influxdata.com/influxdb/v1.4/tools/ supongo que tendremos que hacer los pasos de la interfaz gráfica en línea de comandos, o aplicar chronograf como indica la web de InfluxData ¿no?

    1. Hola Jordi,

      Efectivamente, desde la versión 1.2 de InbluxDB han deshabilitado el interfaz web y recomiendan conectarse mediante la API HTTP o mediante línea de comandos. Lo más sencillo es por línea de comandos, acabo de actualizar el tutorial para reflejar esos cambios.

Responder a Raúl Cancelar la respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.