Tutorial 9: Monitorizar tu homelab con Grafana, Prometheus, cAdvisor y Node Exporter

Monitoriza tu homelab con Grafana, Prometheus, Node Exporter y cAdvisor desplegados con Docker Compose en una red macvlan.

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.

Siguiente tutorial: Gestionar actualizaciones y copias de seguridad de contenedores

En el tutorial 10 continuaremos la ruta de Docker y servicios paso a paso.

Pasa al siguiente tutorial →

Deja un comentario

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