Observability and reliability
Alert fatigue and cleanup
When pages are frequent or useless, responders stop trusting them. Measure the alerting system itself, and run a regular cleanup loop that fixes, widens or deletes noisy rules.
Alert fatigue happens when pages are so frequent or so useless that responders mute the channel, auto-acknowledge, or leave the rotation. It is a reliability problem in the alerting system, not a flaw in the people using it. The fix is to measure the alerts and prune them on a schedule, the same way you would handle a noisy service.
The big idea
A smoke alarm that goes off every time you make toast gets unplugged. When a real fire comes, nobody notices. The trust in the alarm is the thing you are protecting, and every false alarm spends some of it.
Walking through it
Track a few simple numbers for the alerting system:
- Pages per on-call shift, and per service.
- The share of pages that led to a real incident, compared with pages that were acknowledged and closed.
- Median time to acknowledge and time to mitigate.
- The oldest flapping alert, the one that fires and resolves over and over.
Then run a monthly cleanup loop:
- List the noisiest alerts by how often they fired.
- For each one, do one of four things: fix the system behind it, widen the
forwindow, raise the threshold, or turn it into a ticket. Delete it if nothing needs it. - Require a runbook link on every page-level alert. No runbook, no page.
- After each incident, ask whether the alert fired too early, too late, or not at all. File one alert-quality action item.
Warning
Silencing an alert in the pager tool without changing the rule just moves the problem to the next shift. Change the rule in code review, the way you would change any production code.
An example of the loop
One team averaged nine pages a night. An audit found four were replica lag during a daily batch job, two were disk warnings at 70% on log volumes that never filled, and one was a dependency blip that cleared itself in 90 seconds. They moved the replica lag to a ticket, raised the disk page to 90% with a weekly capacity ticket at 75%, and required five minutes of sustained burn before paging on the dependency. Pages fell to about 1.5 per night. Real checkout failures still woke someone within minutes.
The work was alert design, not caring more.
Common mistakes
- Adding alerts after every incident and never removing any. Each incident should also remove or improve an alert.
- Tracking page count only. Track the share of pages that were actionable too.
- Muting an alert "for now". Give every silence an owner and an end time.
Check yourself
- A rule fires 40 times a week, and each time it clears itself within two minutes. What do you do?
Widen its
forwindow, or convert it to a ticket, then check whether it still catches anything real. - Why track the share of pages that led to real incidents? It shows how much of the pager noise is signal, which tells you where to prune first.
Key takeaways
- Measure the alerting system: pages per shift, actionable share, time to acknowledge.
- Prune on a fixed schedule: fix, widen, raise, ticket, or delete.
- Every page needs a runbook, and every rule change goes through code review.
Further learning
The on-call side of this is in designing on-call. For what deserves a page in the first place, see alerting on symptoms.
My Philosophy on AlertingMy Philosophy on Alerting based my observations while I was a Site Reliability Engineer at Google Author: Rob Ewaschuk <rob@infinitepigeons.org> Introduction Vernacular Monitor for your users Cause-based alerts are ba…Google DocsRelated
Metrics, dashboards and alerting
Golden signals, RED and USE, Prometheus histograms and alerts that page you only when users are hurting.
Alerting on symptoms
Page a human only for user pain, such as an error ratio or a burn rate, and send everything else to a ticket. Every page needs a runbook and a first step.
Designing on-call
Sustainable rotations, executable runbooks, toil budgets and a paging policy that keeps humans healthy while production stays covered.