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
- Lee
observability/victoriametrics/alerts.ymldesdeorigin/maindel clon de CreaRack Pro en/opt/crearack-pro. - 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). - 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, commitf90cb92) ese puerto pasa por el proxyvmauthy pide credencial ([[decision—20260925—vmauth-auth-netbird-b45]]): el script llamacurl --netrc-filecon el usuario de solo lecturaalertas(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. - 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”. - 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
alertas-ciegas-check.sh— modo normal, el que corre en el cron.--dry-run— imprime el resultado sin sellar estado ni enviar correo.--rules-file <yml>— usa un fichero de reglas alternativo (combinable con--dry-run).--test-alert— simulacro del camino de fallo: inyecta una regla con una métrica inventada y envía el correo real marcado como prueba.
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
- Instalado en
/opt/alertas-ciegas/en OPS. - Cron diario a las 06:45 UTC (
/etc/cron.d/alertas-ciegas). - Vigilado por el propio
cron-heartbeat(ventana de 26 horas). - Inventariado en
public/supercontext/AUTOMATISMOS.md. - Desde el 25-09-2026 (B-45): requiere
/opt/alertas-ciegas/.netrc(permisos 600, root) con el usuario de solo lecturaalertasdevmauth— receta para crearlo/rotarlo encontext/INFRA.mddel repo Pro, sección vmauth. La contraseña completa del equipo nunca se deja en OPS.
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
- [[incident—20260915—vmalert-alertas-ciegas]]
- [[runbook—observability—alerting-setup-dokploy]]
- [[entity—observability—service—vmalert]]
- [[crearack-tech—observability—alarmas-prod]]
- [[crearack-tech—admin—monitoring-tools]]
- [[decision—20260925—vmauth-auth-netbird-b45]]