Tipos de Condição
A v1 suporta 4 tipos de condição. Cada um avalia um aspecto diferente da ingestão.no_data — Ausência de dados
Match se now - last_ingest_at > threshold_seconds para o escopo da regra.
Quando usar: detectar integração quebrada, fonte parou de enviar, ClickPipes pausado.
Campos:
Exemplo:
lag_high — Atraso entre evento e ingestão
Match se last_ingest_at - last_event_at > threshold_seconds.
Quando usar: detectar Kafka backlog, ClickPipes lento, DLQ acumulando.
Diferença de no_data: o evento está chegando, mas com atraso (timestamp do evento muito mais antigo que ingest).
Exemplo:
byte_threshold — Volume acima de limite
Match se sum(bytes_uncompressed) na janela > threshold_bytes.
Quando usar: alerta de quota de plano, detecção de spike anômalo (ex: 10× volume normal indica bug no operador).
Campos:
Exemplo:
rate_drop — Queda vs baseline
Compara rows_count na janela atual com a média de janelas equivalentes nos últimos baseline_window_days dias.
Match se (1 - current/baseline) * 100 >= threshold_percent.
Quando usar: detectar degradação parcial sem que a fonte fique 100% silenciosa (no_data não pegaria).
Campos:
Exemplo:
metric_payload.note = "insufficient_baseline").
Comparação
Recomendação: combine
no_data (5 min) + rate_drop (50% queda em 10 min) para cobrir tanto silêncio total quanto degradação.
Avaliação
Tudo roda noalert_runner, worker em goroutine no backend (Go). Tick de 30s:
- Lista regras enabled (1 query PG)
- Avalia em batch via
AlertEvaluator(1 query CH por strategy) - Para cada match em estado
ok|resolved+ cooldown ok: criaalert_event, dispara canais, marcafiring - Para cada não-match em estado
firing: criaalert_event, dispara resolve, marcaresolved
alert_events.delivery_status mas não bloqueiam outros canais nem a transição de estado.