Amazon CloudWatch alarms are essential for reliability. They are also billed per alarm
and per metric—regardless of whether they trigger. In busy AWS environments, alarms
proliferate via Auto Scaling, CloudFormation, and service defaults. The result is alarm
sprawl: thousands of alarms that never notify anyone, never transition state, and never
get cleaned up. 
 
To piggyback on the famous expression, if a CloudWatch Alarm goes off in a forest and nobody hears it,
do you still want to pay for it?
 
In this post, we cover CloudWatch alarm pricing, the most common waste patterns,
and how CloudFix identifies and helps you clean up unused alarms safely.

Pricing of CloudWatch Alarms

Let’s do a quick overview of CloudWatch alarm pricing. This data is available from the AWS CloudWatch Pricing Page.
Critical detail: you pay for alarms by their existence, not by activity. Dormant alarms still incur monthly charges.

Stories of Disconnected CloudWatch Alarms

 
Reddit – Perpetually charged for CloudWatch alarms from months ago?

 

Cloudwatch deleting alarms with INSUFFICIENT_DATA

Cloudwatch deleting alarms with INSUFFICIENT_DATA

Mass Remove Cloudwatch Alarms for Non-Existant Resources

Mass Remove Cloudwatch Alarms for Non-Existant Resources

This is just a small sample of AWS users who have came across this issue. Note that one of the Reddit posts are 10 years old! Clearly, we are on to something. In the Stack Overflow post, we are seeing that people are trying to automate this. At CloudFix, we’ve already done this work, tested it, and delivered serious savings for our customers.

CloudFix CloudWatch Alarm Cleanup Points

  • Alarms cost money whether they trigger or not
  • Two dominant waste categories:
  • Alarms stuck in INSUFFICIENT_DATA for 30+ days (metrics disappeared or resources deleted)
  • Alarms with no notification targets (no AlarmActions, OKActions, InsufficientDataActions)
  • In enterprise accounts, alarm sprawl routinely reaches thousands of alarms
  • Real cost impact: documented cases show thousands of dollars wasted annually

A Concrete Example

An enterprise account discovered ~5,000 unused alarms across regions and accounts. Between standard, high-resolution, composite, and anomaly-detection alarms, their costs averaged out to roughly $1.60/alarm/month—about $8,000 per month. Deleting dormant and no-target alarms eliminated that spend while preserving meaningful monitoring.
 

How CloudFix’s Alarm Cleanup Finder/Fixers Work

Finding Alarm Waste

We analyze CloudWatch alarms across accounts and regions using DescribeAlarms and DescribeAlarmHistory. We look for two patterns:

Unused Alarms (INSUFFICIENT_DATA)

  • State: INSUFFICIENT_DATA
  • History: No transitions to OK or ALARM over a configurable lookback (default 30 days)
  • Common causes: terminated EC2s, renamed metrics/dimensions, disabled publishing

No-Target Alarms

  • No actions configured: empty AlarmActions, OKActions, and InsufficientDataActions
  • Age gate: older than a configurable threshold (default 30 days)
For both categories, we apply sensible guardrails (e.g., minimum alarm inventory in a region, age thresholds) to ensure we only flag clear-cut waste.

Estimating Cost and Savings

 
We combine your alarm inventory with regional price points to estimate current monthly costs and potential savings. At scale, even a modest number of high-resolution or composite alarms can materially shift spend.

The Cleanup Process

Cleaning up alarms is simple and reversible (you can recreate alarms any time):
 
# List candidate alarms (example)

aws cloudwatch describe-alarms \
    --state-value INSUFFICIENT_DATA \
    --query'MetricAlarms[].AlarmName' | cat

 

Delete specific alarms

aws cloudwatch delete-alarms \
    --alarm-names "my-stale-alarm-1" "my-stale-alarm-2"
 
Tip: Before deleting, export alarm definitions you want to keep using your IaC (e.g., CloudFormation/Terraform) or by saving describe-alarms output.

Multi-Account and Multi-Region

 
Alarm sprawl is usually multi-account and multi-region. CloudFix scans across your
organization and summarizes waste and savings with per-account and per-region rollups.
 

CloudFix Finder/Fixer

Here is what it looks like in the CloudFix UI:

CW Alarm a medium fixer

CloudWatch Delete Unused Alarms, a Medium-Difficulty Finder/Fixer
 
Massive savings
 
Potential Savings for Deleting Unused Alarms
 

Facts about CloudFix Alarm Cleanup

  • Detection windows and age thresholds are configurable (default 30 days)
  • Uses DescribeAlarms and DescribeAlarmHistory for high-confidence candidates
  • Produces explainable reports:
  • Current inventory by account/region
  • Candidate lists (names and counts)
  • Estimated monthly and annual savings
  • Before/after cost headlines

Getting Started

Available now for all CloudFix customers in the “Medium” section. Point CloudFix at your accounts, review the findings, and clean up alarms with confidence.

Wrapping up and Call to Action

CloudWatch alarms are essential—but only when they’re meaningful. Silent, stuck, or target-less alarms quietly add up. CloudFix helps you find and remove the clutter so you keep the signals and drop the noise (and the bill).
 
If you’re a CloudFix customer, log in and try the CloudWatch Alarm Cleanup now. If not, use the approach above to identify and remove unused alarms—and consider CloudFix to keep it tidy over time.