The cure for alert fatigue is not "care harder". People already care. The problem is conditioning: if nine of ten interruptions require no immediate action, the tenth arrives through a channel the brain has learned to classify as ambient weather.
An alert earns the right to page when it indicates meaningful user or system impact, needs action soon, reaches someone capable of acting, and contains enough context to begin. Miss any one of those conditions and you probably have a ticket, dashboard signal or log message wearing a pager costume.
Establish a baseline before tuning
Take two to four weeks of alert history and calculate a small set of metrics. Per team and service is more useful than one impressive company-wide number.
| Metric | Simple definition | What it reveals |
|---|---|---|
| Actionable page rate | Pages that caused immediate useful action / all pages | Whether paging is trusted work or noisy telemetry. |
| After-hours page count | Pages outside the responder's normal hours | The human cost hidden by total alert volume. |
| Repeat rate | Repeated pages for the same underlying condition / all pages | Flapping checks, poor grouping or unresolved causes. |
| Escalation-without-ACK rate | Alerts that moved past the primary / paged alerts | Delivery, workload or responder-readiness problems. |
| Median and p90 ACK time | Time from notification to acknowledgement | Typical response and the painful long tail. |
| No-action resolution rate | Pages closed without remediation / all pages | Candidates for removal, delay or non-paging delivery. |
Do not weaponize these metrics against responders. A missed ACK may mean a dead notification channel or three simultaneous incidents. Use the data to debug the system, not to build a leaderboard for who sleeps least.
Run every page through one decision
| Question | If yes | If no |
|---|---|---|
| Does this indicate real or imminent impact? | Continue evaluating. | Keep as telemetry or a dashboard signal. |
| Must a human act before the next working period? | Continue evaluating. | Create a ticket or working-hours notification. |
| Is there a safe, specific action? | Put it in the alert/runbook. | Investigate or automate before paging. |
| Can the receiving team perform that action? | Route to that owner. | Fix ownership and permissions. |
If the expected response is "watch it for a while", the monitoring system can probably do the watching.
Fix the top repeat offenders first
Sort alerts by page count, after-hours count and total responder time. The top five rules often generate a surprisingly large share of the pain. For each one, choose an explicit disposition:
- Delete: it has no meaningful action or duplicates another signal.
- Demote: turn it into a ticket, dashboard event or business-hours message.
- Delay: require the condition to persist before paging.
- Group: send one incident for one failure domain instead of one page per pod.
- Route: deliver it only to the team that can fix it.
- Repair: fix the underlying service problem that keeps firing.
Assign an owner and deadline to the disposition. A document titled "noisy alerts" without owners is merely a curated exhibition of suffering.
Prefer symptoms over internal causes for paging
A user-visible symptom such as sustained checkout failure usually deserves faster attention than every possible internal cause. Ten downstream checks may all turn red when one database fails. Paging on all ten gives the responder ten notifications and no additional database.
Keep cause signals for diagnosis, but consider paging on a small number of service-level symptoms. Attach dashboards, logs and correlated context so the responder can move from symptom to cause without guessing.
Add time to thresholds
Instantaneous threshold crossings are excellent at detecting CPU spikes caused by the monitoring query itself. Require a condition to persist long enough to exclude harmless transients while staying inside the response budget.
Weak: CPU > 90% once
Better: CPU > 90% for 10 minutes AND latency/error impact exists
Weak: one failed health check
Better: failure across multiple checks or locations for 3 minutes
Use hysteresis where possible: fire at a high threshold and recover at a lower one. This prevents an alert from repeatedly opening and closing around a single boundary like a cat reconsidering a doorway.
Route by ownership and context
An alert should go to the team that can actually fix it. Broadcasting every alert to everyone feels safe for about two days, then it becomes background radiation. Use stable labels such as service, team, environment, cluster and severity.
service=payments-api
team=payments
environment=production
severity=critical
runbook=https://runbooks.example/payments/high-error-rate
In IncidentRelay, intake routes connect sources to teams, services, rotations or escalation policies and notification channels. Keep per-route tokens scoped to the intended integration, then use matchers to prevent a generic endpoint from becoming the town square.
Nobody:
Absolutely nobody:
Monitoring at 02:00: "CPU was spicy for 11 seconds."
Silence deliberately and narrowly
Maintenance windows, load tests and known temporary conditions need silences. The important word is deliberately. Every silence should have an owner, a reason, a narrow matcher and an expiry. "Forever" is not a maintenance window; it is a small cover-up.
IncidentRelay silence conditions use AND semantics. Prefer:
{
"alertname": "DiskFull",
"instance": "host1.example.com",
"environment": "staging"
}
Avoid an empty matcher or a broad condition such as every critical alert unless you truly intend to suppress an entire team's notifications. After creating the silence, send or inspect a representative alert and confirm the stored labels match your assumptions. The Silences guide includes exact matcher forms and troubleshooting steps.
Make every remaining page self-contained
A useful page should answer these questions without requiring a scavenger hunt:
- What service and environment are affected?
- What user impact or risk triggered the page?
- When did it start and is it still firing?
- Which dashboard, logs and traces should I open?
- What is the first safe diagnostic or mitigation step?
- Who owns the service and how do I escalate?
- What changed recently?
A runbook does not need to be a novel. A reliable first page can contain validation queries, rollback or mitigation steps, safety warnings and a clear "escalate when" condition. Test it with someone who did not write it.
Use acknowledgement as an operational signal
An ACK tells IncidentRelay and the team that a human owns the alert. It should stop reminder and escalation noise while keeping the work visible. It is not a resolution and not a substitute for action.
Review alerts that are acknowledged immediately but never produce action; they may be habitual button-clicking. Review alerts that often escalate; they may expose a broken channel, overloaded primary, bad schedule or unrealistic delay. The ACK timeline is diagnostic evidence.
Debug routing with evidence
When a page reached the wrong team or disappeared behind maintenance, use the IncidentRelay explain trace to inspect the matched route, team, service, assignment, silence or maintenance decision and notification outcome. This is faster than asking six people which YAML file feels responsible.
A 30-day noise reduction loop
- Days 1-3: export a baseline and identify the top ten page sources.
- Week 1: delete or demote obvious non-actionable pages; repair broken ownership.
- Week 2: tune persistence, grouping and recovery behavior for repeat offenders.
- Week 3: improve runbooks and notification context; test escalation paths.
- Week 4: compare actionable rate, after-hours volume, repeat rate and ACK latency with the baseline.
Repeat monthly and review every new paging rule before enabling it. Require an owner, severity, response window, runbook and test evidence. A pager is a smoke alarm, not a todo list with sirens.
Want to make this less theoretical?
IncidentRelay gives you schedules, rotations, routing, escalations and alert actions in one open-source, self-hosted package. The pager may still be rude, but at least it will be organized.