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
- Webhook / Slack / Discord / Teams (URL-based)
- PagerDuty (routing key)
- OpsGenie
- SendGrid / Mailgun / SES (email)
- Twilio (SMS)
- Jira (issue creation)
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.