Proxmox VEXVI · MonitoringAlert design
Alert design: SLOs, symptoms, and dashboards
What you'll learn
- Define SLOs that map to user experience and can actually be measured
- Write an alert rule complete enough to act on, not just a threshold
- Compute a multi-window burn rate and explain what each window catches
- Design a dashboard for the person being woken rather than the person who built it
Prerequisites
Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12
Why this matters in production
Alerts that fire on every blip train operators to ignore them. Alerts that fire only when a user is impacted keep operators attentive. This lesson teaches the design.
SLOs
An SLO (Service Level Objective) is a target for a measurable behaviour. For Proxmox:
| SLO | Definition | Target |
|---|---|---|
| VM availability | % of time the VM is running | 99.95% for Tier 0 |
| Backup success | % of scheduled backups that complete | 99% |
| Cluster quorum uptime | % of time cluster has quorum | 99.99% |
| Restore success | % of restore attempts that succeed | 100% |
Symptom-based alerts
Page when the user is impacted:
- “VM 100 is down” — page.
- “Cluster has quorum” — dashboard only.
- “Backup failed for VM 100” — page for Tier 0, log for Tier 3.
- “Ceph HEALTH_WARN” — page if it persists > 5 min.
An alert rule is more than a threshold
Most alert rules consist of a condition and a destination. That is enough to fire and not enough to act on, and the gap is felt entirely by the person woken at 03:00.
A complete rule carries six things:
| Field | Why it exists |
|---|---|
| Condition | The measurement and the threshold |
for duration | How long it must hold before firing. Without this, every transient blip pages |
| Severity | Page, ticket or dashboard — decided when the rule is written, not by the responder |
| A one-line statement of what is wrong | In the alert text. “CephOSDNearFull” is a rule name; “OSD.7 is at 87%, cluster writes stop at 95% on any single OSD” is a statement somebody can act on |
| A link to the runbook | The responder should not be searching a wiki at 03:00 |
| An owner | Who is accountable for this rule still being correct in six months |
The last two are almost always missing, and they are the two that decay. A rule with no owner is nobody’s job to delete when the thing it watches has been replaced, which is how an alert set accumulates rules that fire for conditions that no longer exist.
Multi-window burn rate
For SLOs, use multi-window burn rates:
Alert if:
(error rate over 1h > 14.4 * SLO budget) AND
(error rate over 6h > 6 * SLO budget)
This catches both fast-burning incidents and slow-burning ones, while suppressing noise.
Dashboards
Effective dashboards are layered:
| Layer | Audience | Content |
|---|---|---|
| Overview | Leadership | SLO compliance, incidents, capacity |
| Operations | Ops team | Host health, VM status, storage, network |
| Deep-dive | Specialist | Per-component detail, logs, traces |
flowchart LR
A[Overview] --> B[Operations]
B --> C[Deep-dive]
C --> B
C --> A
Pages vs tickets
| Channel | Use for |
|---|---|
| Page | Production outage; user-impacting |
| Ticket | Operational hygiene; non-urgent; future work |
| Log | Diagnostics; trends |
A Tier 0 VM is down → page. A Tier 3 VM has high I/O latency → ticket.
Production considerations
Common mistakes
- Thresholds with no
forduration, so every transient blip pages. - Alerts with no runbook link and no owner, so nobody deletes them when they stop being relevant.
- A single burn-rate window, so either it is noisy or it is slow.
- No slow-burn alert, so a service that is slightly bad every day breaches its month without ever paging.
- Dashboards built for their author, unreadable by the person on call.
- Panels that are permanently amber, which stop carrying information.
- Paging on every metric breach.
- Reviewing rules rather than reviewing the pages that fired.
- Missing the alert entirely because the notification path is broken and nothing tests it.
Key takeaways
- SLOs map to user experience and must be measured before they are promised.
- A complete alert rule has a condition, a
forduration, a severity, a plain-language statement, a runbook link and an owner. - Burn-rate multipliers are derived: 14.4 over one hour exhausts a 30-day budget in about two days.
- Two windows make an alert both fast and trustworthy, and let it resolve quickly.
- Add a slow-burn ticket alert for the service that is never quite bad enough to page.
- Design the dashboard for the person being woken; draw the thresholds and say what the panel means.
- Review the pages that fired, monthly, and delete the ones that needed no action.
Knowledge check
Knowledge check · 5 questions
Q1. An alert on node I/O pressure fires several times a night, always resolving within a minute, and the responder never does anything. What is the correct first change?
Q2. Which fields belong in a complete alert rule, beyond the condition itself? Select all that apply.
Q3. A burn rate of 14.4 measured over a one-hour window means a 30-day error budget would be exhausted in roughly two days at that rate.
Q4. A service is 99.85% available every day for a month against a 99.9% SLO. It never triggers the fast or moderate burn-rate alerts. What is missing?
Q5. What is the best test of whether an operational dashboard is well designed?
Passing score: 75%. Answers are checked in this browser.