Saltar a contenido

ADR-0006 · Exporters de servicio junto a cada servicio, publicados en la IP interna

  • Estado: aceptado
  • Decisores: Hugo Quintero
  • Fecha de la decisión: 2026-09-08

Contexto y problema

Redis, Kafka y n8n corren en contenedores dentro de redes Docker propias de cada aplicación, sin puerto publicado o con contraseña. Prometheus, en devops-vm, necesita alcanzarlos sin abrir esos servicios a la VPC ni copiar credenciales al repo.

Decisión

  1. Un exporter por instancia de servicio, en la misma VM, con una carpeta por exporter en el repo (cadvisor/, redis_exporter/, kafka_exporter/): docker-compose.yml, .env.example y README.md con el procedimiento.
  2. El exporter se une a la red Docker de la aplicación mediante un override de compose (docker-compose.medusa.yml, docker-compose.n8n.yml) y habla con el servicio por su nombre interno (redis:6379, kafka:29092). La aplicación no cambia.
  3. Publicar solo en la IP interna de la VM (${BIND_IP}:puerto), nunca en 0.0.0.0 ni por el túnel. Prometheus scrapea por la VPC.
  4. Credenciales solo en el .env de la VM, fuera de git, leídas del .env de la aplicación al desplegar (REDIS_PASSWORD de n8n y redis-srv-vm).
  5. Despliegue manual en /opt/monitoring/<exporter>/ de cada VM (gcloud compute scp + docker compose up -d), documentado en el README.
  6. Versiones fijadas en la imagen; sin basic auth en los exporters hasta alinear todos los de la nube en una sola tanda.
  7. Sin JMX en Kafka: kafka_exporter (cliente) cubre brokers, offsets, lag y miembros. JVM y request handler quedan para jmx_exporter solo si hacen falta.
  8. n8n expone sus métricas propias (N8N_METRICS=true y las variables N8N_METRICS_INCLUDE_*) por el puerto publicado de main. El worker las expone pero sin puerto publicado: pendiente. Las variables deben estar referenciadas en el compose de n8n; Compose no inyecta el .env entero.

Consecuencias

  • Mismo patrón para todo exporter nuevo: copiar una carpeta, ajustar .env.
  • Sin exposición adicional de servicios; el único puerto nuevo por VM es el del exporter, en la IP interna.
  • Deuda: despliegue manual y sin autenticación en los exporters. Si la VM se recrea, hay que volver a desplegar la carpeta /opt/monitoring.