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¶
- 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.exampleyREADME.mdcon el procedimiento. - 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. - Publicar solo en la IP interna de la VM (
${BIND_IP}:puerto), nunca en0.0.0.0ni por el túnel. Prometheus scrapea por la VPC. - Credenciales solo en el
.envde la VM, fuera de git, leídas del.envde la aplicación al desplegar (REDIS_PASSWORDde n8n y redis-srv-vm). - Despliegue manual en
/opt/monitoring/<exporter>/de cada VM (gcloud compute scp+docker compose up -d), documentado en el README. - Versiones fijadas en la imagen; sin basic auth en los exporters hasta alinear todos los de la nube en una sola tanda.
- Sin JMX en Kafka:
kafka_exporter(cliente) cubre brokers, offsets, lag y miembros. JVM y request handler quedan parajmx_exportersolo si hacen falta. - n8n expone sus métricas propias (
N8N_METRICS=truey las variablesN8N_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.enventero.
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.