Alert Severity and Fatigue Management: On-call and SRE Practice
The ultimate paradox of alerting is too many alerts equals no alerts. When an on-call engineer receives dozens of notifications an hour and nine out of ten need no action, the brain starts ignoring every reminder — so when a real incident happens, nobody responds in time. Google's SRE philosophy stresses that the primary goal of being on-call is to make every wake-up worth it. That requires working on three layers at once: severity tiers, notification noise reduction, and the on-call process itself.
Severity tiers: not every problem deserves a page
First, separate "needs human action" from "just needs a glance". A common four-tier model:
| Tier | Definition | Notification | Response time |
|---|---|---|---|
| P0 | Core business down, users lost | Phone + SMS + email | Immediately |
| P1 | Major feature impaired, workaround exists | SMS + IM | 15 minutes |
| P2 | Localized issue, no user impact | IM + email | Business hours |
| P3 | Alert/log-level, record only | Dashboard / daily report | No real-time need |
The deciding factor is not "is a metric abnormal" but "if I do nothing, what happens to users". Metric-level noise should be filtered at the rule layer (see Prometheus alert rule design), not pushed onto the on-call phone.
The Real Cost of an Alert Storm
A mid-sized e-commerce company reviewed exactly this in 2025. During the early hours of a sales-event warm-up, the payment gateway started timing out against an upstream bank API and fired 3,200 alerts in 40 minutes. The on-call channel flooded, the root-cause alert drowned in the noise, and the whole core team was pulled into the group chat with nobody able to say who owned it. Post-incident analysis showed half the alerts were duplicate instances of one root cause, 20% were baseline noise that had existed for months, and only eight actually needed a human. With grouping and escalation in place, those eight would have been merged into one notification sent only to the payments on-call. The lesson: alert governance is not about receiving fewer messages — it is about someone acting immediately when an incident happens.
Noise reduction: grouping, routing, escalation
Even with good tiers, occasional alert storms still bury the critical signal. Three levers reduce noise:
- Group and aggregate: merge alerts sharing one root cause into a single notification (Alertmanager grouping, inhibition, and silences exist precisely for this).
- Route to the right receiver: different teams and severities flow through different channels, so each alert only disturbs the person responsible.
- Escalate when unacknowledged: auto-escalate if nobody confirms — e.g., one level up after 5 minutes, up the chain after 15 minutes — guaranteeing a backstop without spamming everyone.
With Prometheus + Alertmanager, a production-grade noise-reduction config looks roughly like this:
route:
group_by: ['alertname', 'cluster']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- matchers: ['severity="page"']
receiver: oncall-phone
- matchers: ['severity="ticket"']
receiver: ticket-queue
continue: false
group_by merges instances sharing one root cause; group_wait prevents short flapping from firing in bursts; repeat_interval controls how often the same alert repeats instead of hammering you hourly. Combined with overnight on-call, this setup keeps the phone ringing only when a human actually needs to act.
On-call rotations: let the paged person be able to act
No matter how good the tiers, fatigue persists if the on-call person gets an alert but doesn't know what to do. SRE practice closes the loop with a complete rotation cycle:
- Rotation calendar and handoff: define who is on call, the rotation period, and how handoff happens, so no one is on call indefinitely.
- Runbooks: every high-frequency alert maps to a runbook — which dashboard to check first, what commands to run, what the usual root cause is — turning "first-time debugging" into "follow the checklist".
- Post-incident review: hold a postmortem after every real incident, separate human error from system defects, and turn improvements into new runbooks or rules.
A good runbook covers five things: blast radius, diagnostic steps, remediation commands, rollback plan, and when to escalate. Writing those five down is often enough to cut average recovery time in half.
Measure on-call health with data
The effectiveness of alert governance can be observed with a few metrics: alerts per shift (should trend down), page rate (share truly needing immediate response, aiming for 10%-20%), false positive rate (alerts confirmed as "no action needed"), and MTTA/MTTR (time to acknowledge and resolve). If the false positive rate stays high, alert rules need tightening; if the page rate is too low, many "page-level" alerts should be demoted to ticket-level. Spending 30 minutes a week reviewing these numbers beats relying on the feeling that "alerts seem fewer".
16IDC Take
Small teams don't need a heavyweight on-call program like a big company, but two principles are universal: every alert must have a clear next action, or it gets deleted; and make on-call a rotation — even three people rotating significantly reduces individual fatigue. For scope and tooling see the monitoring and alerting guide and deploying Uptime Kuma; for review templates see the incident postmortem template; and calibrate whether alerts align with business goals using SLO/SLI and error budgets. For rule writing and dashboards, start with Prometheus and Grafana basics. See more in the Monitoring & Alerting category.
Reference: Google SRE Workbook, "Being On-Call" https://sre.google/sre-book/being-on-call/; "On-Call Rotations: How Best to Awaken Engineers" https://sre.google/sre-book/oncall/