Volver a la wiki

Runbook: chequeo diario de alertas ciegas de vmalert (alertas-ciegas-check.sh)

Propósito

Chequeo diario, corrido en OPS, que responde una pregunta muy concreta: ¿cada alarma de vmalert sigue apuntando a una métrica que la aplicación realmente produce? Nace de un incidente real — [[incident—20260915—vmalert-alertas-ciegas]] — donde dos alarmas de salud llevaban meses sin poder dispararse porque nombraban métricas inexistentes, y nada lo detectó hasta una auditoría manual. Este script convierte esa auditoría puntual en vigilancia continua.

Cómo funciona

  1. Lee observability/victoriametrics/alerts.yml desde origin/main del clon de CreaRack Pro en /opt/crearack-pro.
  2. Extrae de cada regla las métricas nombradas en su expresión PromQL (mismo criterio que el test de contrato tests/observability/test_alert_rules_metrics_exist_310.py).
  3. Pregunta a VictoriaMetrics de PROD (count(<métrica>), puerto 8428, alcanzable por NetBird — vmalert, en el puerto 8880, no lo es desde OPS) si esa métrica tiene series recientes. Desde el 25-09-2026 (mega-auditoría B-45, commit f90cb92) ese puerto pasa por el proxy vmauth y pide credencial ([[decision—20260925—vmauth-auth-netbird-b45]]): el script llama curl --netrc-file con el usuario de solo lectura alertas (restringido a /api/v1/query, sin permiso de borrado), leído de /opt/alertas-ciegas/.netrc. Si el fichero falta, el script aborta con un error claro sin sellar estado — no cuenta como ceguera real, es la sonda sin credencial la que falla.
  4. Para contadores que solo nacen con su primer evento (como django_db_errors_total), no comprueba la métrica directamente sino su “hermana de vida” (django_db_execute_total) — así no confunde “sistema sano, cero errores todavía” con “motor de métricas apagado”.
  5. Si una alarma queda sin series, la marca CIEGA; si VictoriaMetrics no responde (o rechaza la credencial), el script aborta sin sellar estado, para que sea el heartbeat — y no una ceguera falsa — quien avise.

Uso

Avisa a infra@esfericlabs.com solo en transiciones (nueva ceguera o recuperación), vía send_maintenance_email del MCP del workspace — mismo patrón sin ruido que servicios-check y cron-heartbeat.

Despliegue

Primera pasada

Verificada el 15-09-2026: 5 de 5 alarmas sanas, y el simulacro --test-alert generó el correo real en infra@, confirmado por el conector de Zoho.

Véase también

Subir