Receive traces and metrics from Datadog-instrumented applications
You can configure Alloy to collect Datadog traces and metrics and forward them to any OpenTelemetry-compatible database.
This topic describes how to:
- Configure metrics and traces delivery.
- Configure the Alloy Datadog Receiver.
- Configure the Datadog Agent to forward metrics to the Alloy Datadog Receiver.
Before you begin
- Ensure that at least one instance of the Datadog Agent is collecting metrics and/or traces.
- Identify where you will write collected metrics. Metrics can be written to Prometheus or any other OTel-compatible database such as Grafana Mimir, Grafana Cloud, or Grafana Enterprise Metrics. Traces can be written to Grafana Tempo, Grafana Cloud, or Grafana Enterprise Traces.
- Be familiar with the concept of Components in Alloy.
Configure metrics delivery
Before components can collect Datadog metrics, you must have a component responsible for writing those metrics somewhere.
The otelcol.exporter.otlp component is responsible for delivering OTLP data to OTel-compatible endpoints.
Add the following
otelcol.exporter.otlp
component to your configuration file.otelcol.exporter.otlp "default" { client { endpoint = "<OTLP_ENDPOINT_URL>" auth = otelcol.auth.basic.auth.handler } }
Replace the following:
<OTLP_ENDPOINT_URL>
: The full URL of the OTel-compatible endpoint where metrics and traces will be sent, such ashttps://otlp-gateway-prod-eu-west-2.grafana.net/otlp
.
If your endpoint requires basic authentication, paste the following inside the
endpoint
block.basic_auth { username = "<USERNAME>" password = "<PASSWORD>" }
Replace the following:
<USERNAME>
: The basic authentication username.<PASSWORD>
: The basic authentication password or API key.
Configure Datadog Receiver
Add the following
otelcol.processor.batch
component to your configuration file.otelcol.processor.batch "default" { output { metrics = [otelcol.exporter.otlp.default.input] traces = [otelcol.exporter.otlp.default.input] } }
Add the following
otelcol.processor.deltatocumulative
component to your configuration file.otelcol.processor.deltatocumulative "default" { max_stale = “<MAX_STALE>” max_streams = <MAX_STREAMS> output { metrics = [otelcol.processor.batch.default.input] } }
Replace the following:
<MAX_STALE>
: How long until a series not receiving new samples is removed, such as “5m”.<MAX_STREAMS>
: The upper limit of streams to track. New streams exceeding this limit are dropped.
Add the following
otelcol.receiver.datadog
component to your configuration file.otelcol.receiver.datadog "default" { endpoint = “<HOST>:<PORT>” output { metrics = [otelcol.processor.deltatocumulative.default.input] traces = [otelcol.processor.batch.default.input] } }
Replace the following:
<HOST>
: The host address where the receiver will listen.<PORT>
: The port where the receiver will listen.
If your endpoint requires basic authentication, paste the following inside the
endpoint
block.basic_auth { username = "<USERNAME>" password = "<PASSWORD>" }
Replace the following:
<USERNAME>
: The basic authentication username.<PASSWORD>
: The basic authentication password or API key.
Configure Datadog Agent to forward metrics to the Datadog Receiver
You can set up your Datadog Agent to forward Datadog metrics simultaneously to Alloy and Datadog.
We recommend this approach for current Datadog users who want to try using Alloy.
Add the following environment variable to your datadog-agent installation.
DD_ADDITIONAL_ENDPOINTS='{"http://<DATADOG_RECEIVER_HOST>:<DATADOG_RECEIVER_PORT>": ["datadog-receiver"]}'
Replace the following:
<DATADOG_RECEIVER_HOST>
: The hostname where the Alloy receiver is found.<DATADOG_RECEIVER_PORT>
: The port where the Alloy receiver is exposed.
Alternatively, you might want your Datadog Agent to send metrics only to Alloy. You can do this by setting up your Datadog Agent in the following way:
Replace the DD_URL in the configuration YAML:
dd_url: http://<DATADOG_RECEIVER_HOST>:<DATADOG_RECEIVER_PORT>
Or by setting an environment variable:
DD_DD_URL='{"http://<DATADOG_RECEIVER_HOST>:<DATADOG_RECEIVER_PORT>": ["datadog-receiver"]}'
Run Alloy with the Datadog Receiver
Some of the components used here are experimental. In order to run them, you need to start Alloy with additional command line flags:
alloy run config.alloy --stability.level=experimental