OpenObserve Docs
MigrationMigrate from cloudwatch to openobserve

Migrate from CloudWatch to OpenObserve

Updated View MarkdownOpen in ChatGPTOpen in Claude

If you're using Amazon CloudWatch for AWS infrastructure metrics and dashboards and want to move to OpenObserve, this guide walks you through the migration. The OpenObserve Dashboard Migrator converts CloudWatch dashboards into OpenObserve dashboards automatically, and CloudWatch Metric Streams carry the underlying data across.

Migrating CloudWatch has two parts:

  1. The data — stream CloudWatch metrics into OpenObserve using CloudWatch Metric Streams → Kinesis Data Firehose (JSON or OpenTelemetry 1.0 output format). The metrics land in a logs stream with a fixed column shape (namespace, metric name, dimensions, sum/count/min/max).
  2. The dashboards — convert your CloudWatch dashboards into OpenObserve dashboards with the Dashboard Migrator, which turns each metric widget into a SQL query over that stream.

Table of Contents

  1. Overview — why migrate and what changes
  2. Migrating Dashboards — convert CloudWatch dashboards with the Dashboard Migrator

Why Migrate?

CloudWatch is convenient when you're already in AWS, but it bills per custom metric, per alarm, per dashboard, and per ingested log GB, and it keeps metrics for a limited retention window. As your footprint grows, the cost and the operational opacity both climb.

OpenObserve stores the same metrics as Apache Parquet on object storage (up to 140x more efficient), keeps data as long as you want, and lets you query metrics, logs, and traces in one place with SQL.

What OpenObserve Changes

CloudWatchOpenObserve
Pricing modelPer custom metric, alarm, dashboard, log GBStorage + compute only
Storage backendAWS-managed, fixed retentionApache Parquet on S3 / GCS / Azure Blob / local disk
Query languageCloudWatch Metrics Insights / Logs InsightsSQL
DashboardsCloudWatch dashboard JSONOpenObserve dashboard builder
Cross-signal correlationSeparate consoles for metrics vs. logsUnified logs, metrics, traces in one UI
Lock-inAWS-specific formatsOpen standards; data lives in your bucket

How CloudWatch metrics reach OpenObserve

CloudWatch metrics are ingested into OpenObserve as a logs stream via a CloudWatch Metric Stream:

CloudWatch → Kinesis Data Firehose (JSON or OpenTelemetry 1.0 format) → OpenObserve

In OpenObserve, go to Data > Data sources > Custom > Metrics > AWS CloudWatch Metrics to copy the Firehose HTTP Endpoint (/aws/<org>/cloudwatch_metrics/_kinesis_firehose) and the access key. The data lands in the logs stream cloudwatch_metrics.

OpenObserve flattens each metric data point into a row with these columns:

ColumnMeaning
namespaceThe CloudWatch namespace (e.g., AWS/EC2)
metric_nameThe metric name (e.g., CPUUtilization)
metric_dimensionsAll dimensions in one string, e.g. InstanceId=["i-0abc123"]
metric_stream_name, account_id, regionWhere the metric came from
unitThe metric unit
sum, count, min, maxAggregated sample values over the period
_timestampThe sample time

See the OpenObserve ingestion docs for the Firehose setup.

Before You Start

  • Export your dashboards: note which CloudWatch dashboards you actually use, and export them via the AWS API (get-dashboard) or the migrator's "browse from AWS" option.
  • Confirm the metric stream: make sure your CloudWatch Metric Stream → Firehose → OpenObserve pipeline is running before you migrate dashboards, so the queries have data to validate against.

Set Up OpenObserve

Before migrating, get OpenObserve running:

Sign up at cloud.openobserve.ai. No infrastructure to manage.

After logging in, go to Data > Data sources to find your ingestion credentials and endpoint URLs.

Download OpenObserve for your platform from the downloads page.

After installation, access the UI at http://localhost:5080 and go to Data > Data sources to find your ingestion credentials and ready-to-use configuration snippets.

Next Steps

Need Help?

Was this page helpful?

On this page