Is CloudWatch free? The monitoring bill nobody budgets for
CloudWatch has a free tier, but logs, custom metrics, dashboards, and high-resolution alarms all cost money, and log ingestion in particular can quietly rival compute spend. Here is what is free, what is not, and how to keep monitoring cheap.
Quick answer
CloudWatch is partly free and partly paid. Basic EC2 metrics at five-minute resolution, a set of alarms, and a modest amount of logs and dashboards fall in the free tier. But log ingestion (billed per GB ingested), custom metrics (billed per metric per month), detailed one-minute monitoring, high-resolution alarms, and dashboards beyond the free allotment all cost money. Log ingestion is the biggest surprise: a chatty application logging verbosely can make CloudWatch Logs one of the larger lines on the bill, so filtering and retention matter.
Ask whether CloudWatch is free and the honest answer is: some of it, up to a point. AWS advertises a free tier that covers basic monitoring, and for a small workload you may never pay a cent. But CloudWatch is a collection of billed products (metrics, logs, dashboards, alarms, and more), and the moment you send it lots of logs or custom metrics, the bill appears. Log ingestion in particular catches teams off guard because it scales with how verbosely your applications talk.
What is free and what is not
| Feature | Free tier | Billed beyond |
|---|---|---|
| Basic EC2 metrics (5 min) | Included | Free at basic resolution |
| Detailed monitoring (1 min) | No | Per metric per month |
| Custom metrics | A small number | Per metric per month |
| Logs ingestion | A few GB | Per GB ingested |
| Logs storage | Included at first | Per GB per month |
| Dashboards | A few | Per dashboard per month |
| Alarms | Ten standard | Per alarm, more for high-resolution |
The pattern is that scale is what you pay for. A handful of alarms and dashboards stays free, but hundreds of custom metrics, one-minute detailed monitoring across a large fleet, and gigabytes of logs per day all cross into paid territory. This is one of the classic hidden AWS costs because monitoring feels like overhead rather than a product you provision.
Why logs dominate the bill
CloudWatch Logs charges per GB ingested, and that number is driven entirely by application behavior. A service logging every request at debug level, or emitting large structured payloads, can push tens of gigabytes a day, and ingestion cost compounds with storage cost for whatever retention you keep. For a chatty fleet this can rival the compute it monitors. The first lever is log level discipline: do not ship debug logs to CloudWatch in production by default.
Custom metrics and their multiplier
Custom metrics are billed per metric per month, and the trap is cardinality. Emitting a metric per customer, per endpoint, or per instance ID multiplies the metric count fast, and each unique combination is a separate billable metric. A dashboard that looks cheap can hide thousands of underlying metrics. Aggregate where you can, avoid high-cardinality dimensions you will never query, and be deliberate about one-minute detailed monitoring on large fleets, since it is billed per instance.
Keeping monitoring cheap
Set log retention deliberately (default retention is forever, which quietly grows storage cost), filter logs before ingestion so you only pay for what you will read, keep custom metric cardinality low, and reserve detailed monitoring for workloads that need one-minute granularity. Fold monitoring into your FinOps KPIs so it is tracked rather than assumed free, and remember that a growing CloudWatch line often signals a logging change worth reviewing. Monitoring is worth paying for; paying for verbose logs you never read is not.
FAQ
Is CloudWatch free to use?
Partly. Basic EC2 metrics at five-minute resolution, a set of standard alarms, and a modest amount of logs and dashboards fall in the free tier, so a small workload may never pay. But log ingestion, custom metrics, one-minute detailed monitoring, high-resolution alarms, and dashboards beyond the free allotment all cost money. CloudWatch is free up to a point and billed beyond it.
Why is my CloudWatch bill so high?
Usually log ingestion. CloudWatch Logs charges per GB ingested, and that is driven by how verbosely your applications log. A service emitting debug logs or large payloads in production can push tens of gigabytes a day, and for a chatty fleet this can rival the compute it monitors. Custom metrics with high cardinality and fleet-wide detailed monitoring are the next biggest contributors.
How much do CloudWatch custom metrics cost?
They are billed per metric per month, so the cost scales with how many distinct metrics you emit. The trap is cardinality: emitting a metric per customer, endpoint, or instance ID multiplies the count fast because each unique combination is a separate billable metric. Aggregating and avoiding high-cardinality dimensions you will never query keeps the custom metric bill down.
How do I reduce CloudWatch cost?
Set log retention deliberately since the default keeps logs forever, filter logs before ingestion so you only pay for what you will read, avoid debug-level logging in production, keep custom metric cardinality low, and reserve one-minute detailed monitoring for workloads that truly need it (it is billed per instance). Tracking monitoring as a real cost rather than assuming it is free is the first step.
Does CloudWatch charge for log storage separately from ingestion?
Yes. You pay per GB ingested when logs arrive, and then per GB per month to store them for whatever retention you configure. Because the default retention is indefinite, storage quietly grows over time even if ingestion is steady. Setting a sensible retention period (days or weeks for most operational logs) controls the storage side of the bill.
Does C3X account for CloudWatch cost before deploy?
C3X prices infrastructure from your Terraform against a live catalog before deploy, so monitoring resources you define (alarms, dashboards, log groups, detailed monitoring settings) are visible in the pull request. It helps surface the monitoring configuration that drives cost, though the log ingestion volume itself depends on runtime application behavior you tune separately.
What to do next
Know the cost of your monitoring stack before it ships. C3X reads your Terraform and prices your resources 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.