Deep DiveFeatured

Reducing Alert Fatigue: Cooldowns, Confirmation Checks, and Escalation Policies

Alert fatigue is the silent killer of monitoring setups. Most teams get the detection layer right but neglect the filter and escalation layers. Here's how to get all three working together.

March 25, 2026
8 min read
#alerting#on-call#reliability

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:

  1. Detection layer — High-frequency checks that catch problems fast. Should be very sensitive. This is the monitoring check itself.
  2. Confirmation layer — Filters out transient failures before escalating. Uses consecutive failure counts to separate real outages from network blips.
  3. 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:

PurposeTriggerConsecutiveCooldownChannel
Fast notificationDOWN15 min#incidents Slack
RecoveryUP10 min#incidents Slack
Degraded stateDEGRADED330 min#alerts Slack
SSL reminderSSL_EXPIRING11440 minEmail
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.

Tagged:#alerting#on-call#reliability

Get started

Start monitoring for free

5 monitors, 5-minute intervals, email + Slack alerts. No credit card required.

Reducing Alert Fatigue: Cooldowns, Confirmation Checks, and Escalation Policies — Sentro Blog | Sentro