Skip to content
All flows

Move from Datadog to ClickStack without a monitoring gap

Accepts traffic from the Datadog Agents you already run and dual-ships every trace, metric, and log to both Datadog and ClickStack, so the two can be compared on identical data before you cut over.

The datadog receiver speaks the Datadog Agent's own protocol, so no host has to be reinstrumented before data reaches ClickStack: re-point each agent's dd_url, apm_config.apm_dd_url, and logs_config.logs_dd_url at this collector. The otlp receiver takes the services already moved to OTel SDKs, so hosts on either side of the migration run through one pipeline.

ClickStack Managed has no ingestion endpoint of its own, so the ClickStack leg is the clickhouse exporter writing straight to your Cloud service over its HTTPS endpoint, into the otel_* tables HyperDX reads out of the box. Metrics stay in a single pipeline because neither backend needs a conversion processor: the datadog exporter turns cumulative sums into Datadog counts itself, and ClickHouse stores whichever temporality arrives. Each exporter has its own file_storage-backed queue, so an outage on one backend does not block delivery to the other.

Set DD_API_KEY and DD_SITE for the current backend, and CLICKHOUSE_ENDPOINT, CLICKHOUSE_DATABASE, CLICKHOUSE_USER, and CLICKHOUSE_PASSWORD for the Cloud service, the same variables the Ship OTel data to ClickHouse flow uses. Both backends receive identical data for as long as the bridge runs; removing the datadog exporter from the pipelines completes the cutover.

How the data moves
receiverprocessorexporterextension
traces
datadogotlpmemory_limitertransformbatchdatadogclickhouse
metrics
datadogotlpmemory_limitertransformbatchdatadogclickhouse
logs
datadogotlpmemory_limitertransformbatchdatadogclickhouse

Use this flow

Open the config in Telflo and it becomes a working pipeline on the canvas: adapt what's specific to you, test it against recorded traffic, and push it to your fleet over OpAMP. Free account, no card.

Components

What's in it, and why

health_check

Liveness endpoint on :13133 so an orchestrator can tell whether the collector is up.

file_storage

Backs each exporter queue with disk, so a restart does not drop buffered telemetry. Creates its own directory on first start.

datadog

Accepts traces, metrics, and logs from the Datadog Agents already installed on your hosts, so no host has to be reinstrumented before data reaches ClickStack.

otlp

Entry point for the services you have already moved to OTel SDKs, over gRPC and HTTP.

memory_limiter

First in every pipeline so overload becomes backpressure at the receiver rather than an OOM kill of the bridge.

transform

Maps the Datadog env tag onto the semconv deployment.environment.name for OTLP traffic, matching what the datadog receiver already emits, so one HyperDX filter covers everything.

batch

Builds the large inserts ClickHouse wants, at least 1000 rows per request; the datadog exporter re-batches for its own intake caps internally.

datadog

Continues delivery to Datadog for the length of the migration, with its own disk-backed queue.

clickhouse

Writes the standard otel_logs, otel_traces, and otel_metrics_* tables that ClickStack/HyperDX reads, straight into your ClickHouse Cloud service.

Notes

Gotchas

  • 1

    The datadog receiver is an alpha component with no real /api/v1/validate route: the catch-all handler answers validation calls with an empty 200 while telemetry flows normally. Replay recorded agent traffic through the bridge before rolling it out to a fleet.

  • 2

    Only traces, metrics, and logs have an intake here. Live Process, Network Performance Monitoring, and orchestrator traffic have nowhere to land, so leave those agents pointed at Datadog until you stop paying for them.

  • 3

    Datadog Agent logs only reach this receiver over HTTP; set logs_config.force_use_http: true on the agent or the log stream silently stays on the old path. Agents must also disable the v3 metrics API (use_v3_api.series.enabled: false): the receiver has no v3 series intake and answers those payloads with a 200 while dropping them, so agents on 7.81+ defaults lose metrics silently. ClickHouse's migration guide pins Agent 7.59 or newer.

  • 4

    At this collector version the datadog exporter's retry_on_failure applies to logs only. Traces are attempted once and metrics rely on the Datadog client's internal retry, so a long Datadog outage can drop queued traces even though the queue is disk-backed. ClickStack delivery is unaffected because each exporter owns its own queue.

  • 5

    Agent-computed APM trace stats pass through the metrics pipeline to Datadog (the receiver hands them to the exporter as a dd.internal.stats.payload metric), so keep the datadog receiver and exporter in the same metrics pipeline. Services already on OTel SDKs produce no Datadog APM stats through the bridge, because the exporter's own stats computation is off by default at this version; add the datadog connector if you still need their APM numbers during the migration.

  • 6

    Datadog Agents send delta metrics and OTel SDKs send cumulative; ClickStack stores each point's temporality as data, and the datadog exporter converts cumulative sums itself, which is why no pipeline runs a temporality processor. Datadog's metrics intake is the least-tested signal on the receiver, and ClickHouse's migration guide says to migrate metrics last.

  • 7

    The clickhouse exporter's metrics support is alpha at this version (traces and logs are beta). create_schema: true makes the first run create the otel_* tables ClickStack reads; in production set it to false and manage the schema yourself so TTL changes are deliberate rather than applied by whichever collector starts first.

  • 8

    HyperDX keys everything off service.name: records that arrive without one land under a blank service and cannot be filtered by service. The receiver promotes the agent's service tag automatically, but check the OTLP side before trusting the comparison.

  • 9

    Both backends receive a full copy of everything, so egress and Datadog ingest cost roughly double for as long as the bridge runs.

Test it before your fleet runs it

Free account, no card. Open this flow in the editor, adapt it, and see what it does to real data before anything ships.