Entidad: vmalert — evaluador de reglas de alerta en tiempo real
Resumen
vmalert es el motor de evaluación de reglas de alerta en CreaRack. Lee las 5 reglas de alerting definidas en observability/victoriametrics/alerts.yml, las evalúa cada 30 segundos contra las métricas almacenadas en VictoriaMetrics, y cuando una condición se cumple, dispara la alerta al notificador (Alertmanager).
Despliegue
Imagen
victoriametrics/vmalert:v1.106.1
Configuración en compose
Local (compose.observability.yml)
vmalert:
image: victoriametrics/vmalert:v1.106.1
container_name: crearack_vmalert
depends_on:
- victoriametrics
- alertmanager
volumes:
- ./observability/victoriametrics/alerts.yml:/etc/alerts/alerts.yml:ro
command:
- "--datasource.url=http://victoriametrics:8428"
- "--remoteWrite.url=http://victoriametrics:8428"
- "--notifier.url=http://alertmanager:9093"
- "--rule=/etc/alerts/*.yml"
- "--evaluationInterval=30s"
restart: unless-stopped
networks:
- crearack_internal
PROD (compose.prod.yml)
Idéntica (sin container_name, que ya lo genera compose automáticamente).
Rutas y volúmenes
- Archivo de reglas:
./observability/victoriametrics/alerts.yml→/etc/alerts/alerts.yml(read-only). - Datasource (VictoriaMetrics):
http://victoriametrics:8428. - Notificador (Alertmanager):
http://alertmanager:9093.
Comportamiento
Ciclo de evaluación
-
Cada 30s (
--evaluationInterval=30s), vmalert ejecuta:- Fetch de las últimas N samples de cada métrica desde VictoriaMetrics.
- Evaluación de la expresión PromQL de cada regla.
- Si una condición es verdadera:
- Marca la alerta con estado
pendingofiring. - Envía el evento a Alertmanager.
- Marca la alerta con estado
-
Agregación en Alertmanager: Alertmanager recibe el estado y aplica su lógica de enrutamiento (agrupación, delays, silenciadores).
Reglas soportadas
vmalert soporta cualquier regla en formato Prometheus Alerting Rules (*.yml). En CreaRack hay 5 reglas definidas en observability/victoriametrics/alerts.yml:
| Nombre | Condición | Evaluación |
|---|---|---|
CreaRackDown | up == 0 | Cada 30s, si ninguna serie tiene up=1. |
HighLatency | p95 latencia > 2s | Agregación de histograma de latencias. |
HighErrorRate | Errores 5xx > 50/min | Tasa de cambio (rate(...)) en 1m window. |
DatabaseErrors | Errores DB > 0/min | Tasa en 1m window. |
HighMemoryUsage | Memoria > 3GB por 15m | Valor en MB, con for: 15m (solo alerta si sostenida). |
Dependencias
- ✅ VictoriaMetrics (
victoriametrics:8428) — fuente de métricas. - ✅ Alertmanager (
alertmanager:9093) — receptor de alertas. - ❌ No requiere Prometheus (vmalert es compatible pero puede usar VictoriaMetrics directamente).
Logs y debugging
# Ver logs en tiempo real (Docker)
docker logs crearack_vmalert -f
# Debugger: vmalert expone /debug/rules en puerto 8080 (default)
curl http://localhost:8080/debug/rules
Notas de implementación
Por qué vmalert en vez de Prometheus
- Prometheus alertmanager solo funciona con Prometheus como datasource.
- vmalert es agnóstico: compatible con Prometheus, VictoriaMetrics, ClickHouse, etc.
- En PROD usamos VictoriaMetrics (más ligero, mejor compresión, ya desplegado).
Cambio desde v1.101 a v1.106
Versión usada: 1.106.1 (estable, sin cambios de API respecto a las versiones anteriores).
Integration con observability local
En compose.observability.yml, vmalert estaba comentado y con paths erróneos (observability/prometheus/ en vez de observability/victoriametrics/). Se reescribió completamente en PR#49 para matchear PROD.
Véase también
- [[feature—observability—alerting-prod-s95]]
- [[decision—20260529—plan-hardening-post-master-hito-a]]
- [[entity—observability—service—alertmanager]]
- [[entity—observability—service—victoria-metrics]]
- [[runbook—observability—alerting-setup]]