Apéndice D — Monitoreo y alertas¶
D.1. Stack mínimo recomendado¶
| Componente | Propósito | Endpoint |
|---|---|---|
| Prometheus node_exporter | CPU, RAM, disco, red | :9100/metrics |
| postgres_exporter | Queries lentas, conexiones | :9187/metrics |
| redis_exporter | Memoria, latencia, queue | :9121/metrics |
| nginx_exporter | RPS, latencia, 5xx | :9113/metrics |
| django-prometheus | Vistas Django, ORM time | /metrics |
| Grafana | Visualización | :3000 |
| Alertmanager | Alertas → Slack/email | :9093 |
D.2. Alertas críticas¶
groups:
- name: ecf_dgii
rules:
- alert: ECF_QUEUE_BACKLOG
expr: ecf_estado_en_cola_count > 20
for: 10m
- alert: ECF_RECHAZOS_ANOMALOS
expr: rate(ecf_rechazado_total[15m]) > 0.1
for: 5m
- alert: DGII_DOWN
expr: probe_success{job="dgii_health"} == 0
for: 3m
- alert: CERT_EXPIRY_SOON
expr: cert_p12_days_remaining < 30
- alert: SECUENCIA_BAJA
expr: ecf_secuencia_restante < 500
- alert: DISK_SPACE_LOW
expr: node_filesystem_avail_bytes / node_filesystem_size_bytes < 0.1
D.3. Healthcheck endpoint propio¶
tienda/health.py:
def healthz(request):
checks = {
"db": check_db(),
"redis": check_redis(),
"celery": check_celery_workers(),
"cert_days_left": cert_days_remaining(),
}
status = 200 if all(checks.values()) else 503
return JsonResponse(checks, status=status)
Configurar uptime monitor externo (Uptime Kuma, BetterStack, Pingdom) que apunte a /healthz/ cada 1 min y /healthz/dgii/ cada 5 min.
D.4. Logs centralizados¶
Opciones: Loki + Promtail (simple), ELK (pesado), Papertrail/Datadog/Logtail (SaaS). Auditoría DGII exige retener logs al menos 10 años.