Volver a la wiki

Feature: Alerting de PROD — avisos cuando algo va mal por dentro

Lo que cambia

PROD podrá avisar por email al equipo infra cuando la app se degrade por dentro. Hasta ahora la única alarma era UptimeRobot, que solo mira: “¿responde la web?” desde fuera.

Una app lenta o devolviendo errores 500 pero que sigue contestando a /health no disparaba nada. Ahora sí:

Cada alarma llega a logcrearack@esfericlabs.com con:

Por qué

Primer hito del Plan Hardening post-Máster (detectado en la sesión de auditoría).

El Máster destapó que la observabilidad de PROD era un punto ciego:

  1. Las 5 reglas de alerta existían, pero ningún componente las ejecutaba.
  2. Encima dependían de métricas que en PROD ni se recogían (solo push de targets clientes, no salud app).
  3. La única vigilancia real era externa (UptimeRobot sobre /health).

Esto genera un riesgo grave: degradaciones internas sin notificación, impactando a clientes sin que el equipo lo sepa hasta que lo reportan.

Cómo se activa

3 piezas nuevas en la stack:

1. Scrape de /metrics en PROD

La VM de VictoriaMetrics ahora pull de http://web:8000/metrics cada 15s. Sin esto, no hay métricas de salud (CPU, memoria, latencia, errores Django).

2. vmalert (evaluador)

Ejecuta las 5 reglas en observability/victoriametrics/alerts.yml cada 30s contra las métricas. Cuando una condición se cumple (ej. up == 0), la dispara.

3. Alertmanager (notificador)

Recibe las alertas de vmalert. Las agrupa (para no spam si hay múltiples), aplica un delay de 30s (para evitar falsos positivos), y envía email a logcrearack@esfericlabs.com vía Resend SMTP (smtp.resend.com:587, STARTTLS, auth PLAIN).

Impacto al usuario

Ninguno en el producto — es vigilancia interna. El usuario no ve/hace nada diferente.

Impacto operacional (para el equipo):

Despliegue en STAGE/PROD

Pendiente: montar la API key de Resend en Dokploy.

  1. Crear fichero files/smtp_password en cada Dokploy (STAGE y PROD) con la clave en una línea.
  2. Montar como volumen en alertmanager (/etc/alertmanager/smtp_password).
  3. Confirmar dominio verificado + destinatario válido.

Una vez hecho, el stack arranca y cualquier alerta sale por email al instante.

Configuración local (dev)

En compose.observability.yml, vmalert y alertmanager también están activos. Para testear:

# Simular caída: detener el web
docker compose down web

# Pocos segundos después, vmalert dispara CreaRackDown
# Alertmanager lo recibe (visible en http://localhost:9093)
# No enviará email (no hay key Resend), pero logs muestran la conexión SMTP

Reglas de alerta

Definidas en observability/victoriametrics/alerts.yml:

AlertaCondiciónSeveridadDescripción
CreaRackDownup == 0criticalPROD no responde.
HighLatencyhistogram_quantile(0.95, ...) > 2warningP95 latencia > 2s.
HighErrorRaterate(django_http_requests_total{status=~"5.."}[1m]) > 50warningMás de 50 errores 5xx/min.
DatabaseErrorsrate(django_db_errors_total[1m]) > 0warningErrores contra DB.
HighMemoryUsageprocess_resident_memory_bytes / 1024 / 1024 > 3072 (15m)warningMemoria > 3GB por 15 min.

Cambio en este PR: umbral HighMemoryUsage 1GB → 3GB (PROD es 16GB, Daphne bajo carga legitimamente usa >1GB).

Véase también

Subir