What alert fatigue actually is — and why it kills reliability
Alert fatigue is the single most common way monitoring setups fail in practice. Not because of missing coverage, but because of too much noise. When engineers receive hundreds of alerts per week — most of them spurious, flapping, or completely expected — they stop trusting the system. They snooze notifications, mark incidents as read without investigating, and eventually the entire monitoring stack becomes background noise.
Then a real outage happens, and nobody responds.
The paradox: the more you monitor without tuning, the worse your alerting gets. Here's the architecture that fixes it.
Three-tier alerting architecture
Well-designed alerting has three distinct layers, each serving a different purpose:
- Detection layer — High-frequency checks that catch problems fast. Should be very sensitive. This is the monitoring check itself.
- Confirmation layer — Filters out transient failures before escalating. Uses consecutive failure counts to separate real outages from network blips.
- Escalation layer — Ensures the right person gets paged if no one responds. Time-based, ordered notification sequences.
Most monitoring tools only implement the detection layer. You set up a check, it fires immediately on the first failure, and you get woken up at 2am for a DNS hiccup that resolved itself in 8 seconds. Sentro gives you all three layers.
The confirmation layer: confirmations
The most common source of alert spam is transient failures. A momentary network blip, a slow DNS resolution, a database connection timeout that the retry logic handles automatically. If your monitor fires on the first failure, you're alerting on events that have no meaningful impact on your users.
Every Sentro monitor has a confirmations setting: how many checks in a row must agree before an outage is recorded. With a 30-second check interval:
- 1 check — Maximum sensitivity. Any single failure opens an incident. Use only where a request lost in transit is itself worth paging someone for.
- 2 checks (default) — A solid default. Filters isolated transport failures. Adds only 30 seconds to detection time for real outages.
- 3+ checks — Conservative. Use for services with known instability, or where the cost of a false alarm (waking someone up) is high relative to a 60-second detection delay.
Confirmation applies to recovery too, so a flapping service does not produce a stream of alternating "down" and "back up" notifications. It does not distort your numbers: an outage is recorded as starting at the first failed check and ending at the first check that answered normally.
Separately, each alert rule has its own consecutive failures threshold controlling how long an outage must persist before that particular channel is told — which is how you page Slack immediately and PagerDuty only if the outage is still going.
This single setting typically reduces alert volume by 60–70% without meaningfully increasing mean time to detect real outages.
The filter layer: cooldown periods
Cooldowns prevent the system from re-alerting while a known incident is ongoing. Without them, a monitor firing every 30 seconds during a 2-hour outage generates 240 notifications — all for the same incident, all completely useless after the first one.
Sentro's cooldown works per-rule, per-trigger: once a "DOWN" alert fires, the same rule won't trigger again for the configured period. Choose based on your incident response expectation:
- 5 minutes — Fast-response teams. Gets you reminded quickly if you're still in triage.
- 30 minutes — Default for most production services. Acknowledge once, silence while you fix it.
- 60–1440 minutes — For SSL expiry or domain warnings. You want a daily reminder approaching the deadline, not a notification every 30 seconds.
The escalation layer: escalation policies
Cooldowns reduce noise. But they create a gap: what if the first person notified doesn't see the alert? An escalation policy closes this gap by defining a sequence of contacts to try, each with a delay:
Step 0 (0 min) → #incidents Slack channel
Step 1 (5 min) → On-call engineer email
Step 2 (15 min) → On-call PagerDuty
Step 3 (30 min) → Engineering manager PagerDuty
The critical property: each step only fires if the incident is still open. The moment someone resolves the incident, all pending escalations are cancelled. You're never over-notified for problems that are already being handled.
In Sentro, you create escalation policies in Settings → Escalation Policies and attach them to individual monitors.
A recommended production setup
Here's a starting configuration for a production SaaS application with a small on-call rotation:
| Purpose | Trigger | Consecutive | Cooldown | Channel |
|---|---|---|---|---|
| Fast notification | DOWN | 1 | 5 min | #incidents Slack |
| Recovery | UP | 1 | 0 min | #incidents Slack |
| Degraded state | DEGRADED | 3 | 30 min | #alerts Slack |
| SSL reminder | SSL_EXPIRING | 1 | 1440 min | |
| Escalation policy | — | — | — | → PagerDuty at +15 min |
With this setup, a real outage pages someone within 60–90 seconds. A transient failure produces zero notifications. A prolonged outage with no response escalates to on-call within 15 minutes. And SSL certificates never expire silently.
The key insight
Reliable alerting isn't about alerting more — it's about alerting correctly. The teams with the best on-call culture tend to have the most aggressively tuned alert filters. High signal, low volume. Every alert means something. Every page is real. That's what makes engineers actually respond.
Get started
Start monitoring for free
5 monitors, 5-minute intervals, email + Slack alerts. No credit card required.