AWS CloudWatch alarms cost: cheap each, expensive in bulk
CloudWatch alarms cost about $0.10 each per month (standard), $0.30 for high-resolution or anomaly-detection, and $0.50 for composite. A few are trivial; thousands generated per-resource across a fleet add up. Here is how to keep it sane.
Quick answer
CloudWatch alarms cost about $0.10 each per month for standard-resolution metric alarms, about $0.30 for high-resolution or anomaly-detection alarms, and about $0.50 for composite alarms. A handful is trivial; the cost appears when automation creates alarms per resource across a large fleet, so consolidate with composite alarms and clean up orphans.
CloudWatch alarms are cheap individually, which is exactly why their cost sneaks up: teams generate them programmatically, one or several per resource, and a fleet of thousands of resources produces tens of thousands of alarms. The per-alarm price is small, but multiplied by that count it becomes a line worth managing.
The per-alarm rates
| Alarm type | Rate (approximate) |
|---|---|
| Standard-resolution metric alarm | ~$0.10 / month |
| High-resolution metric alarm | ~$0.30 / month |
| Anomaly-detection alarm | ~$0.30 / month |
| Composite alarm | ~$0.50 / month |
Where the count explodes
Infrastructure-as-code that attaches several alarms to every instance, queue, and function multiplies quickly. High-resolution alarms, useful for fast reaction, cost three times standard, so using them everywhere by default is wasteful. And alarms for resources that no longer exist linger and bill until deleted.
Consolidate and clean up
Composite alarms combine several underlying alarms into one signal, which reduces noise and can reduce the number of alarms you act on, though each composite has its own fee. Use standard resolution unless fast reaction genuinely requires high-resolution, alarm on service-level signals rather than every low-level metric, and periodically delete orphaned alarms. This is the same discipline as controlling CloudWatch metrics cost: emit and alarm on what you will act on.
FAQ
How much do CloudWatch alarms cost?
About $0.10 per month for a standard-resolution metric alarm, about $0.30 for high-resolution or anomaly-detection alarms, and about $0.50 for composite alarms. Individually cheap, they add up when automation creates many per resource across a fleet.
Why is my CloudWatch alarm bill high?
Usually alarm count. Infrastructure-as-code that attaches several alarms to every resource across a large fleet produces tens of thousands of alarms, and high-resolution alarms cost three times standard. Orphaned alarms for deleted resources also keep billing.
How do I reduce CloudWatch alarm cost?
Use standard resolution unless fast reaction requires high-resolution, alarm on service-level signals rather than every low-level metric, use composite alarms to consolidate, and periodically delete alarms for resources that no longer exist.
Are high-resolution alarms worth the extra cost?
Only where you need to react within seconds, such as latency-sensitive autoscaling triggers. They cost about three times a standard alarm, so using them everywhere by default is wasteful. Reserve them for the metrics that genuinely need sub-minute evaluation.
Do composite alarms save money?
Not directly, since each composite has its own fee of about $0.50, but they reduce noise and the number of alarms you act on, which can let you retire redundant underlying alarms. Their main value is signal quality, with a modest cost benefit.
Does C3X estimate CloudWatch alarm cost?
C3X prices aws_cloudwatch_metric_alarm and composite alarm resources from your Terraform, so the per-alarm cost, multiplied across the alarms your configuration creates, appears before deploy, which is exactly where fleet-wide alarm sprawl shows up.
What to do next
See your alarm count cost before you apply. C3X reads your Terraform and prices your monitoring and the rest of your stack against a live catalog. Start with the quickstart.
Share this post
Try C3X on your own Terraform
Free and open source. No API key required. One command to install, one command to estimate.