En este stack cuatro servicios trabajan juntos: Grafana es la interfaz principal, Prometheus almacena y consulta las métricas, Node Exporter expone el estado de la Raspberry Pi o del host y cAdvisor expone las métricas de los contenedores. El flujo es: Node Exporter y cAdvisor → Prometheus → Grafana.
Direcciones de ejemplo
Grafana: 192.168.20.50
Prometheus: 192.168.20.51
Node Exporter: 192.168.20.52
cAdvisor: 192.168.20.53
Son IPs ficticias dentro de la red macvlan de la guía anterior. Reserva estas direcciones fuera del DHCP y cámbialas si tu red usa otro rango.
Orden recomendado de despliegue
Despliega primero Node Exporter y cAdvisor, después Prometheus y por último Grafana. Así, cuando abras Grafana, Prometheus ya tendrá objetivos configurados y podrá mostrar las métricas del host y de los contenedores.
1. Node Exporter (192.168.20.52)
Node Exporter recoge métricas del sistema operativo y del hardware: CPU, memoria, discos, red y carga. No gestiona contenedores; esa función corresponde a cAdvisor. Guarda este Compose en /docker/node-exporter/compose.yaml:
services:
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
command:
- --path.rootfs=/host
volumes:
- /:/host:ro,rslave
ports:
- "9100:9100"
networks:
docker_macvlan:
ipv4_address: 192.168.20.52
networks:
docker_macvlan:
external: true
Arranca con docker compose up -d y comprueba http://192.168.20.52:9100/metrics.
2. cAdvisor (192.168.20.53)
cAdvisor observa el consumo de CPU, memoria, red y disco de los contenedores. Necesita acceso de solo lectura a varias rutas del host. Guarda este Compose en /docker/cadvisor/compose.yaml:
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: unless-stopped
privileged: true
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
ports:
- "8080:8080"
networks:
docker_macvlan:
ipv4_address: 192.168.20.53
networks:
docker_macvlan:
external: true
Arranca con docker compose up -d y revisa http://192.168.20.53:8080. Comprueba la compatibilidad de la imagen con la arquitectura ARM de tu Raspberry Pi y limita la exposición de estos puertos a la VLAN Docker.
3. Prometheus (192.168.20.51)
Prometheus visita periódicamente los endpoints de Node Exporter y cAdvisor, guarda las series temporales y permite consultarlas desde Grafana. Guarda este Compose en /docker/prometheus/compose.yaml:
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./prometheus:/prometheus
networks:
docker_macvlan:
ipv4_address: 192.168.20.51
networks:
docker_macvlan:
external: true
En la misma carpeta crea el archivo prometheus.yml con los objetivos de scraping:
global:
scrape_interval: 15s
scrape_configs:
- job_name: node
static_configs:
- targets: ['192.168.20.52:9100']
- job_name: cadvisor
static_configs:
- targets: ['192.168.20.53:8080']
Comprueba el estado en http://192.168.20.51:9090/targets: los objetivos deben aparecer como UP.
4. Grafana (192.168.20.50)
Grafana presenta paneles, gráficas y alertas. Guarda este Compose en /docker/grafana/compose.yaml:
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
user: "472"
ports:
- "3000:3000"
volumes:
- ./grafana:/var/lib/grafana
networks:
docker_macvlan:
ipv4_address: 192.168.20.50
networks:
docker_macvlan:
external: true
Arranca el servicio con docker compose up -d y entra en http://192.168.20.50:3000. Cambia la contraseña inicial y añade Prometheus como fuente de datos con la URL http://192.168.20.51:9090.
Nota: como el usuario 472 necesita escribir en ./grafana, crea el directorio antes de arrancar y ajusta sus permisos con sudo chown -R 472:472 grafana.