Nuberio
  • Pricing
  • Blog
  • Tools
  • Security
  • About
Run free audit →
Nuberio

Free AWS health audit.

Run free audit →

Product

  • Pricing

Resources

  • Blog
  • Free Tools
  • CloudWatch Alarms

Company

  • Security
  • About

Connect

  • X (Twitter)
  • LinkedIn

© 2026 Nuberio. All rights reserved.

Built at 2am, for a 2am.

← All posts

What CloudWatch Logs Actually Cost: Ingestion, Storage, and Insights Queries

August 11, 2026·8 min read

CloudWatch Logs has three separate charges — ingestion, storage, and Logs Insights query scanning — and they're priced two orders of magnitude apart from each other. Most teams worry about the query charge because it's the one they trigger manually, by hand, while debugging. It's usually the smallest of the three. Here's the actual per-GB pricing for each stage, verified directly against AWS's own pricing page, and a worked example showing where a typical bill actually comes from.

  • How is CloudWatch Logs priced?
  • What does CloudWatch Logs ingestion cost?
  • What does CloudWatch Logs storage cost?
  • What does a CloudWatch Logs Insights query cost?
  • A worked example: where the money actually goes
  • How to actually cut the bill
  • Does Nuberio Audit check log costs?

How is CloudWatch Logs priced?

CloudWatch Logs bills three things independently: $0.50 per GB to ingest log data (Standard class), $0.03 per GB per month to store it (compressed, Standard class), and $0.005 per GB of data scanned by a Logs Insights query. A 5 GB/month free tier covers ingestion, storage, and query-scanning combined — not 5 GB each. Figures below are US East (Ohio/N. Virginia) rates, verified against aws.amazon.com/cloudwatch/pricing/ on 2026-08-11; other regions vary.

What does CloudWatch Logs ingestion cost?

Ingestion is billed per GB of raw log data sent to CloudWatch, at the moment it's written — $0.50/GB on the Standard log class, or $0.25/GB if the log group is set to the Infrequent Access class. This is the charge that scales directly with how much your application logs, and for almost any real workload it's the largest of the three line items by a wide margin.

Log classIngestionStorage (compressed)Best for
Standard$0.50 per GB$0.03 per GB/monthLogs you'll actively query — errors, request traces, anything pulled up during an incident
Infrequent Access$0.25 per GB$0.018 per GB/monthCompliance/audit logs you almost never query, only need to retain
Infrequent Access log groups don't support Logs Insights queries or metric filters at all — the 50% ingestion discount trades away CloudWatch's own querying capability. It's the right choice for logs you're storing to satisfy a retention requirement, not for anything you'd ever run a Logs Insights query against.

What does CloudWatch Logs storage cost?

Storage is billed monthly per GB of data actually held in a log group, after compression — $0.03/GB/month Standard, $0.018/GB/month Infrequent Access, or $0.006/GB/month if archived to Archive Instant Access. AWS's own pricing page lists a 0.15 compression ratio for stored log data, meaning 1 GB of raw ingested text typically lands around 150 MB stored — so the storage line item is usually small relative to ingestion, even before retention limits are applied.

The part that actually drives storage cost up over time isn't the per-GB rate — it's retention. A CloudWatch log group's default retention setting is Never Expire. Every log group created without an explicit retention period keeps accumulating storage charges indefinitely, month after month, for data nobody is ever going to query again.

What does a CloudWatch Logs Insights query cost?

A Logs Insights query costs $0.005 per GB of data scanned across the time range and log groups selected — not per query, and not based on how much data the query returns. A query with a narrow time range scans less data and costs less; the same query run over 30 days instead of 1 day scans roughly 30x the data, whether or not the result set is any bigger.

This charge applies identically whether the query runs from the CloudWatch console, the AWS CLI, an SDK call, or an automated dashboard — there's no free-in-console exception the way there is for Metrics Insights queries run interactively. Container Insights' automated dashboards run Logs Insights queries behind the scenes on the same metered basis.

A worked example: where the money actually goes

Take a mid-size app logging 50 GB/month of raw text across ECS and Lambda, with an on-call engineer running roughly 20 Logs Insights queries a day, each scanning about 2 GB (a day's worth of logs across a few log groups):

Line itemVolumeRateMonthly cost
Ingestion50 GB (5 GB free tier applied)$0.50/GB~$22.50
Storage~7.5 GB compressed (50 GB × 0.15 ratio)$0.03/GB~$0.23
Logs Insights queries600 queries × 2 GB = 1,200 GB scanned$0.005/GB$6.00

Total: roughly $28.73/month, and ingestion alone is 78% of it — even in a scenario with unusually heavy, daily manual querying. Storage barely registers because of compression. This is the opposite of how most engineers budget for CloudWatch Logs: the charge that happens automatically, every time a line gets logged, dwarfs the charge that happens when someone deliberately goes looking for something.

How to actually cut the bill

Since ingestion is almost always the dominant cost, the highest-leverage fix is reducing what gets logged in the first place — not optimizing query patterns.

  • Cut DEBUG/verbose logging in production — it's usually the single largest contributor to ingested volume and rarely gets read outside an active incident.
  • Set an explicit retention period on every log group — the Never Expire default means storage cost compounds forever on data nobody will query again; 30-90 days covers most operational debugging needs.
  • Move logs you keep only for compliance to the Infrequent Access class — half the ingestion cost, in exchange for giving up Logs Insights querying you weren't going to do anyway.
  • Scope Logs Insights queries to the narrowest time range and log group that answers the question — a query over the exact incident window costs a fraction of the same query run over the full retention period out of habit.

Related reading

  • → The $0.30 metric: what CloudWatch custom metrics actually cost
  • → What CloudWatch alarms actually cost — and the three levers that reduce the bill
  • → CloudWatch Logs Insights queries: the practical library

Does Nuberio Audit check log costs?

No — worth being direct about this. Nuberio Audit checks alarm coverage across your AWS resources; it doesn't currently inspect CloudWatch Logs group retention settings, log class (Standard vs Infrequent Access), or ingestion volume. If a log group has been accumulating storage on Never Expire retention for two years, the Audit won't flag it. That's a real gap, not a feature the product has and this post just didn't mention — checking log group retention settings by hand (or via a script against the DescribeLogGroups API) is still necessary today.

Frequently asked questions

How much does a CloudWatch Logs Insights query cost?

$0.005 per GB of data scanned across the time range and log groups the query covers — not per query, and not based on result size. This applies whether the query runs from the console, CLI, an SDK, or an automated dashboard like Container Insights.

What's included in CloudWatch Logs' free tier?

5 GB per month, shared across ingestion, archival storage, and data scanned by Logs Insights queries combined — not 5 GB for each category separately. Most production workloads exceed this within the first few days of the month.

Why is my CloudWatch Logs bill mostly ingestion, not queries?

Ingestion ($0.50/GB Standard) is charged on every byte logged, continuously, regardless of whether anyone ever reads it. Logs Insights queries ($0.005/GB scanned) are charged only when someone deliberately runs one. For most workloads, the volume of logs written vastly exceeds the volume of logs anyone queries, so ingestion dominates the bill.

Does compression reduce what I'm billed for CloudWatch Logs storage?

Yes. AWS applies a 0.15 compression ratio to stored log data — roughly 1 GB of raw ingested text becomes about 150 MB of billed storage. Storage is billed on the compressed size, at $0.03/GB/month on the Standard log class.

What's the difference between CloudWatch Logs Standard and Infrequent Access classes?

Infrequent Access costs half as much to ingest ($0.25/GB vs $0.50/GB) and less to store ($0.018/GB vs $0.03/GB/month), but log groups on that class can't be queried with Logs Insights or filtered with metric filters. It's meant for compliance/audit logs you need to retain but won't actively query — not for anything you'd debug against.

Related reading

  • → The $0.30 metric: what CloudWatch custom metrics actually cost
  • → What CloudWatch alarms actually cost — and the three levers that reduce the bill
  • → CloudWatch Logs Insights queries: the practical library
  • → Run a free Nuberio Audit — find your alarm gaps

Not sure your alarm coverage is actually solid?

Run a free Nuberio Audit — hygiene score, missing alarms, and security findings in about 5 minutes.

Run free audit →
N

Nitesh Bhavsar

Founder, Nuberio

Published

August 2026

Updated

August 2026

Have feedback? nitesh@nuberio.com