Introducing CloudFix Alarm Cleanup
Stop Paying for Silent CloudWatch Alarms

Pricing of CloudWatch Alarms
- Standard Alarms: $0.10 per alarm per month (60-second evaluation)
- High-Resolution Alarms: $0.30 per alarm per month (10–30 second evaluation)
- Composite Alarms: $0.50 per alarm per month
- Anomaly Detection Alarms: ~$0.30 per alarm per month (uses 3 metrics)
- GetMetricData API: $0.0651 per 1,000 metrics requested
- SNS Notifications: $0.50 per million notification.
Critical detail: you pay for alarms by their existence, not by activity. Dormant alarms still incur monthly charges.
Stories of Disconnected CloudWatch Alarms


Cloudwatch deleting alarms with INSUFFICIENT_DATA

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_DATAfor 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
How CloudFix’s Alarm Cleanup Finder/Fixers Work
Finding Alarm Waste
DescribeAlarms and DescribeAlarmHistory. We look for two patterns:Unused Alarms (INSUFFICIENT_DATA)
- State:
INSUFFICIENT_DATA - History: No transitions to
OKorALARMover a configurable lookback (default 30 days) - Common causes: terminated EC2s, renamed metrics/dimensions, disabled publishing
No-Target Alarms
- No actions configured: empty
AlarmActions,OKActions, andInsufficientDataActions - Age gate: older than a configurable threshold (default 30 days)
Estimating Cost and Savings
The Cleanup Process
# 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"
describe-alarms output.Multi-Account and Multi-Region
CloudFix Finder/Fixer
Here is what it looks like in the CloudFix UI:


Facts about CloudFix Alarm Cleanup
- Detection windows and age thresholds are configurable (default 30 days)
- Uses
DescribeAlarmsandDescribeAlarmHistoryfor 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


