Observability parity — Cloud Logging, Monitoring and Trace against CloudWatch/X-Ray and Azure Monitor

Counterpart names, then the three differences that change an estimate: OpenTelemetry makes tracing portable and vendor SDKs do not, the multi-project scope question has no counterpart shape, and observability cost is driven by volume and cardinality on all three — which makes it the one family where the estimate input is the same everywhere.

markdownguidev1VNMS-FXV1stage: designtrust: officialfamily: observabilityservice: cloud-monitoringinterface: anyobservability paritycloud loggingcloudwatch logsazure monitor logslog analyticscloud monitoringcloudwatchapplication insightscloud traceX-RayOpenTelemetrymetrics scopelabel cardinality

Created 21 Oct 2026 · Modified 23 Oct 2026 · 1 version

Observability parity

1. The names

Google CloudAWSAzure
Google Cloud Observability (formerly the operations suite / Stackdriver)CloudWatch + X-RayAzure Monitor
Cloud LoggingCloudWatch LogsLog Analytics (Azure Monitor Logs)
Cloud MonitoringCloudWatch (metrics, alarms)Azure Monitor metrics; Application Insights
Cloud TraceAWS X-RayAzure Monitor / Application Insights
Cloud ProfilerCodeGuru ProfilerApplication Insights Profiler
Cloud Audit LogsCloudTrailAzure Activity Logs
log-based metricsCloudWatch metric filtersLog Analytics alerts on queries
PromQL querying in Cloud MonitoringAmazon Managed Service for PrometheusAzure Monitor managed service for Prometheus + Azure managed Grafana

Microsoft maps several Google Cloud services onto Azure Monitor alone, which reflects something real: Azure consolidates more of this into one product than either of the other clouds.

The Cloud Audit Logs / CloudTrail / Activity Logs row deserves separating out. On all three clouds this is a distinct, separately-retained, separately-governed log stream, and it is the one an auditor asks about. Never let it be merged into the application-logging estimate.

2. Tracing is the one family where portability is a solved problem — if you take it

Cloud Trace recommends OpenTelemetry over Google-specific APIs. AWS and Azure both point at OpenTelemetry too (Microsoft's own container-insights row names managed Prometheus and managed Grafana in the same breath).

So the estimate splits cleanly:

Source instrumentationTracing migration cost
OpenTelemetryan exporter configuration change. Near zero
X-Ray SDK, Application Insights SDK, or any vendor SDKapplication work, per service

And the strongest recommendation this hub makes about migration sequencing comes from this row: if the estate is on a vendor tracing SDK, move it to OpenTelemetry on the source platform, before the migration. It is work you were going to do anyway, it removes a whole category of migration risk, and it pays for itself even if the migration is cancelled.

3. The multi-project scope question has no counterpart shape

Google Cloud's metrics scope, with its scoping project, exists because a Google Cloud estate is many projects (reference/overview/projects-and-resource-hierarchy.md §4). AWS's boundary is the account and the Region; Azure's is the Log Analytics workspace and the subscription.

Estimate consequence. The design question — "which boundary does one dashboard span, and who may read it" — exists on all three, and the answer object is different on each, so it cannot be ported as configuration:

Google CloudAWSAzure
the aggregation objectmetrics scope + a central logging projectcross-account CloudWatch observabilityLog Analytics workspace design
the read-scoping objectlog views on a bucketIAM on log groupsworkspace and table-level RBAC

Budget this as a design task in every direction, not as a migration task. And do it early: discovering after a year that every dashboard was built in the wrong project is the expensive version.

4. Logging routing: Google Cloud's destination list is the thing to exploit

Cloud Logging routes to another project, a log bucket, BigQuery, Cloud Storage, or Pub/Sub, and "the destination can be in a different resource from where the log data originates".

NeedGoogle CloudAWSAzure
central, cross-account/project logginga sink to another projectCloudWatch cross-account, or Firehose to a central accounta shared Log Analytics workspace
logs as SQLa BigQuery sinkAthena over S3Log Analytics / KQL natively
cheap long retentiona Cloud Storage sinkS3 via Firehosearchive tier on a storage account
third-party SIEMa Pub/Sub sinkFirehoseEvent Hubs

The shapes correspond closely, so a routing design ports. Two things do not port: retention defaults — and this hub deliberately quotes none, because the Cloud Logging overview does not state them — and exclusions, which are per-platform and are where the cost actually gets controlled.

5. Pricing dimension (never a price)

Google CloudAWSAzure
logsvolume ingested, plus retention beyond the included period, plus the destination's own costingestion plus storage plus queries scannedper GB ingested plus retention, by table plan
metricscustom and log-based metric volume and cardinalitycustom metrics plus API requests plus alarmsmetrics plus alert rules
tracesspans ingestedtraces recorded and scannedper GB, with sampling

This is the one family where all three clouds meter the same thing: volume. So an observability estimate converts honestly between clouds — provided you have the inputs, which are the same three everywhere:

  1. GB of logs per day, by source;
  2. number of custom and log-based metrics, and their label cardinality;
  3. trace volume and the sampling rate.

Measure them on the source. They are also the three numbers that let you reduce the bill before moving, which is the rare case where the estimate work pays for itself immediately.

6. What this guide cannot tell you

Whether your dashboards and alerting policies can be converted automatically. In general they cannot: they are re-created. Count them — the count is the effort estimate. And note that each one also encodes a decision about what matters, which is worth re-examining rather than reproducing.

Read this document as markdown — the same bytes an agent receives.