Montar Grafana e InfluxDB en Raspberry Pi es una de las formas más prácticas de conservar meses de historial de sensores en un ordenador pequeño y silencioso que controlas tú. En este tutorial instalarás InfluxDB 2, Telegraf y Grafana en una Raspberry Pi de 64 bits, harás que Telegraf se suscriba a un broker MQTT y construirás un dashboard de Grafana que se actualiza a medida que llegan nuevas lecturas. Todos los comandos y archivos de configuración están completos, así que puedes seguirlo en una Pi recién instalada.
Arquitectura: quién habla con quién
Antes de instalar nada, conviene tener claro el camino de los datos, porque es donde fallan la mayoría de las instalaciones:
- Los sensores (placas ESP32, nodos Pico W, otras Pi) publican JSON en un broker MQTT.
- Telegraf, en la Pi, se conecta a ese broker como un cliente MQTT normal, se suscribe a los topics de los sensores y analiza el JSON.
- Telegraf escribe los campos analizados en un bucket de InfluxDB 2 en la misma Pi.
- Grafana consulta InfluxDB y dibuja los paneles.
El broker en sí no escribe en ninguna base de datos. Solo enruta mensajes. Si quieres repasar ese papel, lee qué hace un broker MQTT. Aquí el broker está en la nube, lo que significa que sensores de otros edificios pueden publicar en él y tu Pi solo necesita una conexión de salida. Sin redirección de puertos ni DNS dinámico.
| Componente | Función | Puerto por defecto en la Pi |
|---|---|---|
| Broker MQTT (nube) | Recibe y enruta los mensajes de los sensores | Ninguno en la Pi |
| Telegraf | Suscriptor MQTT y analizador JSON | Ninguno (solo salida) |
| InfluxDB 2 | Almacenamiento de series temporales | 8086 |
| Grafana | Dashboards e interfaz de alertas | 3000 |
Requisitos
- Raspberry Pi 4 o 5 con al menos 2 GB de RAM. Una Pi 3 puede servir para cargas muy ligeras, pero va justa.
- Raspberry Pi OS de 64 bits (Bookworm). Los paquetes de InfluxDB 2 están compilados para arm64, así que la imagen de 32 bits no sirve.
- Se recomienda encarecidamente un SSD por USB 3. Las bases de datos de series temporales escriben constantemente y las tarjetas SD se desgastan.
- Un sensor que ya publique por MQTT. Si no tienes ninguno, el tutorial de estadísticas del sistema de la Raspberry Pi convierte a la propia Pi en una fuente de datos en cinco minutos.
Confirma primero la arquitectura:
uname -m # should print aarch64
cat /etc/os-release | grep VERSION_CODENAME
Instalar InfluxDB 2 y Telegraf
Ambos vienen del repositorio de paquetes de InfluxData. Añade la clave de firma y el repositorio, e instala:
sudo apt update && sudo apt install -y curl gpg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repos.influxdata.com/influxdata-archive.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/influxdata-archive.gpg
echo "deb [signed-by=/etc/apt/keyrings/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main" \
| sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt update
sudo apt install -y influxdb2 influxdb2-cli telegraf
sudo systemctl enable --now influxdb
Ejecuta la configuración inicial. Crea la organización, el primer bucket y el usuario administrador. Elige un periodo de retención acorde con la capacidad de tu SD o SSD; 90 días es un punto de partida razonable para sensores de habitación.
influx setup \
--org home \
--bucket sensors \
--username admin \
--password 'change-this-long-password' \
--retention 90d \
--force
Ahora crea un token dedicado para Telegraf en lugar de reutilizar el token de administrador. El mínimo privilegio importa incluso en una red doméstica:
influx auth create --org home --read-buckets --write-buckets \
--description "telegraf writer"
Copia el token de la salida. Lo pondrás a continuación en la configuración de Telegraf.
Configurar Telegraf para suscribirse a MQTT
Telegraf incluye un archivo de configuración de ejemplo enorme. Sustitúyelo por uno específico para ver exactamente qué hace. Usa un client ID único y un prefijo de topics único; durante las pruebas, el servidor MQTT público gratuito de broker.connectmq.com funciona sin cuenta.
sudo mv /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.sample
sudo nano /etc/telegraf/telegraf.conf
[agent]
interval = "10s"
flush_interval = "10s"
omit_hostname = true
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.connectmq.com:1883"]
client_id = "telegraf-pi-4b21c9"
topics = ["connectmq/demo/4b21c9/+/climate"]
qos = 1
persistent_session = false
data_format = "json_v2"
[[inputs.mqtt_consumer.topic_parsing]]
topic = "connectmq/demo/4b21c9/+/climate"
tags = "_/_/_/room/_"
[[inputs.mqtt_consumer.json_v2]]
measurement_name = "climate"
[[inputs.mqtt_consumer.json_v2.field]]
path = "t"
rename = "temperature"
type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
path = "rh"
rename = "humidity"
type = "float"
[[outputs.influxdb_v2]]
urls = ["http://127.0.0.1:8086"]
token = "PASTE_THE_TELEGRAF_TOKEN_HERE"
organization = "home"
bucket = "sensors"
El bloque topic_parsing convierte el cuarto nivel del topic en un tag room, de modo que un mensaje en connectmq/demo/4b21c9/kitchen/climate se convierte en un punto con el tag room=kitchen. Los tags están indexados en InfluxDB, lo que acelera las consultas por habitación. Para más opciones del analizador, consulta la guía del consumidor MQTT de Telegraf.
Inicia el servicio y sigue su log. Telegraf muestra allí los errores de conexión y de análisis, lo que es mucho más fácil que adivinar:
sudo systemctl enable --now telegraf
sudo journalctl -u telegraf -f
Publica una lectura de prueba desde cualquier máquina:
mosquitto_pub -h broker.connectmq.com -p 1883 -i tester-4b21c9 -q 1 \
-t connectmq/demo/4b21c9/kitchen/climate \
-m '{"t":21.7,"rh":48.2}'
Después consulta InfluxDB directamente para confirmar que el punto llegó:
influx query --org home \
'from(bucket:"sensors") |> range(start:-10m) |> filter(fn:(r) => r._measurement == "climate")'
Si ves filas con room=kitchen, la mitad de ingesta está lista.
Instalar Grafana en la Raspberry Pi
Grafana publica su propio repositorio arm64:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://apt.grafana.com/gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" \
| sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install -y grafana
sudo systemctl enable --now grafana-server
Abre http://<pi-ip>:3000, inicia sesión con admin / admin y define una nueva contraseña cuando se te pida.
Conectar Grafana a InfluxDB
En Grafana, ve a Connections, Data sources, Add data source, InfluxDB y después:
- Define Query language como Flux.
- URL:
http://localhost:8086. - En InfluxDB Details, define Organization como
home, pega un token (crea uno de solo lectura coninflux auth create --org home --read-bucketspara aplicar el mínimo privilegio) y define Default Bucket comosensors. - Haz clic en Save and test. Deberías ver el número de buckets.
Construir un dashboard con Grafana e InfluxDB en Raspberry Pi
Crea un dashboard nuevo, añade un panel Time series y pega esta consulta Flux:
from(bucket: "sensors")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "climate" and r._field == "temperature")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "temperature")
Grafana dibuja automáticamente una línea por habitación porque room es un tag. Algunas decisiones de dashboard que marcan una diferencia real en una Pi:
- Usa
aggregateWindow. Sin ella, un rango de 30 días trae todos los puntos brutos y la Pi sufre. Con ella, Grafana solo pide tantos puntos como el panel puede mostrar. - Fija el refresco del dashboard en 30 segundos o más. Los refrescos más rápidos sobre todo queman CPU en la Pi para datos que cambian despacio.
- Añade un panel Stat con
last()en lugar demeanpara la temperatura actual de cada habitación. - Usa las alertas de Grafana con moderación. Se evalúan en la Pi, así que mantén un intervalo de evaluación razonable.
Si prefieres prescindir de la base de datos y graficar directamente los valores MQTT en vivo, la guía de la fuente de datos MQTT para Grafana muestra ese enfoque. Es más sencillo, pero no tiene historial.
Pasar el broker a credenciales privadas
El servidor público es legible por cualquiera, así que los sensores de producción deben publicar en un broker privado. Con ConnectMQ, un broker MQTT en la nube que funciona como broker MQTT gestionado, creas un broker en el portal y recibes un usuario, una contraseña y un client ID. Cambia tres cosas en telegraf.conf:
[[inputs.mqtt_consumer]]
servers = ["ssl://broker.connectmq.com:8883"]
client_id = "YOUR_CLIENT_ID"
username = "YOUR_USERNAME"
password = "YOUR_PASSWORD"
topics = ["home/+/climate"]
qos = 1
data_format = "json_v2"
ConnectMQ usa un certificado de Let's Encrypt, así que el paquete de CA del sistema de la Pi lo valida y no hace falta ninguna línea tls_ca. Recuerda que los client IDs están vinculados a las credenciales emitidas: Telegraf y cada sensor necesitan su propio client ID. Actualiza topic_parsing para que coincida con la nueva forma de tus topics.
Surge así un reparto claro de responsabilidades: ConnectMQ se encarga de la conectividad, la autenticación y el enrutamiento de todos los dispositivos, mientras que la Pi se ocupa del almacenamiento y la visualización de los datos que te interesa conservar. ConnectMQ no almacena historial de mensajes más allá de los mensajes retenidos, así que InfluxDB es el lugar adecuado para los datos a largo plazo.
Mantener el stack en buen estado
| Problema | Causa | Solución |
|---|---|---|
El log de Telegraf muestra not authorized |
Credenciales o client ID incorrectos | Vuelve a copiar los tres datos del portal |
| No hay puntos en InfluxDB ni errores | El filtro de topics no coincide | Compara topics con un mosquitto_sub en vivo |
| Llegan puntos pero faltan campos | Ruta json_v2 o tipo incorrectos |
Revisa los nombres de los campos y type |
| Paneles de Grafana lentos en rangos largos | Sin agregación | Añade aggregateWindow |
| Tarjeta SD corrupta al cabo de meses | Escrituras constantes | Mueve los datos de InfluxDB a un SSD |
| El disco se llena | Retención demasiado larga | influx bucket update --retention 30d |
Haz copias de seguridad periódicas tanto de InfluxDB (influx backup /path/to/backup) como de /var/lib/grafana/grafana.db. Perder un dashboard que te costó una tarde ajustar es más molesto que perder una semana de datos de temperatura.
Empieza con ConnectMQ
Apunta tus sensores y Telegraf a un broker privado en minutos: regístrate en app.connectmq.com, elige el plan Serverless gratuito (sin tarjeta de crédito) y copia las credenciales generadas. Para el resto de la serie sobre la Pi, empieza por el tutorial de MQTT con Raspberry Pi, y si prefieres contenedores, consulta la guía de IOTstack en Raspberry Pi.
Preguntas frecuentes
¿Puede InfluxDB suscribirse a MQTT directamente?
No por sí solo en InfluxDB 2 OSS. La entrada mqtt_consumer de Telegraf es el puente estándar, y funciona sin problemas en la misma Pi con un consumo de memoria pequeño.
¿Funciona esto en Raspberry Pi OS de 32 bits?
InfluxDB 2 requiere un sistema operativo de 64 bits, así que usa la imagen arm64. Grafana y Telegraf tienen versiones de 32 bits, pero la base de datos es la pieza limitante.
¿Cuántos datos puede almacenar una Raspberry Pi en InfluxDB?
Depende de cuántas series haya y con qué frecuencia informen, además de tu disco. Unos pocos sensores cada diez segundos son una carga ligera; usa un SSD y una política de retención para que el crecimiento se mantenga acotado.
¿Puede Grafana leer MQTT sin InfluxDB?
Sí, con el plugin de fuente de datos MQTT puede mostrar valores en vivo, pero pierdes el historial y la agregación. Usa InfluxDB cuando necesites tendencias de días o meses.



