awscloudwatchmetricsobservabilitycost-optimization

CloudWatch custom metrics cost: cardinality is the whole bill

Custom metrics are $0.30/metric/month, but each metric-name + dimension-value combination is a separate billable metric — so high cardinality explodes the bill. Here's how to control it.

The C3X Team··6 min read

Quick answer

CloudWatch custom metrics cost $0.30/metric/month (first 10k), plus dashboards ($3 each), alarms ($0.10 each), and API calls. The bill explodes on cardinality: every unique metric-name + dimension-value combination is a separate billable metric, so a per-instance or per-request-path metric becomes thousands. Cut it by reducing dimension cardinality and pruning unused metrics, dashboards, and alarms.

CloudWatch metrics look cheap — thirty cents a metric — until you realize what counts as "a metric." The number that drives the bill isn't how many metrics you define in code; it's how many unique dimension combinations those definitions produce. That distinction is the whole story.

Cardinality is the cost

A custom metric is billed per unique combination of metric name and dimension values. Emit RequestLatency with a dimension for InstanceId, and you mint a separate billable metric for every instance. Add RequestPath too and it's instances × paths. What reads as one metric in your code can be thousands on the bill:

RequestLatency{InstanceId, RequestPath}
  50 instances × 200 paths = 10,000 metrics × $0.30 = $3,000/month

The other line items

  • Dashboards: $3/dashboard/month above the free allowance.
  • Alarms: $0.10 per standard alarm; more for high-resolution and composite.
  • API requests: PutMetricData and GetMetricData calls.
  • Logs: ingestion and storage billed separately — see CloudWatch Logs cost.

How to keep it down

  1. Control dimension cardinality. Don't put high-cardinality values (instance IDs, user IDs, full request paths) in dimensions unless you aggregate on them. This is the single biggest lever.
  2. Drop unused custom metrics. Metrics emitted but never charted or alarmed on still cost $0.30 each.
  3. Consolidate dashboards and prune stale alarms left over from old services.
  4. Use embedded metric format deliberately so you're not minting a metric per log line.

FAQ

How much do CloudWatch custom metrics cost?

$0.30 per custom metric per month for the first 10,000 metrics (cheaper at higher tiers), plus API charges for putting and getting metric data. The trap is metric count: each unique combination of metric name and dimension values is a separate billable metric, so high-cardinality metrics multiply fast.

Why is my CloudWatch metrics bill so high?

High cardinality. Emitting a custom metric per instance, per request path, or per customer creates a distinct billable metric for every combination — thousands of metrics from what looks like one metric in code. At $0.30 each, that's hundreds or thousands of dollars a month for dimensions you may never chart.

What else does CloudWatch charge for?

Beyond custom metrics: dashboards ($3/dashboard/month above the free allowance), alarms ($0.10 per standard alarm, more for high-resolution and composite), API requests (GetMetricData and PutMetricData), Logs ingestion and storage (billed separately), and Contributor Insights and anomaly detection.

How do I reduce CloudWatch metrics costs?

Reduce metric cardinality — don't put high-cardinality values (instance IDs, user IDs, request paths) in dimensions you don't aggregate on. Drop unused custom metrics, consolidate dashboards, prune stale alarms, and use embedded metric format thoughtfully so you're not minting a metric per log line.

Are basic EC2 metrics free?

Standard (5-minute) EC2 metrics are included at no extra charge. Detailed (1-minute) monitoring and any custom metrics you publish are billed. The cost almost always comes from custom metrics and their cardinality, not the built-in service metrics.

How does C3X relate to CloudWatch cost?

CloudWatch metrics are usage-driven, so C3X models them from expected metric and alarm counts in c3x-usage.yml. It prices the resources being monitored, helping you attribute observability cost to the infrastructure that emits it.

What to do next

Observability cost rides on the infrastructure it monitors. C3X prices the resources behind your metrics and models metric/alarm volume as usage, so you can attribute CloudWatch spend to the services emitting it. Pair it with the CloudWatch Logs guide for the full observability bill. The quickstart runs it in minutes.

Try C3X on your own Terraform

Free and open source. No API key required. One command to install, one command to estimate.