aws_cloudwatch_log_stream cost estimation
A log stream is free. It is a named sequence of log events inside a log group, and cost comes from the bytes ingested and stored in the group, not the stream.
An aws_cloudwatch_log_stream creates a named stream inside a log group, typically one per source (an instance, a container, a function invocation). The stream itself is free: there is no charge for creating a stream or for the number of streams in a group. It is just an organizational bucket for ordered log events.
The cost lives on the parent log group and is driven by the log data, not the stream count. CloudWatch Logs bills for ingestion at about $0.50/GB and for archival storage at about $0.03/GB-month after ingestion. Those charges are the same whether your events land in one stream or ten thousand; the meter is bytes, not streams. Where stream design matters is operationally: too many tiny streams make queries slower and harder, but they do not change the bill.
The optimization is on the data flowing into the group: reduce log volume, set a retention policy so old data is deleted instead of stored forever, and avoid logging noisy debug output in production. c3x prices the log group's ingestion and storage and treats the log stream as the free container it is.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "aws_cloudwatch_log_group" "app" {
name = "/app/prod"
retention_in_days = 30
}
resource "aws_cloudwatch_log_stream" "worker" {
name = "worker-01"
log_group_name = aws_cloudwatch_log_group.app.name
}Pricing dimensions
What you actually pay for when you provision aws_cloudwatch_log_stream.
| Dimension | Unit | What's being charged |
|---|---|---|
| Log stream | free | Creating a stream and the number of streams in a group have no charge. $0 |
| Log ingestion | per GB | The bytes of log events written into the group are billed on ingestion, regardless of stream count. ~$0.50/GB ingested |
| Log storage | per GB-month | Ingested data retained in the group is billed for archival storage until deleted by retention. ~$0.03/GB-month |
Optimization tips
Common ways to reduce aws_cloudwatch_log_stream cost without changing the workload.
Set retention on the group, not per stream
Stops unbounded storage growthStreams inherit the group's retention. A retention policy of 30 or 90 days deletes old data instead of storing it forever, and it applies across every stream at once.
Cut log volume, not stream count
Directly reduces ingestion chargesThe bill is bytes ingested, so trimming noisy debug logging in production lowers cost. Splitting the same volume across more streams does nothing for the bill.
Avoid one stream per short-lived task
Creating a stream per ephemeral job bloats the group operationally without saving money. Group related sources into fewer streams for faster queries.
FAQ
Does a CloudWatch log stream cost money?
No. Creating a log stream and the number of streams in a group are free. You pay for the log group's ingestion (about $0.50/GB) and storage (about $0.03/GB-month), which depend on bytes, not stream count.
Does having more log streams increase my bill?
No. CloudWatch bills the volume of log data, not how many streams it lands in. The same bytes cost the same in one stream or ten thousand. Reduce log volume and set retention to cut cost.
How do I reduce CloudWatch Logs cost?
Set a retention policy on the log group so old data is deleted, cut noisy debug logging in production to lower ingestion, and export data you must keep long term to cheaper S3 storage.
Related resources
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including aws_cloudwatch_log_stream.