AWS Monitoring, Honestly: CloudWatch and Its Metered Traps (2026)
AWS monitoring explained — CloudWatch metrics, logs, alarms, and the per-metric costs that surprise you — plus why a bootstrapper's stack barely needs it.
Table of contents7 sections
The Console That Was Already Watching Me
In 2023, somewhere in the middle of the Clickly saga — my URL shortener, the one I’ve confessed to over-engineering more than once — I spun up an EC2 box to test something. I don’t even remember what. A cron job, probably, doing work that a $5 Railway instance would have done without the ceremony.
What I remember is opening the AWS console a week later and finding a graph I hadn’t asked for. CPU utilization. Network in, network out. A little green line breathing along the bottom. CloudWatch had been watching my useless box the whole time, for free, and I hadn’t lifted a finger. My first thought was: oh, this is nice, monitoring’s already handled.
My second thought, about ten minutes later, was: wait, what happens when I want more than one graph?
That’s the whole story of AWS monitoring in two sentences. It’s already there. And the moment you want it to do real work, it starts quietly clicking a meter you didn’t know was running.
What CloudWatch Actually Is (It’s Four Products in a Trenchcoat)
CloudWatch is AWS’s native monitoring service, and like most AWS things it’s sold as one product but is really a bundle of separate jobs — each metered separately. If you want the concepts underneath (what a metric is versus a log versus a trace, what to log and what never to log), I wrote that up on its own in monitoring and logging, explained. Here I just want to walk the four things CloudWatch charges you for.
- Metrics. Numbers over time. CPU, memory, request count, how many redirects Clickly served this hour. AWS services push a pile of these automatically. The ones you define — “signups today,” “queue depth” — are called custom metrics, and those are where the bill starts.
- Logs. CloudWatch Logs collects the
console.logs andstdoutof your Lambdas, containers, and EC2 boxes into searchable groups. Cheap to produce, and — say it with me — expensive to store at volume. - Alarms. The useful bit. “Text me when CPU is above 90% for five minutes.” An alarm watches one metric and fires an action. This is the part that turns a graph into an actual smoke detector.
- Dashboards. The pretty wall of graphs. The thing that makes you feel like a real company. Also, past three of them, a line item.
There’s a fifth piece, tracing, which lives in a sibling product called X-Ray — more on that below. If the metrics-vs-logs-vs-traces split still feels blurry, or if a vendor’s been selling you “observability” like it’s a smarter word for the same thing, I untangled observability vs monitoring separately. For now: CloudWatch is monitoring, and it’s fine at it.
The Free Tier That Makes You Feel Safe
Here’s the seductive part. CloudWatch has an always-free tier, and it’s genuinely enough for a toy project:
- 10 custom metrics and 1 million API requests a month.
- 10 alarms (standard resolution).
- 3 dashboards, each referencing up to 50 metrics.
- 5 GB of logs — that covers ingestion, storage, and the data your queries scan.
For my one lonely EC2 box, I never came close to any of these. That’s why it felt free. And that’s exactly the trap, because the free tier is sized for a hobby, and the second your product looks like a product, you blow past all four ceilings at once — and each one meters differently.
Where the Meter Bites (I Verified Every Number)
I checked these against the CloudWatch pricing page before writing them down, because AWS numbers drift and a stale figure would make this whole post sloppy. As of 2026, in the US regions:
- Custom metrics: $0.30 per metric, per month (for your first 10,000, then it tiers down to $0.10, $0.05, $0.02). Sounds trivial. But teams instrument everything — one metric per endpoint, per queue, per feature flag — and 200 custom metrics is north of $55/month before you’ve drawn a single graph.
- Alarms: $0.10 per standard alarm-metric, per month. Cheap individually. But high-resolution alarms (evaluating faster than 60 seconds) jump to $0.30, and composite alarms are $0.50 each. A real service ends up with dozens.
- Logs: $0.50 per GB to ingest, beyond the 5 GB free, plus $0.03 per GB for archived storage. There’s a cheaper Infrequent Access log class at $0.25/GB if you set it up. Ingestion is where founders get murdered: leave debug logging on, or let a bot hammer your API, and you can dump terabytes in a day. The meter does not care that the logs were garbage.
- Dashboards: $3 per dashboard, per month past the free three.
None of these is outrageous on its own. That’s the point. AWS monitoring doesn’t have a price — it has a dozen small meters, and the bill is the sum of a hundred decisions you made without noticing. It’s the same disease as the rest of AWS: death by a thousand line items, which is exactly why people end up staring at Cost Explorer trying to reverse-engineer their own invoice.
X-Ray: The Tracing You Almost Certainly Don’t Need Yet
If you want to follow a single request as it hops through your API gateway, three Lambdas, and a database call to find the slow one, that’s distributed tracing, and on AWS that’s X-Ray. It’s genuinely useful technology. It is also a solution to a problem you do not have.
Pricing is usage-based: $5.00 per 1 million traces recorded, then $0.50 per million retrieved or scanned, with the first 100,000 traces recorded free each month. That free tier is huge for a small app — you’ll likely never pay for X-Ray as a bootstrapper.
But the cost was never the reason to skip it. The reason is that X-Ray earns its keep when a request crosses seventeen microservices and you can’t eyeball which one is slow. You don’t have seventeen microservices. You have one box and a deploy. Tracing a monolith is like putting a GPS tracker on a goldfish — technically it works, and the fish is still in the bowl.
The Broken Engineer Verdict
Here’s the honest split, and it comes down to one question: are you already on AWS?
If you are — your app runs on EC2, RDS, EKS, Lambda, the whole family — then use CloudWatch. Don’t bolt a third-party tool onto an AWS app just to avoid it; that’s its own kind of over-engineering, and now you’re paying twice and shipping your logs across the internet for no reason. CloudWatch is right there, it’s integrated, and for uptime, a few alarms, and grepping logs when you’re confused, it does the job. Just treat every meter like it’s live: cap your log retention, set exclusion filters before the first surprise invoice, don’t instrument 300 custom metrics for a product with 30 users, and delete dashboards you built to feel important. CloudWatch is fine. It’s just fiddly, and it never stops counting.
If you’re not on AWS — and if you read my deployment tier list you know I think most founders shouldn’t be — then you should never open CloudWatch in your life. A CloudWatch bill for someone running on Vercel, Railway, and Neon is a bill you invented. The three things you actually need at zero-to-a-hundred users — is it up, did it crash, let me read the logs — are all free elsewhere, and I laid out that exact $0 stack in the Datadog post: Better Stack or UptimeRobot for uptime, Sentry (or PostHog if you’re already there) for errors, and Grafana Cloud’s absurdly generous free tier for logs and metrics if you want graphs. Same jobs. No meter. (If Grafana’s not your speed, here are the alternatives worth knowing.)
The mistake was never CloudWatch. CloudWatch is a good tool for AWS shops. The mistake is dragging yourself onto AWS because you wanted the monitoring, or paying its metered prices to watch a product that hasn’t earned a rupee.
The Bottom Line
CloudWatch surprised me once by being free, and surprised me again by revealing that “free” meant “free for one goldfish.” That’s AWS in a nutshell — the door’s wide open, the first hit’s on the house, and the meters start the moment you do anything real.
Monitoring should be a smoke detector, not a mission-control room you rent by the sensor. If you already live on AWS, CloudWatch is the smoke detector in the wall — use it, and keep an eye on the meters. If you don’t, you already have a smoke detector, and it’s free. Don’t go install a metered one next to it just because it has the AWS logo on the box. (Azure plays the exact same game — Azure Monitor’s per-GB pricing is the same trap with a different logo.)
This is the Broken Engineer Guide — I over-engineer everything, fail at business, and hand you the receipts so you don’t repeat my 1 AM console-refreshing. Go watch your uptime for free, then go build something worth monitoring.
