# Logs without a shocking bill

> Observability that doesn't cost more than the app. Nicolas Dao's picks for this job (Cloudless Labs, Sydney), in order of preference, what he would avoid, and what to use instead.

- Use case 16 of 21 in The Stack, last reviewed 21 October 2026
- Web page: https://cloudlesslabs.com/stack/use-cases/logging/

Picks, in order of preference:

1. **[Amazon CloudWatch](https://cloudlesslabs.com/stack/aws-cloudwatch/index.md)** (My default): The critical lines: WARN and ERROR, alarms, metric filters, Live Tail. JSON log format, retention set, no payloads.
2. **[Amazon Data Firehose](https://cloudlesslabs.com/stack/aws-firehose/index.md)** (My default): The chatty bulk, side by side: your logger batches DEBUG/INFO into Firehose, which writes to S3. About $75 per TB instead of about $673.
3. **[DuckDB](https://cloudlesslabs.com/stack/duckdb/index.md)** (Use when it fits): Search the S3 logs from a laptop or a Lambda when someone asks what happened.
4. **[Cloudflare Workers](https://cloudlesslabs.com/stack/cloudflare-workers/index.md)** (My default): Workers Logs moves to $0.25/GB on 1 December 2026.

Worked example: [CloudWatch and Firehose, side by side](https://cloudlesslabs.com/stack/guides/chatty-logs/index.md)

## The picks in brief

- [Amazon CloudWatch](https://cloudlesslabs.com/stack/aws-cloudwatch/index.md): My default. Good features. Keep it for the logs you watch live and alarm on; send the chatty bulk through Firehose to S3. Pricing: Sydney: Lambda logs $0.67/GB ingested (the first discount starts at 10 TB a month); Infrequent Access class $0.335/GB; storage $0.033/GB-month. Lambda's built-in delivery to S3 also costs $0.335/GB. Free tier: 5 GB a month.
- [Amazon Data Firehose](https://cloudlesslabs.com/stack/aws-firehose/index.md): My default. The cheapest way to land a stream of records in S3. No servers, no consumers to write, and about $0.04/GB in Sydney. Pricing: Sydney, Direct PUT: $0.037/GB ingested (first 500 TB), billed per record in 5 KB steps. JSON to Parquet conversion $0.023/GB. Dynamic partitioning $0.025/GB plus per-object fees (avoidable). Then normal S3 storage.
- [DuckDB](https://cloudlesslabs.com/stack/duckdb/index.md): Use when it fits. SQL over Parquet that runs anywhere, from my laptop to a Lambda. Next to Athena, not instead of it. Pricing: Free and MIT-licensed. In Lambda you pay compute and S3 GETs: a query that reads 1 GB costs about $0.002, against $0.005 on Athena, with no 10 MB minimum per query.
- [Cloudflare Workers](https://cloudlesslabs.com/stack/cloudflare-workers/index.md): My default. The edge primitive. It sits between your users and your real backend, and it's very, very good at that. Pricing: $5 a month per account, including 10M requests and 30M CPU-ms. Then $0.30 per million requests and $0.02 per million CPU-ms. Billed on CPU time only: waiting is free. No egress charges.

## Related

- [CloudWatch and Firehose, side by side](https://cloudlesslabs.com/stack/guides/chatty-logs/index.md): the worked example for this job, with costs
- [Edge](https://cloudlesslabs.com/stack/layers/edge/index.md): every tool in this layer
- [APIs, queues and events](https://cloudlesslabs.com/stack/layers/api-events/index.md): every tool in this layer
- [Data](https://cloudlesslabs.com/stack/layers/data/index.md): every tool in this layer
- [Observability](https://cloudlesslabs.com/stack/layers/observability/index.md): every tool in this layer
- [Every use case and tool in one file](https://cloudlesslabs.com/stack/brief.md)
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
