Cómo monitorizar contenedores Docker con Prometheus y Grafana
Aprende a configurar exporters en Docker para monitorizar CPU, memoria y E/S de disco en entornos de producción usando Prometheus y Grafana.
Resumen
- Los exporters traducen métricas internas del sistema operativo y de los contenedores en formatos que Prometheus comprende perfectamente.
- cAdvisor recopila datos granulares de consumo de recursos directamente del núcleo de Linux para cada contenedor Docker activo.
- Los paneles en Grafana transforman datos brutos de series temporales en gráficos intuitivos para la toma de decisiones en producción.
- Ajustar correctamente los límites de recursos en Docker evita que un solo contenedor comprometa la estabilidad de toda la infraestructura.
- Las alertas proactivas basadas en métricas de CPU y E/S detienen las interrupciones antes de que afecten a los usuarios finales.
Por qué monitorizar contenedores en entornos de producción
Gestionar aplicaciones en contenedores sin una herramienta de observabilidad es como conducir un coche de noche sin panel de instrumentos. En el ecosistema moderno, donde los servicios se despliegan y se eliminan en segundos, saber exactamente cuántos recursos consume cada aplicación ya no es opcional. En la práctica, esto significa que mucho antes de que un sistema falle por falta de memoria, ya habrás recibido un aviso en el móvil y podrás actuar. Para comprender el impacto de esto en tu infraestructura, también vale la pena consultar nuestra guía sobre cómo refinar Prometheus para evitar ruido innecesario en el equipo de operaciones.
Cuando ejecutamos decenas de servicios aislados en Docker, la visibilidad nativa del comando stats se vuelve insuficiente para diagnósticos históricos. Necesitamos una arquitectura que recopile, almacene y muestre tendencias a lo largo del tiempo. Aquí es donde entran dos de las herramientas más potentes del código abierto: Prometheus, que actúa como un recopilador incansable de datos numéricos, y Grafana, responsable de convertir esos números en paneles coloridos y fáciles de leer.
Entendiendo el papel de cAdvisor en la recopilación de métricas
Prometheus por sí solo no sabe qué es un contenedor Docker; simplemente lee páginas web formateadas con métricas numéricas. Aquí es donde entra cAdvisor, un programa auxiliar creado por Google que se ejecuta junto a tus servicios recolectando datos de uso de CPU, memoria, red y disco de cada contenedor. En la práctica, funciona como un traductor que observa el motor de Docker y le dice a Prometheus exactamente qué ocurre bajo el capó. Si estás expandiendo tu infraestructura hacia hardwares alternativos, vale la pena ver cómo ejecutar contenedores Docker en RISC-V en tu homelab para probar nuevos horizontes de hardware.
Configurar cAdvisor es sencillo y por lo general requiere solo ejecutar un contenedor dedicado con acceso a los sockets de Docker en el host. Este componente consume muy pocos recursos y ofrece un nivel de detalle impresionante, permitiendo auditar desde el consumo medio de una aplicación web hasta cuellos de botella profundos de lectura y escritura en disco.
Guía paso a paso para configurar Prometheus y cAdvisor
Para poner en marcha este mecanismo en tu entorno de producción, utilizaremos Docker Compose, una herramienta que ayuda a levantar múltiples contenedores conectados de forma organizada. Crea un archivo de configuración estructurado y asegúrate de que los puertos de comunicación estén debidamente aislados o protegidos por redes internas seguras.
- Crea un archivo llamado docker-compose.yml en tu carpeta de trabajo y pega la estructura base a continuación para levantar cAdvisor y Prometheus.
- Inserta el bloque de código funcional de cAdvisor apuntando a los directorios esenciales del host Linux para la lectura correcta del núcleo.
version: '3.8' services: cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor ports: - '8080:8080' volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro restart: unless-stopped - Añade el servicio de Prometheus en el mismo archivo YAML, configurando el archivo de reglas para que apunte a la dirección de cAdvisor recién creada.
Tras guardar el archivo, ejecuta el comando de inicio en tu terminal para poner los servicios en funcionamiento continuo. Es fundamental garantizar que el archivo de configuración de Prometheus (prometheus.yml) apunte correctamente al objetivo de cAdvisor en el puerto 8080, permitiendo la recolección periódica de datos de rendimiento.
Visualizando datos de CPU y memoria en Grafana
Con Prometheus recopilando métricas cada quince segundos, el siguiente paso es conectar Grafana a esta base de datos para comenzar a dibujar los gráficos. Grafana se conecta a Prometheus como una fuente de datos nativa, requiriendo únicamente la inserción de la dirección interna del servidor Prometheus. A partir de ahí, puedes importar paneles preconfigurados de la comunidad o crear paneles personalizados enfocados estrictamente en la salud de tu clúster.
En los paneles de CPU, por ejemplo, podrás comprobar si el límite de núcleos configurado en Docker está ralentizando alguna aplicación bajo carga pesada. En la pestaña de memoria, el foco debe ser monitorizar el uso real de memoria RAM frente a la memoria de intercambio (swap), identificando fugas de código antes de que fuercen al sistema operativo a cerrar el proceso. Mantener este rigor de monitorización evita sorpresas desagradables en horas punta de tráfico.
Interpretando cuellos de botella de E/S en discos de contenedores
El uso de disco suele ser el talón de Aquiles de las aplicaciones en contenedores en producción, especialmente en bases de datos o sistemas que gestionan muchos archivos temporales. cAdvisor expone métricas detalladas de bytes leídos y escritos, además de la latencia de las operaciones de E/S por bloque. En la práctica, esto significa que si una aplicación empieza a fallar por lentitud en el almacenamiento, sabrás exactamente qué contenedor está generando la mayor carga de escritura.
Cuando identificamos problemas de lentitud persistente vinculados al hardware físico o al subsistema de almacenamiento subyacente, es importante recordar que el cuello de botella puede provenir del propio servidor físico. Para escenarios donde el estrés térmico o el desgaste de componentes afecta al rendimiento global de la máquina, vale la pena consultar las pautas sobre cómo resolver el thermal throttling en portátiles y recuperar rendimiento en estaciones de trabajo de apoyo.
Consideraciones finales sobre la observabilidad en contenedores
Implementar una pila sólida de monitorización con Prometheus y Grafana transforma por completo la rutina de cualquier equipo de ingeniería y operaciones. En lugar de apagar incendios a ciegas y adivinar la causa de una caída, pasas a contar con datos precisos, historiales consistentes y alertas inteligentes. La disciplina de observar el comportamiento de los contenedores en tiempo real garantiza estabilidad, reduce costes operativos y eleva la confianza de toda la empresa en los servicios entregados a los clientes.