ADR 0031 — Use Prometheus for Infrastructure Metrics

Status

Accepted

Context

Necesitamos monitorizar la salud y rendimiento de los microservicios del TFG (Gateway, Chatbot, RAG Service). Las métricas requeridas incluyen:

  • Latencia de requests HTTP
  • Tasa de errores
  • Requests por segundo
  • Uso de recursos

Decision

Utilizaremos Prometheus para recolección de métricas y Grafana para visualización.

Componentes:

  • Prometheus: Base de datos de series temporales con modelo pull
  • prometheus-fastapi-instrumentator: Instrumentación automática de FastAPI
  • Grafana: Visualización y dashboards

Consequences

  • Pros:
    • Estándar de industria para métricas de infraestructura.
    • Integración nativa con FastAPI y contenedores Docker.
    • Alerting integrado con Alertmanager.
    • Grafana permite unificar métricas + logs (con Loki).
  • Cons / Trade-offs:
    • Modelo pull requiere que Prometheus pueda alcanzar los servicios.
    • Configuración de scraping puede ser compleja en entornos dinámicos.
    • Datos no diseñados para alta cardinalidad (user-level metrics).

Alternatives considered

  • Datadog/New Relic: Muy potentes pero propietarios y costosos.
  • InfluxDB + Telegraf: Buena alternativa, pero menos ecosistema.
  • OpenTelemetry Metrics: Emergente, pero Prometheus tiene mejor madurez.

Implementation

# En cada servicio FastAPI
from prometheus_fastapi_instrumentator import Instrumentator

app = FastAPI()
Instrumentator().instrument(app).expose(app)
# prometheus.yml
scrape_configs:
  - job_name: 'gateway'
    static_configs:
      - targets: ['backend:8000']

References

  • https://prometheus.io/
  • https://grafana.com/
  • https://github.com/trallnag/prometheus-fastapi-instrumentator