Features · Alerting & Incidents · Anomaly Detection
Statistical baselines · per metric, per host

Threshold alerts fire when it's already broken.
Anomaly detection fires while it's drifting.

Every metric on every host gets a learned baseline. Deviations are scored, classified by severity, and shown on the chart where they happened — so you see the drift before the threshold catches up.

postgres-prod-1 queries.commit_latency · ms ANOMALY · 02:14
-30 min -15 min now 200 500 800 z-score 4.7 · CRITICAL
current
820 ms
+ 4.7σ
baseline (μ)
192 ms
7-day window
stdev (σ)
132 ms
drift gate ±1.5σ
would've fired
12 m sooner
vs. threshold rule
— Method

Three steps. No magic.

We don't train a different model on every host. The maths is straightforward, the windows are sensible, and the score is on the chart you're already looking at.

01

Build a rolling baseline

Per metric, per host. Mean + stdev over a 7-day window, recomputed continuously. No bake-in, no static thresholds to maintain.

μ, σ = stats(metric, 7d, exclude_outliers)
02

Score every new sample

How many standard deviations from the mean? That's the z-score. Big z = unusual; sustained big z = anomaly.

z = (x − μ) / σ
03

Classify and route

Severity assigned by z-score band and duration. Anomalies surface inline on the chart and feed the alert system as a separate source.

severity = bucket(z, duration)
— Severity

Four bands. Predictable bins.

The bands are explicit so the noise floor stays in your control — no “the model decided” surprises.

Low
|z| ≥ 1.5

Drift, but inside expected range. Charted, not alerted.

Medium
|z| ≥ 2.5

Notable deviation. Surfaces in dashboards and the timeline; can opt-in for alerts.

High
|z| ≥ 3.5

Sustained deviation. Default alert source on. Routed via your channels.

Critical
|z| ≥ 4.5

Far-tail event. Auto-incident, AI Triage suggested, evidence pre-attached.

See the drift before the threshold catches up.

On every metric. On every host. Without tuning.

Get early access All features