Every major cloud ships its own monitoring tool for free, more or less. AWS has CloudWatch, Azure has Monitor, Google Cloud has Cloud Monitoring. So the real question for most teams isn't "which cloud monitoring tool is best" in the abstract, it's whether to use the one your cloud already gives you, or add something that sits across all of them.
This post covers the three native options plus Grafana Cloud as the cross-cloud pick, what each one actually charges for, and where the free-sounding native tools stop being free.
Why the Native Tool Isn't Always the Easy Answer#
The pitch for CloudWatch, Azure Monitor, and Cloud Monitoring is the same: it's already wired into the platform, you don't install an agent to get basic metrics, and a chunk of it is free. That pitch holds up fine for a single-cloud shop.
It gets more complicated the moment you have two clouds, or an on-prem system next to one cloud, or a team that wants one dashboard instead of three browser tabs. Native tools monitor their own cloud well and everything else poorly or not at all. That's not a flaw, it's just not what they're built for.
Pricing units differ in ways that matter. AWS and Google both charge by ingestion volume, a GB of logs or a MiB of metrics, which scales directly with how much you collect. Azure's Log Analytics pricing works the same way but with its own per-GB tiers. Grafana Cloud charges by active metric series for metrics and by GB for logs, a different unit that behaves differently as you add hosts versus as you add custom dimensions to existing hosts.
Free tiers are real but narrow. All three clouds give you a genuinely free allotment: a handful of custom metrics, a few GB of logs, a million API calls. Teams that stay inside default dashboards and provider-emitted metrics can run for a long time without a bill. The moment you add custom application metrics or longer retention, the meter starts.
Multi-cloud means multiple bills and no shared view, unless you add something on top. That something is usually Grafana, either self-hosted against each cloud's API or through Grafana Cloud.
Four Tools Worth Evaluating#
| Tool | Cloud coverage | Pricing model | Pricing (read 2026-10-22) |
|---|---|---|---|
| Amazon CloudWatch | AWS native | Pay per metric, log GB, and API call, no commitment | Free: 10 custom metrics, 5 GB logs, 1M API requests, 3 dashboards. Paid: $0.30/metric for the first 10,000 custom metrics, $0.10/metric for 10,001 to 250,000, $0.05 beyond that |
| Azure Monitor | Azure native | Pay per GB ingested into Log Analytics, tiered by daily volume | Standard metrics and activity logs free. Analytics Logs pay-as-you-go $2.30/GB, dropping to $1.48/GB at a 50,000 GB/day commitment tier. Basic Logs $0.50/GB |
| Google Cloud Monitoring | Google Cloud native | Pay per MiB of metrics ingested, per uptime check execution | Free: 150 MiB metrics/month. Paid: $0.2580/MiB for the next 100,000 MiB, down to $0.0610/MiB past 250,000 MiB. Uptime checks $0.30 per 1,000 executions, 1M free/month |
| Grafana Cloud | Any cloud, self-hosted, or hybrid | Pay per active metric series and per GB of logs, plus a platform fee | Free forever: 10,000 active series, 50 GB logs, 14-day retention. Pro: $19/month platform fee + $6.50 per 1,000 series above the free tier. Enterprise: $25,000/year minimum commit |
Amazon CloudWatch#
CloudWatch is the default for anything running on AWS. EC2, Lambda, RDS, and most other services push metrics to it automatically at no charge, and the free tier covers 10 custom metrics, 5 GB of log ingestion, and 3 custom dashboards (aws.amazon.com/cloudwatch/pricing, read 2026-10-22).
The pricing page itself is worth a look before you commit to a design: it runs over twenty worked examples covering custom metrics, log ingestion, Container Insights, X-Ray tracing, and anomaly-detection alarms, because almost every CloudWatch feature bills on its own separate meter. Custom metrics specifically are $0.30 per metric per month for the first 10,000, dropping to $0.10 from 10,001 to 250,000, and $0.05 beyond that.
Where it falls short: it only sees AWS. A workload split across AWS and an on-prem data center shows up in CloudWatch for the AWS half and nowhere for the rest. And because nearly every sub-feature has its own pricing dimension, a team that turns on Container Insights, custom metrics, and extended log retention can end up with a bill that takes real effort to predict in advance.
Azure Monitor#
Azure Monitor is bundled from the start: standard platform metrics and activity logs are free, and most of what you'd pay for lives in Log Analytics, the log and query backend behind Azure Monitor, Application Insights, and Microsoft Sentinel (azure.microsoft.com/pricing/details/monitor, read 2026-10-22).
Log Analytics offers three ingestion tiers. Basic Logs run $0.50/GB with 30 days of included retention and no analytics support. Analytics Logs, the full-featured tier with KQL queries and alerting, start at $2.30/GB pay-as-you-go and step down with committed daily volume, reaching $1.48/GB at a 50,000 GB/day commitment. Data kept past the included retention window costs an extra $0.10/GB per month.
Where it falls short: the pricing model rewards scale. A small team ingesting a few GB a day pays the full $2.30/GB rate, while a large one gets a meaningfully better unit price just for committing to more volume. It's also, like CloudWatch, built around its own cloud. Azure Arc extends it to other environments, but that's an added layer, not something Azure Monitor does natively.
Google Cloud Monitoring#
Cloud Monitoring (formerly Stackdriver) follows the same native pattern as the other two: GCP services send metrics for free, and the meter starts on custom metrics, uptime checks, and synthetic monitors (cloud.google.com/products/observability/pricing, read 2026-10-22).
The free allotment is 150 MiB of chargeable metrics per billing account per month. Past that, Google charges $0.2580 per MiB up to 100,000 MiB, $0.1510/MiB for the next tier, and $0.0610/MiB beyond 250,000 MiB. Uptime check executions are $0.30 per 1,000, with the first million free each month, which is generous for a small number of checks running frequently.
Where it falls short: the byte-based metric pricing means high-cardinality custom metrics, the kind with a label per user or per request ID, can get expensive fast, since every unique label combination is its own billed time series. And as with CloudWatch and Azure Monitor, anything outside Google Cloud is out of scope unless you ingest it through the agent or the API yourself.
Grafana Cloud#
Grafana Cloud is the one tool here that isn't tied to a specific cloud. It's built on the open-source Grafana, Loki, and Mimir stack, and it reads metrics and logs from whatever you point it at: AWS, Azure, GCP, on-prem, or a mix, through a shared set of dashboards (grafana.com/pricing, read 2026-10-22).
The free tier is unusually generous for a cross-cloud tool: 10,000 active metric series and 50 GB of log ingestion a month, forever, with 14-day retention. The Pro tier adds a $19/month platform fee plus $6.50 per 1,000 metric series beyond the free allotment, with retention extended to 13 months for metrics and 30 days for logs. Enterprise starts at a $25,000/year commitment and adds custom retention and deployment options.
Where it falls short: you're building the multi-cloud view yourself. Grafana doesn't automatically discover your AWS or Azure resources the way CloudWatch discovers EC2 instances; you configure exporters or integrations per cloud, per service. It's the right tool when the goal is one dashboard across providers, and the wrong one if you just want AWS metrics with zero setup.
Choosing by Situation#
Everything runs on one cloud and stays there. Use that cloud's native tool. CloudWatch, Azure Monitor, and Cloud Monitoring are all free for the basics and already wired in; paying for a second tool to watch one cloud is wasted spend.
Two or more clouds, or cloud plus on-prem, and you want one dashboard. Grafana Cloud. The free tier alone covers a surprising amount of ground before the per-series pricing kicks in.
AWS-heavy with deep use of managed services. CloudWatch, mainly because AWS services push to it by default and the Application Signals and X-Ray integration gives you tracing without adding a separate APM agent.
Cost-sensitive with unpredictable custom-metric volume. Read the pricing page for whichever cloud you're on before you build the dashboard, not after. CloudWatch and Cloud Monitoring both charge per metric or per byte in ways that punish high-cardinality labels, and that's much cheaper to design around up front than to discover in a bill.
Whichever you pick, the concepts don't change between providers: compute, managed services, scaling, network, and cost are the five things worth a dashboard, regardless of whose logo is on it.
What None of Them Tell You#
CloudWatch, Azure Monitor, Google Cloud Monitoring, and Grafana Cloud all read signals from inside your cloud resources. A healthy EC2 instance, a healthy database, a Grafana panel that's all green: none of that tells you whether a user outside your network can actually load the page.
That gap is exactly where an internal metric can be fine while the service is down. A load balancer misconfiguration, a DNS issue, a certificate that expired at 2am: none of these show up as a resource-level problem, because the resources themselves are healthy. ObserveOne runs scheduled uptime and API checks from outside your infrastructure, in multiple regions, so the thing that catches "the app is actually unreachable" doesn't depend on the same cloud that might be the one having the bad day.
Conclusion#
The three native cloud monitoring tools are free for the basics, locked to their own cloud, and priced per unit of data once you go past that: per metric for CloudWatch, per GB for Azure Monitor, per MiB for Google Cloud Monitoring. Grafana Cloud trades that native convenience for cross-cloud reach, with a free tier generous enough to try before any of the usage pricing applies.
Pick based on how many clouds you actually run, not on which tool has the nicer dashboard. ObserveOne covers the layer none of them touch: whether the thing you're monitoring is reachable from outside it.