View a markdown version of this page

OTel metrics pricing and storage - Amazon CloudWatch

OTel metrics pricing and storage

OpenTelemetry metrics in CloudWatch use a per-GB ingestion model with included storage and query access. There are no per-metric, per-API-call, or separate storage charges. For current pricing details, see Amazon CloudWatch Pricing.

Key pricing characteristics

The OTel metrics pricing model has the following characteristics:

  • Per-GB ingestion — You pay based on the volume of data ingested, not the number of unique metric series.

  • Storage included — 15 months retention at no additional charge.

  • Console queries free — PromQL queries in the CloudWatch console (Query Studio, dashboards) are free.

  • API queries charged per sample — Programmatic PromQL queries are charged per million samples scanned.

  • No per-metric charge — Unlike Classic pricing, there is no cost per unique metric name or label combination.

How OTel compares to Classic pricing

The following table compares OTel metrics pricing with Classic metrics pricing.

Feature OTel Metrics Classic Metrics

Billing unit

Per GB ingested

Per metric per month

Storage

15 months included

15 months included

Console queries

Free

Free

API queries

Per million samples scanned

Per 1,000 metrics requested (GetMetricData)

High cardinality cost

Linear with data volume (not metric count)

Expensive — each unique dimension combination is a separate billable metric

What counts as ingested data

Each OTLP data point contributes its serialized size to the ingestion volume. The serialized size includes the following components:

  • Metric name

  • All labels (keys and values)

  • Resource attributes

  • Timestamp and value

Larger label sets produce more bytes per data point. You can monitor your ingestion volume in the CloudWatch console under Usage Metrics.

Cost optimization tips

Use the following strategies to optimize your OTel metrics costs:

  • Use shorter label values where possible. Label values contribute to the byte size of each data point.

  • Drop high-cardinality labels that you don't query (for example, request IDs) at the collector level.

  • For Container Insights OTel, the default collection generates a predictable volume based on cluster size.