CreaRack-SL

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

  1. 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 pending o firing.
      • Envía el evento a Alertmanager.
  2. 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:

NombreCondiciónEvaluación
CreaRackDownup == 0Cada 30s, si ninguna serie tiene up=1.
HighLatencyp95 latencia > 2sAgregación de histograma de latencias.
HighErrorRateErrores 5xx > 50/minTasa de cambio (rate(...)) en 1m window.
DatabaseErrorsErrores DB > 0/minTasa en 1m window.
HighMemoryUsageMemoria > 3GB por 15mValor 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]]