Saltar a contenido

ADR-0001 · Las redes remotas empujan métricas por remote_write; Prometheus no las scrapea

  • Estado: aceptado
  • Decisores: Hugo Quintero (único autor del repo)
  • Fecha de la decisión: no registrada. Implementada el 2026-03-13 (commit e5dfd35, "Configuracion de endpoint para recepcion de metricas del Grafana Agent"); la migración a Grafana Alloy aparece el 2026-03-24.

Contexto y problema

Hay tres orígenes de métricas: las VMs de la nube (misma red que el stack), la red SAP (HANA, Service Layer, Windows) y la red de la oficina (servidores dev, staging y docker, MikroTik). Las dos últimas están detrás de NAT y sin IP pública; el Prometheus central no puede abrir conexiones hacia ellas. El stack se opera con una sola persona y sin VPN site-to-site.

Opciones consideradas

  1. Colector local en cada red remota (Grafana Agent, luego Alloy) que scrapea sus exporters y empuja al Prometheus central con remote_write, expuesto por Cloudflare Tunnel + Access.
  2. VPN entre la VM devops y cada red, y scrape directo desde el Prometheus central.
  3. Un Prometheus por red con federación (/federate) hacia el central.

No hay registro escrito de la evaluación; las opciones 2 y 3 se infieren del diseño resultante.

Decisión

Opción 1. Prometheus corre con --web.enable-remote-write-receiver y recibe en https://prometheus.compulandia.com.py/api/v1/write; Loki recibe logs en https://loki.compulandia.com.py/loki/api/v1/push. Cada red remota tiene su colector con la lista de targets y etiquetas red / servidor / exporter, cuyas configs de referencia viven en este repo (grafana-alloy/, agent-config-grafana/). Solo lo que está en la misma red (VMs de la nube) se scrapea directo.

Consecuencias

Positivas

  • No hace falta VPN ni abrir puertos entrantes en las redes remotas.
  • Las etiquetas se fijan en el origen: los tableros filtran por red y servidor.
  • Un solo Prometheus, una sola TSDB, una sola lista de reglas.

Negativas / deuda asumida

  • Si el túnel, el token de Cloudflare Access o el colector se caen, las series simplemente dejan de llegar y ninguna alerta lo detecta: falta una regla de ausencia (absent_over_time) por red.
  • Las credenciales del remote_write (service token y basic auth) están en texto plano en las configs de referencia del repo. Deuda a resolver con archivos de secretos fuera de git.
  • Las configs de los colectores viven en dos lugares (este repo y la máquina donde corren); pueden divergir sin que se note.
  • Hay dos generaciones de colector (Grafana Agent y Alloy). Grafana Agent está discontinuado por Grafana; la config de agent-config-grafana/ queda como referencia hasta migrar esa red a Alloy.