Back to Intelligence

The 2 AM False Positive: Why Alert Fatigue Is a Signal Quality Problem, Not a Volume Problem

SA
AlertMonitor Team
October 1, 2026
10 min read

AWS Just Made False Positives a Board-Level Topic

Amazon Web Services recently unveiled the Deception Benchmark — a data set of 14,822 code samples, built after evaluating 12 AI models from five different providers, designed specifically to test whether a model can tell a genuine vulnerability from code that merely looks risky but is actually safe.

Read that again. One of the largest technology companies on the planet had to build a formal benchmark because their AI scanners were crying wolf too often. The models weren't finding too little — they were finding too much noise, and the humans downstream stopped trusting them.

If you run IT operations, staff an MSP NOC, or carry the on-call phone, you don't need AWS to tell you this. You live it every time your monitoring tool pages you at 2 AM for a CPU spike caused by a scheduled backup job that has run every night since March. The alert fatigue crisis in IT operations is the same disease AWS is attacking in vulnerability scanning: too many signals, too little truth.

The interesting part isn't that AWS built the benchmark. It's the admission underneath it: an alert you can't trust is worse than no alert at all.

The Problem in Depth

What your current stack gets wrong

Most IT teams run some combination of an RMM platform, a standalone monitor, a separate helpdesk, and a network tool — Ninja, ConnectWise, SolarWinds, PRTG, Datto, plus whatever ticketing system came bundled in. Each one generates alerts. None of them share state. The result is a set of failure modes every practitioner will recognize instantly:

  • Threshold-only alerting with zero context. CPU over 90% for five minutes equals a page. The engine has no idea that this host spikes to 95% every night at 1 AM when the backup job runs — and has done so for eight months without a single real incident.
  • No deduplication, so one failure becomes a storm. A core switch port starts flapping. Within four minutes you have 60 alerts: the switch itself, every access switch behind it, every server on those VLANs, the printers, the door controller. Which alert is the root cause? Good luck figuring that out at 3 AM.
  • Maintenance windows that live only in your calendar. You scheduled the domain controller reboot for Saturday at 11 PM. The monitoring tool never got the memo. Now the escalation chain has fired and your after-hours tech is awake for a planned change.
  • Alerts with no definition of healthy. Disk usage high: 91% is missing everything a human needs to act: which server, which client, is this a sudden spike or a slow trend, what did it look like yesterday, and what is the actual fix.

Why these gaps exist

It isn't because the vendors are careless — it's architecture. Legacy alerting engines were designed for a static datacenter: fixed hosts, fixed thresholds, page on breach. Modern environments are dynamic — scheduled jobs, patch cycles, backup windows, auto-scaling — so a static threshold guaranteed to breach during normal operations is a false positive factory running on autopilot.

And because the RMM, the monitor, and the helpdesk are separate products stitched together through acquisitions and API syncs, they don't share context. The helpdesk doesn't know there's an active incident. The monitor doesn't know there's a maintenance window. The RMM doesn't know the disk filled up because the monitor never told it. Every integration bolted between tools loses information in translation.

What it actually costs you

  • Industry surveys consistently put false positives and duplicates at a third or more of total alert volume. If your team receives 300 alerts a week, roughly 100 are noise — and each one costs 5 to 20 minutes of triage nobody budgeted for.
  • Mean time to acknowledge climbs. When most pages are junk, techs stop answering on the first buzz. Real incidents — the actual RAID degradation, the actual precursor to an outage — sit in the queue behind fourteen backup-window CPU alerts.
  • The boy who cried wolf, with downtime attached. Every experienced IT manager has a story about the alert that fired for weeks, got auto-acknowledged, and turned out to be the early warning of the eventual outage.
  • SLA reporting becomes fiction. Your helpdesk says average response was 12 minutes. Your monitoring tool says pages sat unacknowledged for 40. Both are telling the truth about different halves of the same incident, and neither number survives contact with the client QBR.
  • Burnout. A rotation where the phone buzzes a dozen times a night for nothing doesn't just exhaust people — it trains your best techs to ignore the tool, then blames them when something real slips through.

Consider the scenario: it's 2:14 AM. You manage a client with a DC, a file server, and 40 workstations on contract. Your phone buzzes: High CPU — SRV-FS01. You log into the RMM — CPU is at 96%. Backup job or cryptolocker event? You open the monitoring console in a second tab and the helpdesk in a third to check for user reports. Twelve minutes and five tabs later you confirm it's the nightly backup. That alert will fire again tomorrow. And the night after.

That's not a monitoring system. That's a noise machine with a pager attached.

How AlertMonitor Solves This

AlertMonitor was designed around a specific insight: alert fatigue isn't a volume problem — it's a signal quality problem. You don't fix it by alerting less. You fix it by making every alert carry truth.

Here's what that means concretely:

Every alert ships with full context. Device, client, what changed, and what healthy looks like for that asset. When SRV-FS01 alerts on CPU, the alert tells you it correlates with the 1 AM backup window, that this exact pattern has occurred hundreds of times without incident, and what the baseline looks like. Your tech makes a ten-second decision instead of a twelve-minute investigation.

Smart deduplication collapses cascades. Because AlertMonitor maps your network topology, it knows which devices sit behind which. When the core switch flaps, 60 downstream alerts collapse into a single incident: SW-CORE-01 port 24 flapping; 14 downstream devices affected. One page. One root cause. One action.

Maintenance window suppression that actually suppresses. Schedule the DC reboot, the patch cycle, the backup job — and AlertMonitor holds alerts for those assets during the window, tagging them for review instead of paging anyone. Planned changes stop costing sleep.

Multi-level on-call routing that matches reality. Escalation policies per client, per severity, per time of day. A disk warning routes to the next-morning queue; RAID degradation pages the on-call immediately and escalates to the senior tech in 15 minutes if unacknowledged. You define what urgent means once, and the routing holds across every client you manage.

One platform, so the pivot is instant. The alert opens with the device dashboard attached. From the alert itself you launch a remote session through the integrated RMM, check patch compliance, see the topology map of everything connected, and attach the full timeline to a helpdesk ticket — without switching tools. Monitoring, RMM, helpdesk, topology, and patching are one system, so the alert-to-resolution path is seconds, not tabs.

The measurable difference: alerts that used to take 30 to 40 minutes to acknowledge and investigate get acknowledged in under two and resolved in ten — because the alert already contains the investigation. And because deduplication and maintenance suppression strip the noise out first, the pages that do get through are the ones worth waking up for.

Practical Steps: Clean Up Your Alert Pipeline This Week

You don't need a platform migration to start improving signal quality. Here's what you can do today.

1. Find your noisiest alert sources

On Windows servers, pull the top error sources from the last seven days. This is usually where phantom alerts are born:

PowerShell
Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2; StartTime=(Get-Date).AddDays(-7)} -ErrorAction SilentlyContinue |
    Group-Object ProviderName |
    Sort-Object Count -Descending |
    Select-Object Count, Name -First 10

Whatever tops this list — a flaky NIC driver, a service that crashes nightly — is either a real problem to fix or an alert rule to tune. Both outcomes reduce noise.

2. Check disk space proactively instead of paging on a static threshold

A flat 90% threshold fires either too late (the disk runs from 90% to 100% between checks) or too often (the server has sat at 91% for a year). Replace the pager with a scheduled sweep that flags anything under 15% free:

PowerShell
$servers = 'FS01','FS02','SQL01','DC01','APP01'
Get-CimInstance -ClassName Win32_LogicalDisk -Filter 'DriveType=3' -ComputerName $servers |
    Select-Object SystemName, DeviceID,
        @{n='SizeGB';e={[math]::Round($_.Size/1GB,1)}},
        @{n='FreeGB';e={[math]::Round($_.FreeSpace/1GB,1)}},
        @{n='FreePct';e={[math]::Round(($_.FreeSpace/$_.Size)*100,1)}} |
    Where-Object { $_.FreePct -lt 15 } |
    Sort-Object FreePct

Run it on a schedule and feed the output into a ticket — and configure AlertMonitor's disk monitoring to alert on trend (filling fast) rather than a static line in the sand.

The same idea on Linux, one line for anything over 85% used:

Bash / Shell
df -h --output=source,pcent,target -x tmpfs -x devtmpfs | awk 'NR>1 && substr($2,1,length($2)-1)+0 > 85 {print $1, $2, $3}'

3. Verify critical services are running AND set to start

Half of all server down pages are really a service stuck in Stopped or flipped to Manual after a patch cycle. Check both status and startup type:

PowerShell
Get-Service -Name 'wuauserv','Spooler','DFSR','Netlogon' |
    Select-Object Name, Status, StartType |
    Format-Table -AutoSize

In AlertMonitor, agent-monitored services alert on state change with the remediation attached — restart the service directly from the alert, no remote session required.

Quick Linux equivalent to confirm a service is both active and enabled at boot:

Bash / Shell
systemctl is-active nginx && systemctl is-enabled nginx

4. Map your known-noisy windows and suppress them properly

List every scheduled job that legitimately spikes resources — backups, AV scans, patch deployments, index rebuilds. For each one, define a maintenance window in AlertMonitor scoped to the exact assets and time range. Alerts during the window get tagged and logged for review — visible, auditable, and silent to the pager.

5. Audit your escalation policies against reality

For each alert class, ask: who needs to know, how fast, and what happens if they don't respond? If every alert escalates the same way, nothing is actually prioritized. Severity-based routing in AlertMonitor means a printer offline goes to the morning queue while a domain controller unreachable goes straight to the on-call phone — and that distinction holds across every client on the books.

The AWS Deception Benchmark exists because the industry finally admitted that an alert you can't trust is worse than no alert at all. Your on-call rotation deserves the same standard: every page real, every page actionable, every page carrying the context to act. That has been the design principle behind AlertMonitor from day one — fewer overnight pages, faster response, and teams that aren't burned out by their own monitoring tools.

Related Resources

AlertMonitor Alert Management & On-Call Operations AlertMonitor Platform Overview Book a Demo Alert Management & On-Call Operations Resources

alert-fatiguealert-managementon-callescalation-policyalertmonitoron-call-operationsfalse-positives

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.