AWS CloudWatch Pricing: Every Component, Rate, and Hidden Cost (2026)

Alberto Grande
Head of Marketing

Amazon CloudWatch looks cheap until the bill arrives. AWS CloudWatch pricing is not a single rate, it is a stack of per-metric, per-dashboard, per-alarm, per-GB, and per-API-request charges that each scale with how much you monitor. A cluster that runs fine on a $40 monthly CloudWatch bill in staging can cost thousands in production once detailed monitoring, custom metrics, and log ingestion are turned on across every node.
This guide breaks down every CloudWatch pricing component. The rate table below is fetched at build time straight from the AWS Price List API for the US East (N. Virginia) region, so the numbers are AWS published list prices, not our estimates. After the table we cover the line items the pricing page glosses over and work through a realistic mid-size example.
How AWS CloudWatch pricing works#
CloudWatch bills each feature on its own meter. Metrics are billed per metric per month on a sliding scale, alarms are a flat monthly charge per alarm metric, logs are billed per GB at ingestion and again for storage, and API calls are billed per request once you pass the free tier. There is no bundled "CloudWatch plan"; your bill is the sum of every meter you touch.
AWS CloudWatch pricing table (us-east-1)#
| Component | Tier | Published rate (US East, N. Virginia) |
|---|---|---|
| Metrics | ||
| Custom metrics | First 10,000 | $0.30 per metric-month for the first 10,000 metrics - US East (Northern Virginia) |
| 10,000 to 250,000 | $0.10 per metric-month for the next 240,000 metrics - US East (Northern Virginia) | |
| 250,000 to 1,000,000 | $0.05 per metric-month for the next 750,000 metrics - US East (Northern Virginia) | |
| Over 1,000,000 | $0.02 per metric-month for over 1,000,000 metrics - US East (Northern Virginia) | |
| Alarms | ||
| Alarm, standard resolution | All usage | $0.10 per alarm metric month (standard resolution) - US East (Northern Virginia) |
| Alarm, high resolution | All usage | $0.30 per alarm metric month (high resolution) - US East (Northern Virginia) |
| Composite alarm | All usage | $0.50 per composite alarm month - US East (Northern Virginia) |
| API requests | ||
| API requests (PutMetricData, ListMetrics, GetMetricStatistics) | All usage | $0.01 per 1,000 requests |
| GetMetricData | All usage | $0.01 per 1,000 metrics requested using GetMetricData API - US East (Northern Virginia) |
| GetMetricWidgetImage | All usage | $0.02 per 1,000 metrics requested using GetMetricWidgetImage API - US East (Northern Virginia) |
| Logs | ||
| Logs ingestion, Standard class | All usage | $0.50 per GB custom log data ingested in Standard log class - US East (Northern Virginia) |
| Logs ingestion, Infrequent Access class | All usage | $0.25 per GB custom log data ingested in Infrequent Access log class -US East (Northern Virginia) |
| Logs storage / archival | All usage | $0.03 per GB-mo of log storage - US East (Northern Virginia) |
| Logs Insights, data scanned | All usage | $0.005 per GB log data scanned by CloudWatch Logs Insights queries - US East (Northern Virginia) |
| Vended logs to CloudWatch Logs | First 10,240 | $0.50 per GB of vended logs ingested in Standard log class for the first 10TB - US East (Northern Virginia) |
| 10,240 to 30,720 | $0.25 per GB of vended logs ingested in Standard log class for the next 20TB - US East (Northern Virginia) | |
| 30,720 to 51,200 | $0.10 per GB of vended logs ingested in Standard log class for the next 20TB - US East (Northern Virginia) | |
| Over 51,200 | $0.05 per GB of vended logs ingested in Standard log class over 50TB - US East (Northern Virginia) | |
| Logs Live Tail | All usage | $0.01 per minute of CloudWatch Logs Live Tail session - US East (N. Virginia) |
| Other | ||
| Contributor Insights rule | All usage | $0.50 per rule per month for CW-Rule-CloudWatchLog in US East (N. Virginia) |
| Contributor Insights matched log events | All usage | $0.02 per million Events for CW:ContributorInsightEvents in US East (N. Virginia) |
| Synthetics canary run | All usage | $0.0012 per canary run per month - US East (N. Virginia) |
| RUM (Real User Monitoring) events | All usage | $1 per 100k RUM events in US East (N. Virginia) |
Source: AWS Price List Bulk API, offer AmazonCloudWatch, region us-east-1. Rate text is quoted verbatim from the API payload. Dashboards ($3.00 per dashboard per month on the AWS CloudWatch pricing page) are not published in this API feed.
Last updated: 2026-08-31. AWS CloudWatch published pricing (US East / N. Virginia), fetched from the AWS Price List API (publication timestamp 2026-08-31T09:21:48Z). Published list prices, not a live feed.
What the CloudWatch pricing page doesn't tell you#
Metric count is what you provision, not what you watch. Every unique combination of namespace, metric name, and dimension set is a separate billable metric. One application metric emitted with a per-pod dimension across 300 pods is 300 metrics, whether or not anyone charts them. Embedded metric format (EMF) logs make this worse: CloudWatch extracts metrics from those log lines at ingestion, so a logging change can quietly add thousands of billable metrics.
Detailed monitoring on EC2 is not a free checkbox. It publishes 7 metrics per instance at 1-minute granularity, billed at the custom-metrics rate in the table above. At the first tier that is roughly $2.10 per instance per month before you add a single custom metric.
Alarms bill per alarm metric, not per alarm. A metric-math alarm or a multi-metric alarm counts each metric it references. Dashboards are $3.00 each after the first 3, and that charge does not appear in the Price List API feed, so confirm it in the AWS console. The million-request API free tier does not cover GetMetricData at all. Log ingestion is billed on uncompressed bytes at the moment of ingestion, and storage is a separate charge that keeps running for as long as you retain the data.
Hidden and egress costs to watch#
GetMetricData is the quiet one. Grafana, Datadog, custom exporters, and the CloudWatch console itself all call GetMetricData. It is billed per metric returned per call, it is excluded from the free tier, and a dashboard refreshing 500 metrics every minute is about 21.6 million metric-requests a month, roughly $216 at $0.01 per 1,000.
Logs Insights scans, it does not filter first. A broad query with no narrow time range or filter scans the whole log group and bills $0.005 per GB scanned every time it runs. Scheduled queries and dashboard widgets backed by Insights repeat that charge on every refresh.
PutLogEvents at scale multiplies the ingestion line. Raising log level from info to debug across a fleet can double the $0.50 per GB ingestion charge, because you are paying for every extra byte on the way in.
Cross-region metric queries add data transfer. Reading metrics from another region for a consolidated dashboard adds inter-region data transfer on top of the API charge. Keep monitoring in the same region as the workload where you can.
Autoscaling compounds detailed monitoring. Every instance that scales up carries its 7 detailed-monitoring metrics for the hours it runs, so a bursty fleet pays more than its steady-state node count suggests.
A worked example: 200 EC2 instances with detailed monitoring#
Assume a mid-size production setup:
- 200 EC2 instances with detailed monitoring enabled (7 metrics each)
- 60 custom application metrics per instance
- 400 standard-resolution alarms and 20 high-resolution alarms
- 50 GB/day of application logs ingested
- About 6,000 GB of logs retained in standard storage
- 2,000 GB/month scanned by Logs Insights
- An external Grafana instance polling 500 metrics once a minute through GetMetricData
Every figure below uses the live us-east-1 rates shown in the table above.
Metrics
- Detailed monitoring: 200 x 7 = 1,400 metrics
- Custom metrics: 200 x 60 = 12,000 metrics
- Total: 13,400 metrics
- First 10,000 x $0.30 = $3,000.00
- Next 3,400 x $0.10 = $340.00
- Metrics subtotal: $3,340.00
Alarms
- 400 standard x $0.10 = $40.00
- 20 high-resolution x $0.30 = $6.00
- Alarms subtotal: $46.00
Logs
- Ingestion: 50 GB/day x 30 = 1,500 GB x $0.50 = $750.00
- Storage: 6,000 GB x $0.03 = $180.00
- Logs Insights: 2,000 GB x $0.005 = $10.00
- Logs subtotal: $940.00
API
- GetMetricData: 500 metrics x 43,200 polls/month = 21,600,000 metric-requests, at $0.01 per 1,000 = $216.00
- PutMetricData: custom metrics batched at up to 1,000 per call, about 518,000 calls/month, under the 1,000,000 free tier = $0.00
- API subtotal: $216.00
| Line item | Monthly cost |
|---|---|
| Metrics | $3,340.00 |
| Alarms | $46.00 |
| Logs (ingestion, storage, Insights) | $940.00 |
| API (GetMetricData) | $216.00 |
| Total | $4,542.00 |
Two lines dominate: metrics at $3,340 and log ingestion at $750. The $216 GetMetricData charge is the one teams forget, and it grows every time someone adds a panel. Add dashboards on top at $3.00 each. None of this is a misconfiguration, it is just what monitoring 200 instances costs at list price. For how the compute side of that same fleet breaks down, see our EKS pricing guide, and for how these rates compare across clouds, the AWS vs Azure vs Google price comparison.
Frequently asked questions#
Is CloudWatch free?#
There is a free tier: 10 custom metrics and alarms, 3 dashboards, 5 GB of log ingestion and storage, and 1,000,000 API requests per month. Past that, every metric, alarm, dashboard, and GB is billed at the rates above. Basic EC2 monitoring at 5-minute granularity is free; detailed 1-minute monitoring is not.
Why did my CloudWatch bill jump without adding instances?#
Common causes: someone enabled detailed monitoring, a new deployment started emitting high-cardinality custom or EMF metrics, log level was raised to debug, or a new Grafana or Datadog integration started calling GetMetricData on a schedule.
How do I estimate CloudWatch cost before turning it on?#
Count billable metrics (unique namespace plus metric name plus dimension-set combinations), estimate log GB per day, list dashboards and alarm metrics, and multiply by the us-east-1 rates above. Add a line for GetMetricData if anything outside AWS will poll your metrics.
Where CloudWatch cost actually comes from#
Most CloudWatch spend is downstream of how much infrastructure you run. Metric count, alarm count, detailed-monitoring charges, and log volume all scale with the number of nodes and pods in your clusters. Rightsizing Kubernetes workloads so the same traffic runs on fewer, smaller nodes cuts the CloudWatch bill along with the EC2 bill. That is the core of what DevZero's Kubernetes cost optimization does: it trims idle capacity so you are not paying to monitor instances you never needed.

Alberto Grande
Head of Marketing
