ADR-0004 · cAdvisor para métricas por contenedor, una instancia por VM¶
- Estado: aceptado
- Decisores: Hugo Quintero
- Fecha de la decisión: 2026-09-03
Contexto y problema¶
El stack ya recolecta métricas del host con node_exporter (job cloud-nodes:
CPU, memoria, disco de la VM completa), pero no tiene visibilidad por
contenedor: no se puede ver cuánto consume medusa_backend frente al
storefront, el CMS o Kafka, ni detectar cuál se satura o reinicia. Con el
ecommerce cerca de estar en producción, ese desglose es necesario para operar.
Los hosts con contenedores son ecommerce-srv (stack de Medusa) y devops-vm
(el propio stack de observabilidad más apps internas: Grafana, Loki, n8n, etc.).
Opciones consideradas¶
- cAdvisor, una instancia por VM con contenedores (elegida): expone métricas por contenedor en formato Prometheus, que ya es el motor de métricas del stack.
- Solo
node_exporter: insuficiente, no distingue por contenedor. - Recolectar del socket de Docker con otro exporter: menos estándar y con menos métricas que cAdvisor para el mismo acceso al host.
Decisión¶
cAdvisor corre en cada VM con contenedores (lee solo los del host local):
devops-vm: serviciocadvisoren eldocker-compose.ymlraíz, dentro de la redmonitoring. Prometheus lo scrapea porcadvisor:8080; no publica puerto al host.ecommerce-srv: compose propio encadvisor/, publicado solo en la IP interna (10.158.0.19:9101, no en0.0.0.0ni por el túnel). Prometheus lo scrapea por IP, por la red interna (default-allow-internal; la VM no tiene eldenyniufwdepostgres-db-vm, así que no hace falta regla de firewall).redis-srv-vm: mismo compose decadvisor/conCADVISOR_BIND_IP=10.158.0.23(un contenedor Redis, usado por Chatwoot).- Un job
cadvisorenprometheus.ymlcon los tres targets, etiquetados porinstance. Sin basic auth, igual quecloud-postgres/cloud-pgbouncer. - Puerto 9101 (el 8080 lo usa kafka-ui y el 9100 node_exporter).
Consecuencias¶
Positivas¶
- Visibilidad de CPU, memoria, red y disco por contenedor en Grafana.
- Mismo patrón que el resto del stack (scrape Prometheus, un componente por carpeta), sin herramientas nuevas.
Negativas / deuda asumida¶
-
Versión mínima v0.55.1: en
redis-srv-vm(Debian 13, Docker 29 con almacén de imágenes de containerd, driveroverlayfs) las versiones 0.49 a 0.52 arrancan pero no ven ningún contenedor (failed to identify the read-write layer ID). Probado el 2026-09-03. -
cAdvisor corre privilegiado (necesita acceso amplio al host para leer los contenedores): riesgo mitigado por no exponerlo, fijar la versión y restringir el scrapeo.
- El despliegue en
ecommerce-srves manual (copiar el compose y levantarlo): el repo aún no versiona el despliegue de exporters en VMs remotas. - Queda sin basic auth mientras los exporters de la nube no se alineen (pendiente
ya anotado en
prometheus.yml).