Skip to main content
Cloud DevOps Solutions
Get a quote Talk to an engineer

SRE & Incident Response

Alert Fatigue: Auditing and Reducing Alert Noise

An alert quality audit reviews every alert rule against a simple test: does it need a human to act now? We analyse firing history, retire or downgrade noisy alerts, tune thresholds and routing, and add grouping and inhibition so on-call engineers are paged only when action is required.

Key takeaways

  • Every paging alert should be urgent, actionable and tied to user impact. Everything else is a ticket or a dashboard.
  • The audit starts with data: which alerts fire, how often, and what humans did about them.
  • Most noise comes from a few rules. Fixing the top ten usually removes a large share of pages.
  • Grouping, inhibition and sensible durations reduce duplicate pages without hiding real problems.
  • Noise returns unless alert review becomes a standing habit.

The real cost of noisy alerts

A noisy pager is not just annoying. Each unnecessary page interrupts sleep or deep work, teaches engineers that alerts are usually false, and quietly raises the odds that the one real page is ignored. Teams in this state often mute channels, add “just acknowledge it” habits or stop trusting the monitoring altogether. Meanwhile the dashboards and tools keep generating more.

Cleaning this up is one of the fastest wins in our SRE and incident response service. It costs little, improves on-call quality of life immediately, and makes every later reliability investment more effective.

What good looks like

Every paging alert passes three tests:

  1. Urgent. It needs action now, not tomorrow.
  2. Actionable. There is something the on-call engineer can do, described in a runbook.
  3. Meaningful. It reflects, or reliably predicts, harm to users or the business.

Anything failing a test belongs elsewhere: a ticket for later work, a dashboard for context, a log line for forensics, or the bin. A healthy system has few pages, and most of them lead to real action.

How the audit works

Start with evidence

Opinions about which alerts are noisy are unreliable. Data is not. We pull firing history from Alertmanager and your paging tool and rank rules by volume. A query like this against Prometheus shows which alerts fire most often:

topk(15, sum by (alertname) (count_over_time(ALERTS{alertstate="firing"}[30d])))

Note that ALERTS records firing state per evaluation, so the count shows relative frequency rather than a number of distinct incidents. We combine it with paging-tool data on acknowledgements, resolution times and notes. A rule that fires hundreds of times and is always resolved without action is the first target.

Score and decide

For each rule we record whether humans acted, how quickly it cleared on its own, whether a runbook exists and whether it duplicates another alert. The outcome for each is one of:

OutcomeWhen
KeepUrgent, actionable, linked to impact
TuneRight idea, wrong threshold or duration
DowngradeUseful, but not urgent. Becomes a ticket or chat message
MergeSeveral alerts describing the same fault
DeleteNever acted on, no longer relevant, or monitors a retired system

Fix the structure, not only the numbers

Raising thresholds helps but often hides a design problem. Structural fixes matter more:

  • Alert on symptoms, not causes. Page on error and latency burn rather than on CPU. Our guidance on burn rate alerts covers the replacement pattern.
  • Use for durations sensibly. A short blip that self-heals should not page.
  • Group related alerts. One incident should produce one notification, not fifty.
  • Inhibit dependent alerts. If the node is down, suppress the pod alerts on it.

A compact Alertmanager example showing grouping and inhibition:

route:
  group_by: [cluster, service]
  group_wait: 30s
  group_interval: 5m

inhibit_rules:
  - source_matchers: [alertname="NodeDown"]
    target_matchers: [severity="warning"]
    equal: [node]

The timing values are illustrative. Right values depend on how quickly you need to know, and we set them with your on-call engineers.

Trade-offs and judgement

Fewer alerts, more risk? Removing an alert always carries some risk. We reduce it by replacing noisy cause alerts with symptom alerts that cover the same failures, keeping a small set of predictive alerts for things like disk, certificates and quotas, and watching incident data after each change.

Tuning versus rebuilding. If your alert estate grew by accretion with hundreds of rules, a partial rewrite around SLOs is often more effective than endless threshold tweaking. If you have a few dozen reasonable rules, tuning is enough.

Tool-specific limits. Cloud-native alarms in services like CloudWatch have fewer grouping and inhibition features than Alertmanager. Where needed we route alarms into a central place so shaping logic is in one location.

When not to bother. If your pager is quiet and every page is useful, you do not need an audit. A quick review once or twice a year is enough.

Common failure modes

  • Copying community alert rules wholesale. Generic rules fire on things that do not matter for your product.
  • Alerting on every error. Some background error rate is normal.
  • No owners. Nobody feels entitled to delete an old alert.
  • Silencing instead of fixing. Muting hides the problem until it hurts.
  • One-off clean-up. Noise returns within months without a review habit.

For examples of well-formed rules, see our Prometheus alerting rules guide.

A worked example of triaging one noisy alert

Take a hypothetical alert that fires on any pod restart in production. The audit asks four questions in order. Did a human act on it? If the answer is mostly no, it is a candidate for removal. Did it correlate with customer impact? If restarts happened without any failed requests, the signal belongs on a dashboard, not in a pager. Does another alert already cover the same failure? If a latency or error-rate alert would have fired anyway, this one is a duplicate. Finally, would a ticket in working hours be enough?

The usual outcome is a demotion rather than deletion: the rule keeps firing, but its route changes from page to ticket, and a restart-loop condition (many restarts in a short window) keeps a page. Record every decision in the audit sheet with the reason, so the next engineer does not resurrect the old rule by accident.

Grouping and inhibition

Much noise is one fault reported many times. In Alertmanager, group_by collapses alerts for the same cluster and service into a single notification, and inhibition rules mute downstream symptoms while a root-cause alert such as a node-down or database-down is active. We review these settings in every audit because defaults rarely match how your services depend on each other.

Delivery and handover

We deliver the audit report listing every rule and its outcome, the updated rule files and routing configuration in your repository, a before and after comparison of page volume, and a short guide on adding new alerts so they follow the same standard. A recurring review slot is agreed so noise does not creep back. Teams on Managed DevOps get this as an ongoing practice.

How to tell it is working

Measure pages per on-call shift, the share of pages that led to action, out-of-hours interruptions and time to acknowledge. Add a qualitative check: ask the on-call engineers whether they trust the pager. If page volume falls while real incidents are still caught, and engineers stop dreading their shift, the audit has done its job. To start with a review of your current alerts, talk to us.

References

How we deliver it

  1. 01

    Export alert history

    We collect firing history and page data from Alertmanager and your paging tool for a representative period.

  2. 02

    Score each alert

    Each rule is assessed on whether it was actionable, urgent, user-impacting and linked to a runbook.

  3. 03

    Triage into outcomes

    Rules are kept, tuned, downgraded to tickets, merged, or deleted, with a reason recorded for each.

  4. 04

    Tune and restructure

    We adjust thresholds, durations, grouping and inhibition, and replace symptom clutter with SLO-based alerts where suitable.

  5. 05

    Roll out safely

    Changes are made in stages with before and after measurements, so we can reverse any that hide something important.

  6. 06

    Set a review cadence

    A short recurring review of the noisiest alerts keeps the system healthy after we leave.

Tools and technologies

PrometheusAlertmanagerGrafanaPagerDutyOpsGenieGrafana OnCallLokiPromQLTerraform

Frequently asked questions

What is alert fatigue?
Alert fatigue happens when engineers receive so many alerts, many of them unactionable, that they stop treating them as urgent. Response slows, pages are muted and a genuine incident is missed among the noise. It is also a major cause of on-call burnout and resignations.
How do you decide whether an alert should page?
We apply a short test: does it indicate or predict user-visible harm, does it need action now, and can the on-call engineer do something about it? If any answer is no, it becomes a ticket, a dashboard panel or gets deleted. Cause-based alerts for imminent failures are kept.
Will removing alerts make us less safe?
Not if it is done properly. We tie removals to evidence, replace clusters of cause alerts with SLO burn alerts that cover user impact, keep alerts for predictable failures, and monitor incidents after changes. The aim is fewer, better alerts, not blindness.
What is alert inhibition?
Inhibition suppresses lower-value alerts while a related higher-value alert is firing. For example, if a whole node is down, you do not also need alerts for every pod on it. Alertmanager supports this natively through inhibit rules, which reduces duplicate pages during large failures.
How long does an alert audit take?
It depends on the number of rules and how much history exists. A modest estate can often be reviewed in days, with tuning continuing for a few weeks while we watch the effect. We agree scope after a short look at your current alert volume.

Talk to an engineer about alert noise reduction

Book a free 30-minute call. We review your current setup and tell you honestly whether and how we can help.

Written by Saddique Khan, DevOps / SRE / Cloud Consultant Engineer. Last updated 2026-10-08.