From 20b7afcb891ef9091b97a8bea7fe62cb769d6119 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Thu, 18 Sep 2025 12:01:41 -0600 Subject: [PATCH 1/8] Updates to align with wider product spec. --- content/en/opentelemetry/compatibility.md | 70 +++++++++-------------- 1 file changed, 28 insertions(+), 42 deletions(-) diff --git a/content/en/opentelemetry/compatibility.md b/content/en/opentelemetry/compatibility.md index ae84adc2f90e7..1d3cab9c0303e 100644 --- a/content/en/opentelemetry/compatibility.md +++ b/content/en/opentelemetry/compatibility.md @@ -13,52 +13,38 @@ Datadog offers multiple setup options to accommodate various use cases, from ful ## Setups -The following setups are supported: +Datadog supports several configurations for using OpenTelemetry. The primary difference between these setups is the choice of SDK (OpenTelemetry or Datadog) and the collector used to process and forward telemetry data. -| Setup Type | API | SDK | Collector/Agent | -|---------------------------------------------------------------|-------------|-------------------------|-----------------------------------------| -| **[Full OpenTelemetry][7]** | OTel API | OTel SDK | OTel Collector | -| **[OTel to Datadog Agent (OTLP)][6]** | OTel API | OTel SDK | Datadog Agent (OTLP Ingest) | -| **[OTel API with Datadog SDK and Agent][8]** | OTel API | Datadog SDK | Datadog Agent | -| **[Datadog Distribution of OTel Collector (DDOT)][9]** | OTel API | OTel SDK or Datadog SDK | Datadog Agent (with DDOT Collector) | -| **[Full Datadog][10]** | Datadog API | Datadog SDK | Datadog Agent | - -
The Datadog Distribution of OTel Collector supports two data flow options: -
  • OTel SDK → DDOT Collector, or
  • -
  • Datadog SDK → Datadog Agent
  • +| Setup Type | API | SDK | Collector/Agent | +|--------------------------------------|------------------------|-------------|----------------------------------| +| **Datadog SDK + DDOT (Recommended)** | Datadog API & OTel API | Datadog SDK | Datadog OTel Collector (DDOT) | +| **OTel SDK + DDOT** | OTel API | OTel SDK | Datadog OTel Collector (DDOT) | +| **OTel SDK + OSS Collector** | OTel API | OTel SDK | OTel Collector (OSS) | +| **Agentless OTLP** | OTel API | OTel SDK | N/A (Direct to Datadog endpoint) | ## Feature compatibility -### Supported Datadog features - -The following table shows Datadog feature compatibility across different setups: - -| Feature | Full OTel | OTel to Datadog Agent (OTLP) | OTel API with Datadog SDK and Agent | DDOT Collector | Full Datadog | -|-----------------------------------------------------|------------------------------------|------------------------------------|-------------------------------------|------------------------------------------------------|--------------| -| [Distributed Tracing][27] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Trace Metrics][26] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Correlated Traces, Metrics, Logs][19] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Runtime Metrics][23] | {{< X >}}
    (Java, .NET, Go only) | {{< X >}}
    (Java, .NET, Go only) | {{< X >}} | {{< X >}}
    (Java, .NET, Go only) | {{< X >}} | -| [Source code integration][24] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}}
    (Datadog SDK required) | {{< X >}} | -| [Real User Monitoring][22] (RUM) | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Cloud SIEM][18] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Cloud Network Monitoring][21] (CNM) | | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Live Container Monitoring/Kubernetes Explorer][20] | | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Live Processes][16] | | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Universal Service Monitoring][17] (USM) | |{{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [App and API Protection][11] (AAP) | | | {{< X >}} | {{< X >}}
    (Datadog SDK required) | {{< X >}} | -| [Continuous Profiler][12] | | | {{< X >}} | {{< X >}}
    (Datadog SDK required) | {{< X >}} | -| [Data Jobs Monitoring][13] (DJM) | | | {{< X >}}
    (Datadog SDK required) | {{< X >}}
    (Datadog SDK required) | {{< X >}} | -| [Data Streams Monitoring][15] (DSM) | {{< tooltip text="N/A" tooltip="OTel does not offer DSM functionality" >}}| | {{< X >}} | {{< X >}} | {{< X >}} | -| [Database Monitoring][14] (DBM) | {{< tooltip text="N/A" tooltip="OTel does not offer DBM functionality" >}}| | {{< X >}}
    (Datadog SDK required) | {{< X >}}
    (Datadog SDK required) | {{< X >}} | - -### Supported OpenTelemetry features - -The following table shows OpenTelemetry feature compatibility across different setups: - -| Feature | Full OTel | OTel to Datadog Agent (OTLP) | OTel API with Datadog SDK and Agent | DDOT Collector | Full Datadog | -|-----------------------------------------------------|------------------------------------|------------------------------------|-------------------------------------|------------------------------------------------------|--------------| -| [Span Links][25] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | +The following table shows feature compatibility across different setups: + +| Feature | Datadog SDK + DDOT (Recommended) | OTel SDK + DDOT | OTel SDK + OSS Collector | Agentless OTLP | +|---|---|---|---|---| +| [Cloud SIEM][18] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | +| [Correlated Traces, Metrics, Logs][19] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | +| [Distributed Tracing][27] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | +| [Real User Monitoring][22] (RUM) | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | +| [Runtime Metrics][23] | {{< X >}} | {{< X >}}
    (Java, .NET, Go only) | {{< X >}}
    (Java, .NET, Go only) | {{< X >}}
    (Java, .NET, Go only) | +| [Span Links][25] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | +| [Trace Metrics][26] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}}
    (From sampled spans) | +| [Cloud Network Monitoring][21] (CNM) | {{< X >}} | {{< X >}} | | | +| [Live Container Monitoring/Kubernetes Explorer][20] | {{< X >}} | {{< X >}} | | | +| [Live Processes][16] | {{< X >}} | {{< X >}} | | | +| [Universal Service Monitoring][17] (USM) | {{< X >}} | {{< X >}} | | | +| [App and API Protection][11] (AAP) | {{< X >}} | | | | +| [Continuous Profiler][12] | {{< X >}} | | | | +| [Data Jobs Monitoring][13] (DJM) | {{< X >}} | | | | +| [Data Streams Monitoring][15] (DSM) | {{< X >}} | | {{< tooltip text="N/A" tooltip="OTel does not offer DSM functionality" >}} | {{< tooltip text="N/A" tooltip="OTel does not offer DSM functionality" >}} | +| [Database Monitoring][14] (DBM) | {{< X >}} | | {{< tooltip text="N/A" tooltip="OTel does not offer DBM functionality" >}} | {{< tooltip text="N/A" tooltip="OTel does not offer DBM functionality" >}} | +| [Source code integration][24] | {{< X >}} | | | | ## More details From 83a69a50b23855b39759e3b30bc244549d749d2f Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Thu, 18 Sep 2025 16:11:33 -0600 Subject: [PATCH 2/8] Add links. --- content/en/opentelemetry/compatibility.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/content/en/opentelemetry/compatibility.md b/content/en/opentelemetry/compatibility.md index 1d3cab9c0303e..267a9b4fe6502 100644 --- a/content/en/opentelemetry/compatibility.md +++ b/content/en/opentelemetry/compatibility.md @@ -15,12 +15,12 @@ Datadog offers multiple setup options to accommodate various use cases, from ful Datadog supports several configurations for using OpenTelemetry. The primary difference between these setups is the choice of SDK (OpenTelemetry or Datadog) and the collector used to process and forward telemetry data. -| Setup Type | API | SDK | Collector/Agent | -|--------------------------------------|------------------------|-------------|----------------------------------| -| **Datadog SDK + DDOT (Recommended)** | Datadog API & OTel API | Datadog SDK | Datadog OTel Collector (DDOT) | -| **OTel SDK + DDOT** | OTel API | OTel SDK | Datadog OTel Collector (DDOT) | -| **OTel SDK + OSS Collector** | OTel API | OTel SDK | OTel Collector (OSS) | -| **Agentless OTLP** | OTel API | OTel SDK | N/A (Direct to Datadog endpoint) | +| Setup Type | API | SDK | Collector/Agent | +|--------------------------------------------|------------------------|-------------|-----------------------------------------------| +| [**Datadog SDK + DDOT (Recommended)**][29] | Datadog API or OTel API | Datadog SDK | Datadog Distribution of OTel Collector (DDOT) | +| [**OTel SDK + DDOT**][29] | OTel API | OTel SDK | Datadog Distribution of OTel Collector (DDOT) | +| [**OTel SDK + OSS Collector**][7] | OTel API | OTel SDK | OTel Collector (OSS) | +| [**Agentless OTLP**][28] | OTel API | OTel SDK | N/A (Direct to Datadog endpoint) | ## Feature compatibility @@ -108,3 +108,5 @@ When using Datadog and OpenTelemetry together, Datadog recommends the following [25]: /tracing/trace_collection/span_links/ [26]: /tracing/metrics/metrics_namespace/ [27]: /tracing/trace_collection/ +[28]: /opentelmetry/agentless +[29]: /opentelemetry/setup/ddot_collector \ No newline at end of file From 0c448e29fb0624760ce6bb0ceb194a99573be38b Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Fri, 19 Sep 2025 11:59:51 -0600 Subject: [PATCH 3/8] Remove OTLP in Agent reference for live processes. --- content/en/opentelemetry/compatibility.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/content/en/opentelemetry/compatibility.md b/content/en/opentelemetry/compatibility.md index 267a9b4fe6502..0fa364961cd37 100644 --- a/content/en/opentelemetry/compatibility.md +++ b/content/en/opentelemetry/compatibility.md @@ -15,12 +15,12 @@ Datadog offers multiple setup options to accommodate various use cases, from ful Datadog supports several configurations for using OpenTelemetry. The primary difference between these setups is the choice of SDK (OpenTelemetry or Datadog) and the collector used to process and forward telemetry data. -| Setup Type | API | SDK | Collector/Agent | -|--------------------------------------------|------------------------|-------------|-----------------------------------------------| +| Setup Type | API | SDK | Collector/Agent | +|--------------------------------------------|-------------------------|-------------|-----------------------------------------------| | [**Datadog SDK + DDOT (Recommended)**][29] | Datadog API or OTel API | Datadog SDK | Datadog Distribution of OTel Collector (DDOT) | -| [**OTel SDK + DDOT**][29] | OTel API | OTel SDK | Datadog Distribution of OTel Collector (DDOT) | -| [**OTel SDK + OSS Collector**][7] | OTel API | OTel SDK | OTel Collector (OSS) | -| [**Agentless OTLP**][28] | OTel API | OTel SDK | N/A (Direct to Datadog endpoint) | +| [**OTel SDK + DDOT**][29] | OTel API | OTel SDK | Datadog Distribution of OTel Collector (DDOT) | +| [**OTel SDK + OSS Collector**][7] | OTel API | OTel SDK | OTel Collector (OSS) | +| [**Agentless OTLP**][28] | OTel API | OTel SDK | N/A (Direct to Datadog endpoint) | ## Feature compatibility @@ -62,10 +62,6 @@ Span-level or endpoint-level monitoring is **not** supported. For more information, see [Cloud Network Monitoring Setup][3]. -### Live Processes - -For **OTel to Datadog Agent (OTLP)**, you must enable the [Process Agent][4]. - ### Source Code Integration For unsupported languages in OpenTelemetry setups, [configure telemetry tagging][5] to link data to a specific commit. From ecd79a2ea7d438da486c6c7a22035b00ecc8d516 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Fri, 19 Sep 2025 12:09:26 -0600 Subject: [PATCH 4/8] Add tooltip to clarify Agentless sampled metrics. --- content/en/opentelemetry/compatibility.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/opentelemetry/compatibility.md b/content/en/opentelemetry/compatibility.md index 0fa364961cd37..112b298ef83cf 100644 --- a/content/en/opentelemetry/compatibility.md +++ b/content/en/opentelemetry/compatibility.md @@ -34,7 +34,7 @@ The following table shows feature compatibility across different setups: | [Real User Monitoring][22] (RUM) | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | [Runtime Metrics][23] | {{< X >}} | {{< X >}}
    (Java, .NET, Go only) | {{< X >}}
    (Java, .NET, Go only) | {{< X >}}
    (Java, .NET, Go only) | | [Span Links][25] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Trace Metrics][26] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}}
    (From sampled spans) | +| [Trace Metrics][26] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}}
    ({{< tooltip text="Sampled" tooltip="Trace metrics are calculated on the backend based on ingested spans that have passed through sampling, not on 100% of local traces before sampling." >}}) | | [Cloud Network Monitoring][21] (CNM) | {{< X >}} | {{< X >}} | | | | [Live Container Monitoring/Kubernetes Explorer][20] | {{< X >}} | {{< X >}} | | | | [Live Processes][16] | {{< X >}} | {{< X >}} | | | From 9a97725192e85abd613ac410c7a0a4dce0969067 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 22 Sep 2025 09:47:48 -0600 Subject: [PATCH 5/8] Replace Agentless with OTLP ingest. --- config/_default/menus/main.en.yaml | 2 +- content/en/opentelemetry/_index.md | 2 +- content/en/opentelemetry/compatibility.md | 6 +++--- content/en/opentelemetry/reference/otel_metrics.md | 2 +- content/en/opentelemetry/setup/_index.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/config/_default/menus/main.en.yaml b/config/_default/menus/main.en.yaml index e88e731ee6777..626a920d30feb 100644 --- a/config/_default/menus/main.en.yaml +++ b/config/_default/menus/main.en.yaml @@ -711,7 +711,7 @@ menu: identifier: otel-setup-otlp-ingest parent: otel-setup-other weight: 4022 - - name: Agentless Deployment + - name: Direct OTLP Ingest url: /opentelemetry/setup/agentless identifier: otel-setup-intake-endpoint parent: otel-setup-other diff --git a/content/en/opentelemetry/_index.md b/content/en/opentelemetry/_index.md index 81491afb294da..e015dee543e01 100644 --- a/content/en/opentelemetry/_index.md +++ b/content/en/opentelemetry/_index.md @@ -132,7 +132,7 @@ If your applications and services are instrumented with OpenTelemetry libraries, ### Additional setup options -For other setup options, including Agentless deployment, see [Send Data to Datadog][7]. +For other setup options, including direct OTLP ingestion, see [Send Data to Datadog][7]. ## Further reading diff --git a/content/en/opentelemetry/compatibility.md b/content/en/opentelemetry/compatibility.md index 112b298ef83cf..cbc8779103d09 100644 --- a/content/en/opentelemetry/compatibility.md +++ b/content/en/opentelemetry/compatibility.md @@ -20,13 +20,13 @@ Datadog supports several configurations for using OpenTelemetry. The primary dif | [**Datadog SDK + DDOT (Recommended)**][29] | Datadog API or OTel API | Datadog SDK | Datadog Distribution of OTel Collector (DDOT) | | [**OTel SDK + DDOT**][29] | OTel API | OTel SDK | Datadog Distribution of OTel Collector (DDOT) | | [**OTel SDK + OSS Collector**][7] | OTel API | OTel SDK | OTel Collector (OSS) | -| [**Agentless OTLP**][28] | OTel API | OTel SDK | N/A (Direct to Datadog endpoint) | +| [**Direct OTLP Ingest**][28] | OTel API | OTel SDK | N/A (Direct to Datadog endpoint) | ## Feature compatibility The following table shows feature compatibility across different setups: -| Feature | Datadog SDK + DDOT (Recommended) | OTel SDK + DDOT | OTel SDK + OSS Collector | Agentless OTLP | +| Feature | Datadog SDK + DDOT (Recommended) | OTel SDK + DDOT | OTel SDK + OSS Collector | Direct OTLP Ingest | |---|---|---|---|---| | [Cloud SIEM][18] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | [Correlated Traces, Metrics, Logs][19] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | @@ -104,5 +104,5 @@ When using Datadog and OpenTelemetry together, Datadog recommends the following [25]: /tracing/trace_collection/span_links/ [26]: /tracing/metrics/metrics_namespace/ [27]: /tracing/trace_collection/ -[28]: /opentelmetry/agentless +[28]: /opentelemetry/setup/agentless [29]: /opentelemetry/setup/ddot_collector \ No newline at end of file diff --git a/content/en/opentelemetry/reference/otel_metrics.md b/content/en/opentelemetry/reference/otel_metrics.md index a1900c7ba3516..d2537d89562bd 100644 --- a/content/en/opentelemetry/reference/otel_metrics.md +++ b/content/en/opentelemetry/reference/otel_metrics.md @@ -21,7 +21,7 @@ To send OpenTelemetry metrics to Datadog, you have three main options: - [OpenTelemetry Collector][11] - [Datadog Agent][12] -- [Agentless Deployment][13] +- [Direct OTLP Ingest][13] For more information about which setup is right for you, see [Send OpenTelemetry Data to Datadog][10]. diff --git a/content/en/opentelemetry/setup/_index.md b/content/en/opentelemetry/setup/_index.md index 2ac2b85334439..f13033f8ad4cd 100644 --- a/content/en/opentelemetry/setup/_index.md +++ b/content/en/opentelemetry/setup/_index.md @@ -46,7 +46,7 @@ Alternative methods are available for specific use cases, such as maintaining a Best for: Users on platforms other than Kubernetes Linux, or those who prefer a minimal configuration without managing Collector pipelines. {{< /nextlink >}} {{< nextlink href="/opentelemetry/setup/agentless" >}} -

    Agentless Deployment (Preview)

    +

    Direct OTLP Ingest (Preview)

    Best for: Situations requiring direct data transmission to Datadog's intake endpoint without any intermediary components. {{< /nextlink >}} {{< /whatsnext >}} From 35682c875fe1bfd9347e66ff9625008a8db19632 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Thu, 25 Sep 2025 16:48:38 -0600 Subject: [PATCH 6/8] Remove RUM support for OTel SDKs; remove Agentless from URL paths. --- content/en/opentelemetry/compatibility.md | 2 +- .../{agentless => otlp_ingest}/_index.md | 0 .../setup/{agentless => otlp_ingest}/logs.md | 1 + .../setup/otlp_ingest/metrics.md | 299 ++++++++++++++++++ .../opentelemetry/setup/otlp_ingest/traces.md | 269 ++++++++++++++++ 5 files changed, 570 insertions(+), 1 deletion(-) rename content/en/opentelemetry/setup/{agentless => otlp_ingest}/_index.md (100%) rename content/en/opentelemetry/setup/{agentless => otlp_ingest}/logs.md (99%) create mode 100644 content/en/opentelemetry/setup/otlp_ingest/metrics.md create mode 100644 content/en/opentelemetry/setup/otlp_ingest/traces.md diff --git a/content/en/opentelemetry/compatibility.md b/content/en/opentelemetry/compatibility.md index cbc8779103d09..5604a2b52d1e8 100644 --- a/content/en/opentelemetry/compatibility.md +++ b/content/en/opentelemetry/compatibility.md @@ -31,7 +31,6 @@ The following table shows feature compatibility across different setups: | [Cloud SIEM][18] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | [Correlated Traces, Metrics, Logs][19] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | [Distributed Tracing][27] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | -| [Real User Monitoring][22] (RUM) | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | [Runtime Metrics][23] | {{< X >}} | {{< X >}}
    (Java, .NET, Go only) | {{< X >}}
    (Java, .NET, Go only) | {{< X >}}
    (Java, .NET, Go only) | | [Span Links][25] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}} | | [Trace Metrics][26] | {{< X >}} | {{< X >}} | {{< X >}} | {{< X >}}
    ({{< tooltip text="Sampled" tooltip="Trace metrics are calculated on the backend based on ingested spans that have passed through sampling, not on 100% of local traces before sampling." >}}) | @@ -44,6 +43,7 @@ The following table shows feature compatibility across different setups: | [Data Jobs Monitoring][13] (DJM) | {{< X >}} | | | | | [Data Streams Monitoring][15] (DSM) | {{< X >}} | | {{< tooltip text="N/A" tooltip="OTel does not offer DSM functionality" >}} | {{< tooltip text="N/A" tooltip="OTel does not offer DSM functionality" >}} | | [Database Monitoring][14] (DBM) | {{< X >}} | | {{< tooltip text="N/A" tooltip="OTel does not offer DBM functionality" >}} | {{< tooltip text="N/A" tooltip="OTel does not offer DBM functionality" >}} | +| [Real User Monitoring][22] (RUM) | {{< X >}} | | | | | [Source code integration][24] | {{< X >}} | | | | ## More details diff --git a/content/en/opentelemetry/setup/agentless/_index.md b/content/en/opentelemetry/setup/otlp_ingest/_index.md similarity index 100% rename from content/en/opentelemetry/setup/agentless/_index.md rename to content/en/opentelemetry/setup/otlp_ingest/_index.md diff --git a/content/en/opentelemetry/setup/agentless/logs.md b/content/en/opentelemetry/setup/otlp_ingest/logs.md similarity index 99% rename from content/en/opentelemetry/setup/agentless/logs.md rename to content/en/opentelemetry/setup/otlp_ingest/logs.md index ebd2984b3c431..93350fcd539d1 100644 --- a/content/en/opentelemetry/setup/agentless/logs.md +++ b/content/en/opentelemetry/setup/otlp_ingest/logs.md @@ -3,6 +3,7 @@ title: Datadog OTLP Logs Intake Endpoint aliases: - /opentelemetry/otlp_logs - /opentelemetry/setup/intake_endpoint/otlp_logs + - /opentelemetry/setup/agentless/logs further_reading: - link: "https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/" tag: "External Site" diff --git a/content/en/opentelemetry/setup/otlp_ingest/metrics.md b/content/en/opentelemetry/setup/otlp_ingest/metrics.md new file mode 100644 index 0000000000000..11a821653938a --- /dev/null +++ b/content/en/opentelemetry/setup/otlp_ingest/metrics.md @@ -0,0 +1,299 @@ +--- +title: Datadog OTLP Metrics Intake Endpoint +aliases: + - "/opentelemetry/otlp_metrics" + - "/opentelemetry/setup/intake_endpoint/otlp_metrics" + - /opentelemetry/setup/agentless/metrics +further_reading: + - link: "https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/" + tag: "External Site" + text: "General OpenTelemetry SDK Configuration" + - link: "https://opentelemetry.io/docs/reference/specification/sdk-environment-variables/" + tag: "External Site" + text: "OpenTelemetry Environment Variable Spec" + - link: "https://opentelemetry.io/docs/specs/otel/protocol/exporter/" + tag: "External Site" + text: "OpenTelemetry Protocol Exporter" + - link: "https://opentelemetry.io/docs/specs/otel/metrics/sdk_exporters/otlp/ " + tag: "External Site" + text: "OTLP Metrics Exporter" + - link: "/opentelemetry/guide/otlp_delta_temporality/" + tag: "Documentation" + text: "Configure delta temporality in OpenTelemetry" + - link: "/metrics/otlp/?tab=summary#mapping" + tag: "Documentation" + text: "OTLP Metrics Mapping in Datadog" +site_support_id: otlp_agentless +--- + +{{< callout header="false" btn_hidden="true">}} + The Datadog OTLP metrics intake endpoint is in Preview. To request access, contact your account representative. +{{< /callout >}} + +## Overview + +Datadog's OpenTelemetry Protocol (OTLP) metrics intake API endpoint allows you to send metrics directly to Datadog. With this feature, you don't need to run the [Datadog Agent][2] or [OpenTelemetry Collector + Datadog Exporter][1]. + +You might prefer this option if you're looking for a straightforward setup and want to send metrics directly to Datadog without using the Datadog Agent or OpenTelemetry Collector. + +This endpoint is particularly useful in the following scenarios: + +- **OpenTelemetry distributions without Datadog Exporter support**: Some OpenTelemetry distributions, such as the [AWS Distro for OpenTelemetry (ADOT)][8], have removed vendor-specific exporters in favor of a unified OTLP exporter. The OTLP metrics endpoint enables these distributions to send metrics directly to Datadog seamlessly. + +- **Technical constraints using the Datadog Exporter or Agent**: Ideal for scenarios where installing additional software is impractical or restrictive, such as third-party managed services (for example, Vercel), applications on customer devices, or environments requiring streamlined, Agentless observability pipelines. The OTLP metrics endpoint enables direct OTLP metric ingestion in these scenarios. + +## Configuration + +To export OTLP metrics data to the Datadog OTLP metrics intake endpoint: + +1. [Ensure only delta metrics are sent](#ensure-only-delta-metrics-are-sent). +1. [Configure the OTLP HTTP exporter](#configure-the-exporter). + - Set the Datadog OTLP metrics intake endpoint. + - Configure the required HTTP headers. +1. (Optional) [Set the `dd-otel-metric-config` HTTP header](#optional-configure-the-metric-translator) to configure the metric translator behavior. + +### Configure the exporter + +To send OTLP data to the Datadog OTLP metrics intake endpoint, use the OTLP HTTP exporter. For metrics, the exporter supports both HTTP Protobuf and HTTP JSON. HTTP Protobuf is recommended for better performance. + +The process differs depending on whether you're using automatic or manual instrumentation for OpenTelemetry. + +
    Based on your Datadog site, which is {{< region-param key=dd_datacenter code="true" >}}: Replace your endpoint with {{< region-param key="otlp_metrics_endpoint" code="true" >}} in the following examples.
    + +#### Ensure only delta metrics are sent + +The Datadog OTLP metrics intake endpoint accepts only **delta** metrics. If you attempt to send **cumulative** metrics (the default in most SDKs), you will receive an error. Make sure to configure your OpenTelemetry SDK or Collector to produce delta metrics. + +- For [supported languages][7], set the `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` environment variable to `delta`. +- Otherwise, set the temporality preference in your code. For more information, read [Configure delta temporality in OpenTelemetry][5]. + +#### Automatic instrumentation + +If you are using [OpenTelemetry automatic instrumentation][3], set the following environment variables: + +```shell +export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL="http/protobuf" +export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT="{{< region-param key="otlp_metrics_endpoint" >}}" +export OTEL_EXPORTER_OTLP_METRICS_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=${PARTNER_ID}" +export OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE="delta" +``` + +
    + The dd-otlp-source header is only required for Datadog platform partners who receive a specific identifier from Datadog for multi-tenant data ingestion. +
    + Datadog customers whose organizations are allowlisted for OTLP metrics intake should omit this header. Contact your Datadog representative if unsure. +
    + +#### Manual instrumentation + +If you are using manual instrumentation with OpenTelemetry SDKs, configure the OTLP HTTP Protobuf exporter programmatically. + +{{< tabs >}} +{{% tab "JavaScript" %}} + +The JavaScript exporter is [`@opentelemetry/exporter-metrics-otlp-proto`][100]. To configure the exporter, use the following code snippet: + +```javascript +const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-proto'); + +const exporter = new OTLPMetricExporter({ + url: 'https://api.datadoghq.com/api/intake/otlp/v1/metrics', + temporalityPreference: AggregationTemporalityPreference.DELTA, // Ensure delta temporality + headers: { + 'dd-api-key': process.env.DD_API_KEY, + 'dd-otel-metric-config': '{"resource_attributes_as_tags": true}', + 'dd-otlp-source': '${PARTNER_ID}', // For Datadog platform partners only. Use the ID provided by Datadog. + }, +}); +``` + +[100]: https://www.npmjs.com/package/@opentelemetry/exporter-metrics-otlp-proto + +{{% /tab %}} + +{{% tab "Java" %}} + +The Java exporter is [`OtlpHttpMetricExporter`][200]. To configure the exporter, use the following code snippet: + +```java +import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; + +OtlpHttpMetricExporter exporter = OtlpHttpMetricExporter.builder() + .setEndpoint("https://api.datadoghq.com/api/intake/otlp/v1/metrics") + .setAggregationTemporalitySelector( + AggregationTemporalitySelector.deltaPreferred()) // Ensure delta temporality + .addHeader("dd-api-key", System.getenv("DD_API_KEY")) + .addHeader("dd-otel-metric-config", "{\"resource_attributes_as_tags\": true}") + .addHeader("dd-otlp-source", "${PARTNER_ID}") // For Datadog platform partners only. Use the ID provided by Datadog. + .build(); +``` + +[200]: https://javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-otlp-http-metrics/ + +{{% /tab %}} + +{{% tab "Go" %}} + +The Go exporter is [`otlpmetrichttp`][300]. To configure the exporter, use the following code snippet: + +```go +import "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp" + +metricExporter, err := otlpmetrichttp.New( + ctx, + otlpmetrichttp.WithEndpoint("api.datadoghq.com"), + otlpmetrichttp.WithURLPath("/api/intake/otlp/v1/metrics"), + otlpmetrichttp.WithTemporalitySelector(deltaSelector), // Ensure delta temporality + otlpmetrichttp.WithHeaders( + map[string]string{ + "dd-api-key": os.Getenv("DD_API_KEY"), + "dd-otel-metric-config": "{\"resource_attributes_as_tags\": true}", + "dd-otlp-source": "${PARTNER_ID}", // For Datadog platform partners only. Use the ID provided by Datadog. + }), +) +``` + +[300]: https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp + +{{% /tab %}} + +{{% tab "Python" %}} + +The Python exporter is [`OTLPMetricExporter`][400]. To configure the exporter, use the following code snippet: + +```python +from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter + +exporter = OTLPMetricExporter( + endpoint="https://api.datadoghq.com/api/intake/otlp/v1/metrics", + preferred_temporality=deltaTemporality, # Ensure delta temporality + headers={ + "dd-api-key": os.environ.get("DD_API_KEY"), + "dd-otel-metric-config": '{"resource_attributes_as_tags": true}', + "dd-otlp-source": "${PARTNER_ID}" # Replace with the specific value provided by Datadog for your organization + }, +) +``` + +[400]: https://pypi.org/project/opentelemetry-exporter-otlp-proto-http/ + +{{% /tab %}} +{{< /tabs >}} + +### (Optional) Configure the metric translator + +Use the `dd-otel-metric-config` header to configure how metrics are translated and sent to Datadog. The JSON header contains the following fields: + +`resource_attributes_as_tags` +: **Type**: Boolean
    +**Default**: `false`
    +If set to `true`, transforms all resource attributes into metric labels, which are then converted into tags. + +`instrumentation_scope_metadata_as_tags` +: **Type**: Boolean
    +**Default**: `false`
    +If set to `true`, adds the name and version of the instrumentation scope that created a metric to the metric tags. + +`histograms.mode` +: **Type**: String
    +Mode for exporting histograms. Valid values are: + - `distributions`: sends histograms as Datadog distributions (recommended). + - `counters`: sends histograms as Datadog counts, one metric per bucket. + - `nobuckets`: sends no bucket histogram metrics. + +`histograms.send_aggregation_metrics` +: **Type**: Boolean
    +If set to `true`, writes additional `.sum`, `.count`, `.min`, and `.max` metrics for histograms. + +`summaries.mode` +: **Type**: String
    +Mode for exporting OTLP summaries. Valid values are: + - `noquantiles`: sends no `.quantile` metrics. `.sum` and `.count` metrics are still sent. + - `gauges`: sends `.quantile` metrics as gauges tagged by the quantile. + +For example: + +```json +{ + "resource_attributes_as_tags": true, + "instrumentation_scope_metadata_as_tags": true, + "histograms": { + "mode": "distributions", + "send_aggregation_metrics": true + }, + "summaries": { + "mode": "gauges" + } +} +``` + +## OpenTelemetry Collector + +If you are using an OpenTelemetry Collector distribution that doesn't support the Datadog Exporter, you can configure the [`otlphttpexporter`][4] to export metrics to the Datadog OTLP metrics intake endpoint. + +For example, your `config.yaml` file would look like this: + +```yaml +... +exporters: + otlphttp: + metrics_endpoint: {{< region-param key="otlp_metrics_endpoint" >}} + headers: + dd-api-key: ${env:DD_API_KEY} + dd-otel-metric-config: '{"resource_attributes_as_tags": true}' + dd-otlp-source: "${PARTNER_ID}", # For Datadog platform partners only. Use the ID provided by Datadog. +... + +service: + pipelines: + metrics: + receivers: [otlp] + processors: [batch, cumulativetodelta] + exporters: [otlphttp] +``` +
    Note the cumulativetodelta processor in the pipeline, which converts cumulative metrics to delta metrics. Delta metrics are required for the OTLP metrics intake endpoint. For more information, see Configure delta temporality in OpenTelemetry.
    + +## Troubleshooting + +### Error: 403 Forbidden + +If you receive a `403 Forbidden` error when sending metrics to the Datadog OTLP metrics intake endpoint, it indicates one of the following issues: + +- The API key belongs to an organization that is not allowed to access the Datadog OTLP metrics intake endpoint. + **Solution**: To request access, contact your account representative. + +- The `dd-otlp-source` header is missing or has an incorrect value. + **Solution**: This error can relate to the dd-otlp-source header: + - Datadog Platform Partners: Verify dd-otlp-source is set to the unique identifier provided by Datadog. + - Individual Datadog Customers: If your organization is allowlisted, this header should be omitted. Remove dd-otlp-source from your configuration. + - If the error persists, contact your Datadog representative to confirm if dd-otlp-source is required for your organization and, if so, its correct value. + +- The endpoint URL is incorrect for your organization. + **Solution**: Use the correct endpoint URL for your organization. Your site is {{< region-param key=dd_datacenter code="true" >}}, so you need to use the {{< region-param key="otlp_metrics_endpoint" code="true" >}} endpoint. + +### Error: 413 Request Entity Too Large + +If you receive a `413 Request Entity Too Large` error when sending metrics to the Datadog OTLP metrics intake endpoint, it indicates that the payload size sent by the OTLP exporter exceeds the Datadog metrics intake endpoint's limit of 500KB for uncompressed payloads, or 5MB for compressed payloads after decompression. + +This error usually occurs when the OpenTelemetry SDK batches too much telemetry data in a single request payload. + +**Solution**: Reduce the export batch size of the SDK's batch processor. For example, in the OpenTelemetry Java SDK, you can adjust `BatchMetricExportProcessor`. + +### Issue: Missing datapoints or lower than expected metric values + +If you notice missing datapoints or lower than expected metric values, it may be because you are sending multiple datapoints for a metric that have the same timestamp (in seconds) and same dimensions. In such cases, Datadog only accepts the last datapoint, and previous datapoints are dropped (last-write-wins). Datadog requires the timeseries data of a metric to be unique in the context of {timestamp + dimensions}. + +**Solution**: Ensure that your datapoints of a given metric at one timestamp are uniquely tagged. For example, if you send multiple datapoints for a metric simultaneously from multiple AWS Lambda invocations, make sure to include unique identifiers (such as the Lambda ARN) as resource attributes in your metrics. Use the `resource_attributes_as_tags` option to add these resource attributes as metric tags. + +## Further reading + +{{< partial name="whats-next/whats-next.html" >}} + +[1]: /opentelemetry/collector_exporter/ +[2]: /opentelemetry/otlp_ingest_in_the_agent/ +[3]: https://opentelemetry.io/docs/reference/specification/glossary/#automatic-instrumentation +[4]: https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter +[5]: /opentelemetry/guide/otlp_delta_temporality/ +[6]: /metrics/otlp/?tab=summary#mapping +[7]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/spec-compliance-matrix.md#environment-variables +[8]: https://aws-otel.github.io/docs/getting-started/lambda diff --git a/content/en/opentelemetry/setup/otlp_ingest/traces.md b/content/en/opentelemetry/setup/otlp_ingest/traces.md new file mode 100644 index 0000000000000..b2cd567ab5fa4 --- /dev/null +++ b/content/en/opentelemetry/setup/otlp_ingest/traces.md @@ -0,0 +1,269 @@ +--- +title: Datadog OTLP Traces Intake Endpoint +aliases: + - /opentelemetry/otlp_endpoint + - /opentelemetry/setup/intake_endpoint/otlp_traces + - /opentelemetry/setup/agentless/traces +private: true +further_reading: + - link: "https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/" + tag: "External Site" + text: "General OpenTelemetry SDK Configuration" + - link: "https://opentelemetry.io/docs/reference/specification/sdk-environment-variables/" + tag: "External Site" + text: "OpenTelemetry Environment Variable Spec" + - link: "https://opentelemetry.io/docs/reference/specification/protocol/exporter/ " + tag: "External Site" + text: "OpenTelemetry Protocol Exporter" +site_support_id: otlp_agentless +--- +{{< callout header="false" btn_hidden="true">}} + The Datadog OTLP traces intake endpoint is in Preview. To request access, contact your account representative. +{{< /callout >}} + +## Overview + +Datadog's OpenTelemetry protocol (OTLP) intake API endpoint allows you to send traces directly to Datadog. With this feature, you don't need to run the [Datadog Agent][2] or [OpenTelemetry Collector + Datadog Exporter][1]. + +You might prefer this option if you're looking for a straightforward setup and want to send traces directly to Datadog without using the Datadog Agent or OpenTelemetry Collector. + + +
    The OTLP trace intake endpoint only supports http/protobuf encoding. http/json and grpc are not supported at this time.
    + +## Configuration + +To export OTLP data to the Datadog OTLP traces intake endpoint: + +1. [Configure the OTLP HTTP Protobuf exporter](#configure-the-exporter). + - Set the Datadog OTLP traces intake endpoint. + - Configure the required HTTP headers. +1. (Optional) [Set the `dd-otel-span-mapping` HTTP header](#optional-map-or-filter-span-names) to map or filter spans. + +### Configure the exporter + +To send OTLP data to the Datadog OTLP traces intake endpoint, you need to use the OTLP HTTP Protobuf exporter. The process differs depending on whether you are using automatic or manual instrumentation for OpenTelemetry. + +#### Automatic instrumentation + +If you are using [OpenTelemetry automatic instrumentation][3], set the following environment variables: + +```shell +export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf" +export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="{{< region-param key="otlp_trace_endpoint" >}}" +export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=${YOUR_SITE}" +``` + +
    The value for dd-otlp-source should be provided to you by Datadog after being allowlisted for the intake endpoint. This is a specific identifier assigned to your organization.
    + +#### Manual instrumentation + +If you are using manual instrumentation with OpenTelemetry SDKs, configure the OTLP HTTP Protobuf exporter programmatically. + +
    Based on your Datadog site, which is {{< region-param key=dd_datacenter code="true" >}}:
    • Replace ${YOUR_ENDPOINT} with {{< region-param key="otlp_trace_endpoint" code="true" >}}.
    • Replace ${YOUR_SITE} with the organization name you received from Datadog.
    + +{{< tabs >}} +{{% tab "JavaScript" %}} + +The JavaScript exporter is [`exporter-trace-otlp-proto`][100]. To configure the exporter, use the following code snippet: + +```javascript +const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto'); // OTLP http/protobuf exporter + +const exporter = new OTLPTraceExporter({ + url: '${YOUR_ENDPOINT}', // Replace this with the correct endpoint + headers: { + 'dd-api-key': process.env.DD_API_KEY, + 'dd-otel-span-mapping': '{span_name_as_resource_name: true}', + 'dd-otlp-source': '${YOUR_SITE}', // Replace with the specific value provided by Datadog for your organization + }, +}); +``` +[100]: https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-proto + +{{% /tab %}} + +{{% tab "Java" %}} + +The Java exporter is [`OtlpHttpSpanExporter`][200]. To configure the exporter, use the following code snippet: + +```java +import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter; + +OtlpHttpSpanExporter exporter = OtlpHttpSpanExporter.builder() + .setEndpoint("${YOUR_ENDPOINT}") // Replace this with the correct endpoint + .addHeader("dd-api-key", System.getenv("DD_API_KEY")) + .addHeader("dd-otel-span-mapping", "{span_name_as_resource_name: true}") + .addHeader("dd-otlp-source", "${YOUR_SITE}") // Replace with the specific value provided by Datadog for your organization + .build(); +``` + +[200]: https://javadoc.io/doc/io.opentelemetry/opentelemetry-exporter-otlp-http-trace/ + +{{% /tab %}} +{{% tab "Go" %}} + +The Go exporter is [`otlptracehttp`][300]. To configure the exporter, use the following code snippet: + +```go +import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" + +traceExporter, err := otlptracehttp.New( + ctx, + otlptracehttp.WithEndpoint("${YOUR_ENDPOINT}"), // Replace this with the correct endpoint + otlptracehttp.WithURLPath("/v1/traces"), + otlptracehttp.WithHeaders( + map[string]string{ + "dd-api-key": os.Getenv("DD_API_KEY"), + "dd-otel-span-mapping": "{span_name_as_resource_name: true}", + "dd-otlp-source": "${YOUR_SITE}", // Replace with the specific value provided by Datadog for your organization + }), +) +``` + +[300]: http://go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp + +{{% /tab %}} +{{% tab "Python" %}} + +The Python exporter is [`OTLPSpanExporter`][400]. To configure the exporter, use the following code snippet: + +```python +from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter + +exporter = OTLPSpanExporter( + endpoint="${YOUR_ENDPOINT}", # Replace this with the correct endpoint + headers={ + "dd-api-key": os.environ.get("DD_API_KEY"), + "dd-otel-span-mapping": "{span_name_as_resource_name: true}", + "dd-otlp-source": "${YOUR_SITE}" # Replace with the specific value provided by Datadog for your organization + }, +) +``` + +[400]: https://pypi.org/project/opentelemetry-exporter-otlp-proto-http/ + +{{% /tab %}} +{{< /tabs >}} + +### (Optional) Map or filter span names + +Use the `dd-otel-span-mapping` header to configure span mapping and filtering. The JSON header contains the following fields: + +- `ignore_resources`: A list of regular expressions to disable traces based on their resource name. +- `span_name_remappings`: A map of Datadog span names to preferred names. +- `span_name_as_resource_name`: Specifies whether to use the OpenTelemetry span's name as the Datadog span's operation name (default: true). If false, the operation name is derived from a combination of the instrumentation scope name and span kind. + +For example: + +```json +{ + "span_name_as_resource_name":false, + "span_name_remappings":{ + "io.opentelemetry.javaagent.spring.client":"spring.client" + }, + "ignore_resources":[ + "io.opentelemetry.javaagent.spring.internal" + ] +} +``` +## OpenTelemetry Collector + +If you are using the OpenTelemetry Collector and don't want to use the Datadog Exporter, you can configure [`otlphttpexporter`][4] to export traces to the Datadog OTLP traces intake endpoint. + +For example, configure your `config.yaml` like this: + +```yaml +... + +exporters: + otlphttp: + traces_endpoint: {{< region-param key="otlp_trace_endpoint" >}} + headers: + dd-api-key: ${env:DD_API_KEY} + dd-otel-span-mapping: "{span_name_as_resource_name: false}" + dd-otlp-source: "${YOUR_SITE}", # Replace with the specific value provided by Datadog for your organization +... + +service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlphttp] +``` + +## Troubleshooting + +### Error: 403 Forbidden + +If you receive a `403 Forbidden` error when sending traces to the Datadog OTLP traces intake endpoint, it indicates one of the following issues: + +- The API key belongs to an organization that is not allowed to access the Datadog OTLP traces intake endpoint. + **Solution**: To request access, contact your account representative. +- The `dd-otlp-source` header is missing or has an incorrect value. + **Solution**: Ensure that the `dd-otlp-source` header is set with the proper value for your site. You should have received an allowlisted value for this header from Datadog if you are a platform partner. +- The endpoint URL is incorrect for your organization. + **Solution**: Use the correct endpoint URL for your organization. Your site is {{< region-param key=dd_datacenter code="true" >}}, so you need to use the {{< region-param key="otlp_trace_endpoint" code="true" >}} endpoint. + +### Error: 413 Request Entity Too Large + +If you receive a `413 Request Entity Too Large` error when sending traces to the Datadog OTLP traces intake endpoint, it indicates that the payload size sent by the OTLP exporter exceeds the Datadog traces intake endpoint's limit of 3.2MB. + +This error usually occurs when the OpenTelemetry SDK batches too much telemetry data in a single request payload. + +**Solution**: Reduce the export batch size of the SDK's batch span processor. Here's an example of how to modify the `BatchSpanProcessorBuilder` in the OpenTelemetry Java SDK: + +```java +CopyBatchSpanProcessor batchSpanProcessor = + BatchSpanProcessor + .builder(exporter) + .setMaxExportBatchSize(10) // Default is 512 + .build(); +``` +Adjust the `setMaxExportBatchSize` value according to your needs. A smaller value results in more frequent exports with smaller payloads, reducing the likelihood of exceeding the 3.2MB limit. + +### Warning: "traces export: failed … 202 Accepted" in Go + + +If you are using the OpenTelemetry Go SDK and see a warning message similar to `traces export: failed … 202 Accepted`, it is due to a known issue in the OpenTelemetry Go OTLP HTTP exporter. + +The OpenTelemetry Go OTLP HTTP exporter treats any HTTP status code other than 200 as an error, even if the export succeeds ([Issue 3706][5]). In contrast, other OpenTelemetry SDKs consider any status code in the range [200, 300) as a success. The Datadog OTLP traces intake endpoint returns a `202 Accepted` status code for successful exports. + +The OpenTelemetry community is still discussing whether other `2xx` status codes should be treated as successes ([Issue 3203][6]). + +**Solution**: If you are using the Datadog OTLP traces intake endpoint with the OpenTelemetry Go SDK, you can safely ignore this warning message. Your traces are being successfully exported despite the warning. + +### Issue: Unexpected span operation names + +When using the Datadog OTLP trace intake endpoint, you may notice that the span operation names are different from those generated when using the Datadog Agent or OpenTelemetry Collector. + +The Datadog OTLP trace intake endpoint has the `span_name_as_resource_name` option set to `true` by default. This means that Datadog uses the OpenTelemetry span's name as the operation name. In contrast, the Datadog Agent and OpenTelemetry Collector have this option set to `false` by default. + +When `span_name_as_resource_name` is set to `false`, the operation name is derived from a combination of the instrumentation scope name and the span kind. For example, an operation name might appear as `opentelemetry.client`. + +**Solution**: If you want to disable the `span_name_as_resource_name` option in the Datadog OTLP traces intake endpoint to match the behavior of the Datadog Agent or OpenTelemetry Collector, follow these steps: + +1. Refer to [Map or filter span names](#optional-map-or-filter-span-names) in this document. +1. Set the `span_name_as_resource_name` option to `false` in the `dd-otel-span-mapping` header. + +For example: + +```json +jsonCopy{ + "span_name_as_resource_name": false, + ... +} +``` + +This ensures that the span operation names are consistent across the Datadog OTLP traces intake endpoint, Datadog Agent, and OpenTelemetry Collector. + +## Further reading + +{{< partial name="whats-next/whats-next.html" >}} + +[1]: /opentelemetry/collector_exporter/ +[2]: /opentelemetry/otlp_ingest_in_the_agent/ +[3]: https://opentelemetry.io/docs/specs/otel/glossary/#automatic-instrumentation +[4]: https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter +[5]: https://github.com/open-telemetry/opentelemetry-go/issues/3706 +[6]: https://github.com/open-telemetry/opentelemetry-specification/issues/3203 From 394118e38ea9c5a627bf43368a1e71cb39076950 Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Fri, 26 Sep 2025 10:29:14 -0600 Subject: [PATCH 7/8] Adding missing alias. --- content/en/opentelemetry/setup/otlp_ingest/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/en/opentelemetry/setup/otlp_ingest/_index.md b/content/en/opentelemetry/setup/otlp_ingest/_index.md index d024f70f77936..101a5eb6a4c7b 100644 --- a/content/en/opentelemetry/setup/otlp_ingest/_index.md +++ b/content/en/opentelemetry/setup/otlp_ingest/_index.md @@ -2,6 +2,7 @@ title: Datadog OTLP Intake Endpoint aliases: - /opentelemetry/setup/intake_endpoint/ +- /opentelemetry/setup/agentless/ further_reading: - link: "/opentelemetry/setup" tag: "Documentation" From 25136f3e03a83462429a3d25c0acecfb3a36cf8b Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:08:52 -0600 Subject: [PATCH 8/8] Fix menu file. --- config/_default/menus/main.en.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/_default/menus/main.en.yaml b/config/_default/menus/main.en.yaml index c4126cfaac030..f61dfa0cc3a11 100644 --- a/config/_default/menus/main.en.yaml +++ b/config/_default/menus/main.en.yaml @@ -712,17 +712,17 @@ menu: parent: otel-setup-other weight: 4022 - name: Direct OTLP Ingest - url: /opentelemetry/setup/agentless + url: /opentelemetry/setup/otlp_ingest identifier: otel-setup-intake-endpoint parent: otel-setup-other weight: 4023 - name: Logs Endpoint - url: /opentelemetry/setup/agentless/logs + url: /opentelemetry/setup/otlp_ingest/logs parent: otel-setup-intake-endpoint weight: 40231 identifier: otel_setup_agentless_logs - name: Metrics Endpoint - url: /opentelemetry/setup/agentless/metrics + url: /opentelemetry/setup/otlp_ingest/metrics parent: otel-setup-intake-endpoint weight: 40232 identifier: otel_setup_agentless_metrics