OpenObserve Docs
MigrationMigrate from datadog to openobserve

Architecture & Terminology

Architecture: Datadog vs OpenObserve

Before: Datadog

A typical Datadog deployment looks like this:

  • Datadog Agent runs on every host (or as a DaemonSet on Kubernetes). It collects host metrics, integration metrics, logs, traces (via APM), and process data.
  • DogStatsD, embedded in the Agent on UDP port 8125, accepts custom application metrics.
  • APM tracers (dd-trace-java, dd-trace-py, dd-trace-go, etc.) embedded in your apps send spans to the Agent over port 8126.
  • The Agent ships everything to the Datadog SaaS backend via Datadog-proprietary HTTPS APIs.
  • Dashboards, monitors, notebooks, and SLOs are managed in the Datadog UI.

Components to operate: the Agent fleet, plus whatever shipping/log forwarders you've layered on top (Vector, Fluent Bit, custom forwarders). All ingestion and storage is owned by Datadog.

After: OpenObserve

The migration introduces an OpenTelemetry Collector as a translation layer in front of OpenObserve. The Collector accepts data in Datadog wire formats (DogStatsD, Datadog Agent API, Datadog APM) and exports it to OpenObserve in OTLP.

  • Datadog Agent (optionally retained) continues to collect host and integration data, but now forwards to the local OTel Collector instead of Datadog SaaS.
  • DogStatsD clients in your apps emit metrics unchanged. The OTel Collector's statsd receiver listens on port 8125 just like the Datadog Agent did.
  • APM tracers continue to emit spans; the Collector's datadog receiver translates them into OTLP.
  • OpenTelemetry Collector translates everything into OTLP and exports to OpenObserve.
  • OpenObserve stores everything as columnar Parquet in your own object storage (S3/GCS/Azure Blob/local disk).

Components to operate: 2, the OTel Collector and OpenObserve. The Datadog Agent can stay during migration or be replaced by the OTel Collector entirely.

What Changes and What Doesn't

Your application code does not change. DogStatsD calls, APM tracer instrumentation, and log emission stay exactly as they are. Only the destination endpoints change.

LayerChanges?Details
Applications (your code)Nodd-trace-* libraries and statsd clients keep working unchanged
Datadog AgentOptionalCan stay during dual-write; eventually replaced by OTel Collector
OTel CollectorNewActs as the Datadog-to-OTLP translator
Backend (Datadog SaaS)ReplacedBy OpenObserve
Visualization (Datadog UI)ReplacedBy OpenObserve's built-in UI

Terminology Mapping

If you're coming from Datadog, most concepts have direct equivalents in OpenObserve. The mapping isn't always 1

. Datadog has many product-named features that become generic capabilities in OpenObserve.

Concepts

Datadog ConceptOpenObserve EquivalentNotes
Datadog AgentOpenTelemetry Collector (or OpenObserve Collector)OTel Collector with Datadog receivers handles ingestion. Or use the OpenObserve Collector for an OTel-native setup
DogStatsDOTel Collector statsd receiverSame UDP port 8125, same line protocol, no app changes
Datadog APMOTel Collector datadog receiver to OTLP tracesdd-trace-* SDKs keep working; traces become OTLP downstream
Datadog LogsOpenObserve Logs (built-in stream type)Ingested via OTLP, Loki Push API, JSON, Fluent Bit, Vector, etc.
Datadog MetricsOpenObserve Metrics (built-in stream type)PromQL-compatible
Datadog TracesOpenObserve Traces (built-in stream type)OTLP-native
Datadog DashboardsOpenObserve DashboardsBuilt-in dashboard builder with 18+ chart types
Datadog MonitorsOpenObserve AlertsPromQL or SQL-based; Slack/PagerDuty/Email/Webhook destinations
Datadog NotebooksOpenObserve Dashboards + SQL queriesCombine narrative panels with live queries
Datadog SLOsScheduled pipelines + alertsPre-aggregate the SLI, alert on burn rate
Datadog WatchdogManual alerts (no AI auto-detect today)Watchdog is Datadog-proprietary; configure explicit thresholds in OpenObserve
Datadog HostsStreams + service.name fieldOpenObserve doesn't charge per host; there is no host concept in billing
Datadog TagsLabels / fieldsTags become labels on metrics (PromQL) or columns on logs/traces (SQL)
Custom MetricsSame, sent via DogStatsD or OTLPNo per-metric pricing
Datadog Pipelines (log processing)OpenObserve Pipelines (VRL-based)Parse, enrich, route, and transform logs in-flight
Datadog Live TailOpenObserve Logs Live ModeReal-time log streaming in the Logs explorer
Organization / AccountOrganizationOpenObserve uses orgs for multi-tenancy (default org is default)

Protocol Compatibility

OpenObserve can accept Datadog's wire formats through the OTel Collector, and it natively speaks open ingestion protocols. You're not changing how data is collected; you're routing it through a translation layer.

ProtocolDatadog EndpointOpenObserve / Collector Endpoint
DogStatsDlocalhost:8125 (UDP, Agent)localhost:8125 (UDP, OTel Collector statsd receiver)
Datadog APM (trace intake)localhost:8126 (Agent)localhost:8126 (OTel Collector datadog receiver)
Datadog Agent metrics APIhttps://api.datadoghq.com/api/v1/seriesOTel Collector datadogreceiver to OTLP to OpenObserve
OTLP HTTP(Datadog supports OTLP)http://openobserve:5080/api/default/
OTLP gRPC(Datadog supports OTLP)openobserve:5081
Prometheus Remote WriteN/A in Datadoghttp://openobserve:5080/api/default/prometheus/api/v1/write
Loki Push APIN/A in Datadoghttp://openobserve:5080/api/{org}/loki/api/v1/push
JSON over HTTPN/A in Datadoghttp://openobserve:5080/api/default/<stream>/_json

Metric Type Mapping

Datadog and OpenTelemetry use different vocabularies for metric types. The OTel Collector handles the translation, but it helps to know what becomes what:

Datadog TypeOpenTelemetry TypeNotes
GaugeGaugeSame semantics
CountSum (monotonic, cumulative)Datadog Count maps to OTel cumulative Sum
RateSum (monotonic, delta)Datadog Rate maps to OTel delta Sum
DistributionExponential HistogramDatadog Distributions become OTel Exponential Histograms
Histogram (timing)HistogramConfigurable bucket strategy in the statsd receiver

Next Steps

Need Help?

Was this page helpful?

Last updated on

On this page