OpenObserve Docs
MigrationMigrate from cloudwatch to openobserve

Migrating Dashboards

Overview

CloudWatch dashboards are JSON documents of metric widgets. There are two ways to move them to OpenObserve:

  1. Automated — the OpenObserve Dashboard Migrator converts CloudWatch dashboard JSON into OpenObserve dashboards, turning each metric widget into a SQL query over your CloudWatch metrics stream.
  2. Manual — recreate each dashboard by hand.

For most teams the automated path handles the bulk of the work; the manual path is a fallback and a way to understand what changed.

Migrate automatically with the Dashboard Migrator

The OpenObserve Dashboard Migrator is a free web tool that converts dashboards from CloudWatch — and Datadog, Grafana, and Kibana — into OpenObserve-native objects. For CloudWatch it reads a dashboard's widgets array and produces an OpenObserve dashboard with the widgets, layout, and variables translated.

How it works

  1. Load Dashboards — paste or upload the dashboard JSON, or browse your dashboards directly from AWS (the tool provides a read-only CloudFormation template to grant it access).
  2. Connect (optional) — point the tool at your OpenObserve instance so it can read your live stream catalog and validate the stream name.
  3. Review — inspect the translated widgets and queries.
  4. Export — create the dashboards directly in OpenObserve, or download JSON to import.

How CloudWatch metrics map to SQL

Because CloudWatch metrics arrive as a logs stream (see the overview), every metric widget becomes a SQL query over that stream:

CloudWatch conceptOpenObserve SQL
Metric CPUUtilization in AWS/EC2WHERE namespace = 'AWS/EC2' AND metric_name = 'CPUUtilization'
Statistic Averagesum(value_sum) / sum(value_count)
Statistic Sumsum(value_sum)
Statistic Min / Maxmin(value_min) / max(value_max)
Dimension InstanceId=i-123WHERE dimensions_instanceid = 'i-123'
Period / time rangeTime filter on _timestamp

What's skipped

The migrator flags widgets it can't convert, rather than guessing:

  • Logs Insights widgets — these query log data, not metrics; they're skipped with a note to recreate as OpenObserve SQL.
  • Alarm widgets — CloudWatch alarms are not migrated (see below).

Export your CloudWatch configuration first

Pull a static snapshot before you start:

# List dashboards
aws cloudwatch list-dashboards --region us-east-1

# Fetch one dashboard body
aws cloudwatch get-dashboard --dashboard-name <name> --region us-east-1

The get-dashboard response wraps the body in a DashboardBody string; the migrator accepts either that wrapper or the raw { "widgets": [...] } body.

Migrating manually

If you prefer to rebuild by hand, translate each metric widget to a SQL query over the metrics stream. For example, an Average of CPUUtilization for AWS/EC2 across all instances:

SELECT _timestamp, sum(value_sum) / sum(value_count) AS avg_cpu
FROM cloudwatch_metrics
WHERE namespace = 'AWS/EC2' AND metric_name = 'CPUUtilization'
GROUP BY _timestamp

Add dimensions_<name> filters to narrow to specific instances, regions, or auto-scaling groups, and use the same aggregation mapping shown above for Sum/Min/Max.

CloudWatch alarms

CloudWatch alarms are not migrated by the Dashboard Migrator. To move an alarm, recreate it as an OpenObserve scheduled alert: take the alarm's metric, statistic, and threshold, express them as a SQL query (using the same value_sum / value_count mapping), and attach the notification destination. See the Alerts documentation for details.

Next steps


Back to Overview

Was this page helpful?

Last updated on

On this page