Saltar al contenido

Monitorizar contenedores Docker con cAdvisor y Prometheus

6 min de lectura Infraestructura
  • cadvisor
  • prometheus
  • docker
  • monitorización
  • métricas
  • infraestructura

Monitorizar los contenedores Docker es clave para entender el rendimiento de tus aplicaciones y la salud de tu servidor. Sin visibilidad sobre el consumo de recursos, estás a ciegas ante posibles cuellos de botella o fugas de memoria. Una combinación para obtener métricas detalladas es usar cAdvisor para recolectar datos y Prometheus para almacenarlos y consultarlos.

Este stack te permite ir más allá de un simple docker stats y tener un historial completo del comportamiento de tus servicios. Mi regla es no desplegar nada en producción sin una capa de monitorización que me dé datos reales.

Importancia de la monitorización activa de contenedores Docker

Esperar a que un cliente reporte un problema es siempre la peor estrategia. Si no estás monitorizando, no sabes si tu aplicación está consumiendo más RAM de lo normal, si un contenedor está haciendo un uso excesivo de CPU o si el disco se está llenando a causa de logs descontrolados. Un sistema de monitorización te avisa de estas anomalías antes de que escalen.

La monitorización activa te permite reaccionar de forma proactiva y no solo reactiva. Cuando un cliente me llega con problemas de rendimiento, lo primero que pregunto es cómo está monitorizando su infraestructura. Sin datos históricos, es imposible diagnosticar.

cAdvisor: el recolector de métricas de tus contenedores

cAdvisor (Container Advisor) es un agente de código abierto que se ejecuta en el host y recolecta información de rendimiento y uso de recursos de todos los contenedores Docker en esa máquina. Ofrece métricas de CPU, memoria, red y E/S de disco por cada contenedor. Es la pieza fundamental para obtener datos granulares.

Para desplegar cAdvisor en tu servidor, puedes usar Docker Compose. Asegúrate de montarlo como un servicio más en tu docker-compose.yml, dándole acceso al socket de Docker y a las rutas de sistema necesarias para recolectar las métricas:

version: '3.8'
services:
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    restart: unless-stopped
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    ports:
      - "8080:8080" # Puedes cambiar este puerto si es necesario
    command: -port=8080

Con esta configuración, cAdvisor estará accesible en el puerto 8080 de tu servidor, listo para ser “raspado” (scraped) por Prometheus. Si estás empezando con estas configuraciones, te recomiendo repasar mi guía de Docker Compose para principiantes para entender bien cada sección.

Prometheus: almacenamiento y alertas de métricas de contenedores

Prometheus es una base de datos de series temporales, diseñada para el monitoreo y las alertas. No solo almacena las métricas que cAdvisor recolecta, sino que te permite consultarlas usando su lenguaje de consulta PromQL y definir reglas de alerta. Es el centro de operaciones de tu monitorización.

Para que Prometheus recoja datos de cAdvisor, necesitas configurar un “job de scrape”. Aquí tienes un prometheus.yml básico que apunta a cAdvisor:

global:
  scrape_interval: 15s # Raspa cada 15 segundos
  evaluation_interval: 15s # Evalúa reglas cada 15 segundos

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090'] # El propio Prometheus

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080'] # El servicio cAdvisor

El target de cAdvisor es cadvisor:8080. Esto asume que ambos servicios, Prometheus y cAdvisor, están en la misma red de Docker Compose. Si tu infraestructura crece y necesitas ajustar el consumo de recursos de tus contenedores, la información que obtienes de esta monitorización es fundamental para limitar los recursos de Docker Compose de forma efectiva.

Montando cAdvisor y Prometheus con Docker Compose

Para que todo funcione en conjunto, los desplegamos en el mismo docker-compose.yml. Así, comparten la red y pueden comunicarse fácilmente.

version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus_data:/prometheus # Para persistir los datos
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    restart: unless-stopped
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    ports:
      - "8080:8080"
    command: -port=8080

volumes:
  prometheus_data:

Con este docker-compose.yml y el prometheus.yml en el mismo directorio, puedes levantar todo con docker compose up -d. Prometheus estará disponible en http://tu_ip:9090 y cAdvisor en http://tu_ip:8080. Desde la interfaz de Prometheus puedes empezar a consultar métricas como container_memory_usage_bytes o container_cpu_usage_seconds_total.

Tradeoffs de esta configuración de monitorización

Implementar un stack de monitorización como este siempre implica decisiones. Conocer las ventajas y desventajas de esta configuración es necesario.

Lo que ganas:

  • Visibilidad completa: Accedes a métricas detalladas de CPU, memoria, red y disco por contenedor.
  • Histórico de datos: Prometheus guarda un historial que te permite analizar tendencias y detectar problemas recurrentes.
  • Alertas personalizadas: Puedes configurar reglas de alerta complejas para recibir notificaciones cuando algo no va bien, por ejemplo, en Telegram o Slack.
  • Independencia: No dependes de soluciones propietarias o de pago, todo es de código abierto.

Lo que complicas:

  • Consumo de recursos: cAdvisor y Prometheus consumen algo de CPU y RAM en tu servidor. Debes dimensionar tu VPS en consecuencia.
  • Curva de aprendizaje: PromQL, el lenguaje de consulta de Prometheus, requiere un tiempo para dominarlo.
  • Gestión de datos: Los datos de Prometheus pueden crecer mucho. Necesitas una estrategia para la retención y limpieza de datos antiguos.
  • Configuración inicial: La puesta en marcha requiere entender varias piezas y cómo se interconectan.

Si te interesa llevar la monitorización un paso más allá y recibir notificaciones cuando algo falla, tengo un artículo sobre alertas de Telegram para tu servidor que te puede ser útil. Para una visión más general de la salud de tu sistema, puedes consultar mi guía de monitorización VPS básica. Además, gestionar los logs de tus contenedores es tan importante como las métricas, así que échale un ojo a cómo gestionar logs en tu VPS.

Lucas Juárez
Lucas Juárez

Técnico freelance especializado en desarrollo a medida, automatizaciones con IA y gestión técnica para negocios en España. Más sobre mí →

Compartir:

¿Necesitas que alguien se ocupe de tu web?

Me encargo de que tu web funcione, esté segura y actualizada. Backups, actualizaciones y soporte directo. Planes desde 49 €/mes.

Chat