Alerting

Alerts & routing

The embedded rule engine evaluates full PromQL (including rate(), avg by(), arithmetic and aggregations) entirely in-process with no external dependency. In Mimir deployments, evaluations delegate to Mimir's instant query endpoint automatically for full PromQL parity.

Rule format

POST /api/rules
{
  "name": "High CPU",
  "groupId": "infra",
  "expr": "100 - avg by (instance)(rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))*100",
  "cmp": ">",
  "threshold": 90,
  "forMs": 300000,
  "severity": "critical",
  "annotations": {
    "summary": "CPU > 90% on {{ $labels.instance }} — now at {{ $value }}"
  },
  "runbook": "## High CPU\n1. Check top processes\n2. ..."
}

Annotations support {{ $labels.name }} and {{ $value }} templating, resolved at fire time.

Routing (Alertmanager-compatible)

Full routing tree with matchers, grouping, group-wait/interval/repeat intervals, mute time windows, inhibition rules, and a continue flag. Configure via PUT /api/alertmanager/config or the Routing UI.

Silences

Create and manage silences from the Alerts → Silences tab or via POST /api/silences. Silences support label matchers and an optional comment.

Notification receivers

Dead-letter queue

Failed notifications are moved to the DLQ after maxAttempts. Inspect, replay or purge from the Alerts → Notifications tab or via /api/notify/dlq.