From 1062a7374ee51df4e49e99e8c58fd94d6b92e898 Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Tue, 17 Mar 2026 14:12:04 -0400 Subject: [PATCH 1/7] Add OTLP_TRACES_EXPORT=otlp config --- .../datadog/trace/api/config/OtlpConfig.java | 2 + .../main/java/datadog/trace/api/Config.java | 16 ++++++++ .../OtelEnvMetricCollectorImplTest.groovy | 2 +- .../OtelEnvironmentConfigSourceTest.groovy | 41 +++++++++++++++++++ .../provider/OtelEnvironmentConfigSource.java | 16 +++++++- 5 files changed, 75 insertions(+), 2 deletions(-) diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java index de266aafc24..5a28647f9a7 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java @@ -15,6 +15,8 @@ public final class OtlpConfig { public static final String OTLP_METRICS_TEMPORALITY_PREFERENCE = "otlp.metrics.temporality.preference"; + public static final String OTLP_TRACES_EXPORTER = "otlp.traces.exporter"; + public enum Protocol { GRPC, HTTP_PROTOBUF, diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 6028754ce04..6b63a1003bc 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -455,6 +455,7 @@ import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.OTLP_TRACES_EXPORTER; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS_DEFAULT; import static datadog.trace.api.config.ProfilingConfig.PROFILING_API_KEY_FILE_OLD; @@ -913,6 +914,8 @@ public static String getHostName() { private final boolean jmxFetchMultipleRuntimeServicesEnabled; private final int jmxFetchMultipleRuntimeServicesLimit; + private final String otlpTracesExporter; + private final boolean metricsOtelEnabled; private final int metricsOtelInterval; private final int metricsOtelTimeout; @@ -1889,6 +1892,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins statsDClientSocketBuffer = configProvider.getInteger(STATSD_CLIENT_SOCKET_BUFFER); statsDClientSocketTimeout = configProvider.getInteger(STATSD_CLIENT_SOCKET_TIMEOUT); + otlpTracesExporter = configProvider.getString(OTLP_TRACES_EXPORTER); + metricsOtelEnabled = configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED); @@ -5204,6 +5209,14 @@ public boolean isJmxFetchIntegrationEnabled( return configProvider.isEnabled(integrationNames, "jmxfetch.", ".enabled", defaultEnabled); } + public String getOtlpTracesExporter() { + return otlpTracesExporter; + } + + public boolean isOtlpTracesExporterEnabled() { + return "otlp".equalsIgnoreCase(otlpTracesExporter); + } + public boolean isMetricsOtelEnabled() { return metricsOtelEnabled; } @@ -6255,6 +6268,9 @@ public String toString() { + aiGuardEnabled + ", aiGuardEndpoint=" + aiGuardEndpoint + + ", otlpTracesExporter='" + + otlpTracesExporter + + '\'' + ", metricsOtelEnabled=" + metricsOtelEnabled + ", metricsOtelInterval=" diff --git a/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy index 6364482fb75..df44fe16d02 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy @@ -199,7 +199,7 @@ class OtelEnvMetricCollectorImplTest extends DDSpecification { where: otelEnvKey | otelEnvValue || metricType | metricValue | metricNamespace | metricName | tagsOtelValue 'OTEL_METRICS_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_metrics_exporter' - 'OTEL_TRACES_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_traces_exporter' + 'OTEL_TRACES_EXPORTER' | 'zipkin' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_traces_exporter' 'OTEL_LOGS_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_logs_exporter' } } diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy index 25b55d2518b..331d448b546 100644 --- a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy @@ -9,6 +9,7 @@ import static datadog.trace.api.config.GeneralConfig.RUNTIME_METRICS_ENABLED import static datadog.trace.api.config.GeneralConfig.SERVICE_NAME import static datadog.trace.api.config.GeneralConfig.TAGS import static datadog.trace.api.config.GeneralConfig.VERSION +import static datadog.trace.api.config.OtlpConfig.OTLP_TRACES_EXPORTER import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED @@ -231,6 +232,46 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { source.get(TRACE_EXTENSIONS_PATH) == '/opt/opentelemetry/extensions' } + // TODO: Do we expect to support the system property version of this, actually? + def "otel traces exporter otlp system property is mapped"() { + setup: + injectSysConfig('dd.trace.otel.enabled', 'true', false) + injectSysConfig('otel.traces.exporter', 'otlp', false) + + when: + def source = new OtelEnvironmentConfigSource() + + then: + source.get(TRACE_ENABLED) == null + source.get(OTLP_TRACES_EXPORTER) == 'otlp' + } + + def "otel traces exporter otlp environment variable is mapped"() { + setup: + injectEnvConfig('DD_TRACE_OTEL_ENABLED', 'true', false) + injectEnvConfig('OTEL_TRACES_EXPORTER', 'otlp', false) + + when: + def source = new OtelEnvironmentConfigSource() + + then: + source.get(TRACE_ENABLED) == null + source.get(OTLP_TRACES_EXPORTER) == 'otlp' + } + + def "otel traces exporter none still disables tracing"() { + setup: + injectEnvConfig('DD_TRACE_OTEL_ENABLED', 'true', false) + injectEnvConfig('OTEL_TRACES_EXPORTER', 'none', false) + + when: + def source = new OtelEnvironmentConfigSource() + + then: + source.get(TRACE_ENABLED) == 'false' + source.get(OTLP_TRACES_EXPORTER) == null + } + def "otel resource attributes system property is mapped"() { setup: injectSysConfig('dd.trace.otel.enabled', 'true', false) diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java index 2bcf9f414f0..b50e4d6bf59 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java @@ -18,6 +18,7 @@ import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.OTLP_TRACES_EXPORTER; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED; @@ -134,11 +135,20 @@ private void setupTraceOtelEnvironment() { capture(TRACE_PROPAGATION_STYLE, mapPropagationStyle(propagators)); capture(TRACE_SAMPLE_RATE, mapSampleRate(tracesSampler)); capture(TRACE_ENABLED, mapDataCollection("traces")); + capture(OTLP_TRACES_EXPORTER, mapTracesExporter()); capture(REQUEST_HEADER_TAGS, mapHeaderTags("http.request.header.", requestHeaders)); capture(RESPONSE_HEADER_TAGS, mapHeaderTags("http.response.header.", responseHeaders)); capture(TRACE_EXTENSIONS_PATH, extensions); } + private String mapTracesExporter() { + String exporter = getOtelProperty("otel.traces.exporter"); + if ("otlp".equalsIgnoreCase(exporter)) { + return "otlp"; + } + return null; + } + private void setupMetricsOtelEnvironment() { capture( METRICS_OTEL_INTERVAL, @@ -439,7 +449,11 @@ private String mapDataCollection(String signal) { } if ("none".equalsIgnoreCase(exporter)) { - return "false"; // currently we only accept "none" which maps to disable data collection + return "false"; // "none" maps to disable data collection + } + + if ("traces".equals(signal) && "otlp".equalsIgnoreCase(exporter)) { + return null; // otlp is handled separately for traces } log.warn("OTEL_{}_EXPORTER={} is not supported", signal, exporter.toUpperCase(Locale.ROOT)); From db2e7d00e717227c8476d9525ec1ea4ce9490627 Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Tue, 17 Mar 2026 14:49:10 -0400 Subject: [PATCH 2/7] rename otlp -> otel --- .../main/java/datadog/trace/api/config/OtlpConfig.java | 2 +- internal-api/src/main/java/datadog/trace/api/Config.java | 4 ++-- .../provider/OtelEnvironmentConfigSourceTest.groovy | 8 ++++---- .../config/provider/OtelEnvironmentConfigSource.java | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java index 5a28647f9a7..cf90a880ffc 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java @@ -15,7 +15,7 @@ public final class OtlpConfig { public static final String OTLP_METRICS_TEMPORALITY_PREFERENCE = "otlp.metrics.temporality.preference"; - public static final String OTLP_TRACES_EXPORTER = "otlp.traces.exporter"; + public static final String OTEL_TRACES_EXPORTER = "otel.traces.exporter"; public enum Protocol { GRPC, diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 6b63a1003bc..dab232c894c 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -449,13 +449,13 @@ import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_ENABLED; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_INTERVAL; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.OTEL_TRACES_EXPORTER; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_COMPRESSION; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_ENDPOINT; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_HEADERS; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; -import static datadog.trace.api.config.OtlpConfig.OTLP_TRACES_EXPORTER; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS_DEFAULT; import static datadog.trace.api.config.ProfilingConfig.PROFILING_API_KEY_FILE_OLD; @@ -1892,7 +1892,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins statsDClientSocketBuffer = configProvider.getInteger(STATSD_CLIENT_SOCKET_BUFFER); statsDClientSocketTimeout = configProvider.getInteger(STATSD_CLIENT_SOCKET_TIMEOUT); - otlpTracesExporter = configProvider.getString(OTLP_TRACES_EXPORTER); + otlpTracesExporter = configProvider.getString(OTEL_TRACES_EXPORTER); metricsOtelEnabled = configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED); diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy index 331d448b546..a85ed0ca8ff 100644 --- a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy @@ -9,7 +9,7 @@ import static datadog.trace.api.config.GeneralConfig.RUNTIME_METRICS_ENABLED import static datadog.trace.api.config.GeneralConfig.SERVICE_NAME import static datadog.trace.api.config.GeneralConfig.TAGS import static datadog.trace.api.config.GeneralConfig.VERSION -import static datadog.trace.api.config.OtlpConfig.OTLP_TRACES_EXPORTER +import static datadog.trace.api.config.OtlpConfig.OTEL_TRACES_EXPORTER import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED @@ -243,7 +243,7 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { then: source.get(TRACE_ENABLED) == null - source.get(OTLP_TRACES_EXPORTER) == 'otlp' + source.get(OTEL_TRACES_EXPORTER) == 'otlp' } def "otel traces exporter otlp environment variable is mapped"() { @@ -256,7 +256,7 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { then: source.get(TRACE_ENABLED) == null - source.get(OTLP_TRACES_EXPORTER) == 'otlp' + source.get(OTEL_TRACES_EXPORTER) == 'otlp' } def "otel traces exporter none still disables tracing"() { @@ -269,7 +269,7 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { then: source.get(TRACE_ENABLED) == 'false' - source.get(OTLP_TRACES_EXPORTER) == null + source.get(OTEL_TRACES_EXPORTER) == 'none' } def "otel resource attributes system property is mapped"() { diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java index b50e4d6bf59..7052e053cb0 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java @@ -12,13 +12,13 @@ import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_ENABLED; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_INTERVAL; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.OTEL_TRACES_EXPORTER; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_COMPRESSION; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_ENDPOINT; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_HEADERS; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; -import static datadog.trace.api.config.OtlpConfig.OTLP_TRACES_EXPORTER; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED; @@ -135,7 +135,7 @@ private void setupTraceOtelEnvironment() { capture(TRACE_PROPAGATION_STYLE, mapPropagationStyle(propagators)); capture(TRACE_SAMPLE_RATE, mapSampleRate(tracesSampler)); capture(TRACE_ENABLED, mapDataCollection("traces")); - capture(OTLP_TRACES_EXPORTER, mapTracesExporter()); + capture(OTEL_TRACES_EXPORTER, mapTracesExporter()); capture(REQUEST_HEADER_TAGS, mapHeaderTags("http.request.header.", requestHeaders)); capture(RESPONSE_HEADER_TAGS, mapHeaderTags("http.response.header.", responseHeaders)); capture(TRACE_EXTENSIONS_PATH, extensions); From 08759439fa60e7b8c7a67dbb827aa29623fcb35b Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Tue, 17 Mar 2026 14:50:43 -0400 Subject: [PATCH 3/7] fix last reference to otlp -> otel --- .../src/main/java/datadog/trace/api/Config.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index dab232c894c..abfca8082d8 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -914,7 +914,7 @@ public static String getHostName() { private final boolean jmxFetchMultipleRuntimeServicesEnabled; private final int jmxFetchMultipleRuntimeServicesLimit; - private final String otlpTracesExporter; + private final String otelTracesExporter; private final boolean metricsOtelEnabled; private final int metricsOtelInterval; @@ -1892,7 +1892,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins statsDClientSocketBuffer = configProvider.getInteger(STATSD_CLIENT_SOCKET_BUFFER); statsDClientSocketTimeout = configProvider.getInteger(STATSD_CLIENT_SOCKET_TIMEOUT); - otlpTracesExporter = configProvider.getString(OTEL_TRACES_EXPORTER); + otelTracesExporter = configProvider.getString(OTEL_TRACES_EXPORTER); metricsOtelEnabled = configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED); @@ -5209,12 +5209,12 @@ public boolean isJmxFetchIntegrationEnabled( return configProvider.isEnabled(integrationNames, "jmxfetch.", ".enabled", defaultEnabled); } - public String getOtlpTracesExporter() { - return otlpTracesExporter; + public String getotelTracesExporter() { + return otelTracesExporter; } - public boolean isOtlpTracesExporterEnabled() { - return "otlp".equalsIgnoreCase(otlpTracesExporter); + public boolean isotelTracesExporterEnabled() { + return "otlp".equalsIgnoreCase(otelTracesExporter); } public boolean isMetricsOtelEnabled() { @@ -6268,8 +6268,8 @@ public String toString() { + aiGuardEnabled + ", aiGuardEndpoint=" + aiGuardEndpoint - + ", otlpTracesExporter='" - + otlpTracesExporter + + ", otelTracesExporter='" + + otelTracesExporter + '\'' + ", metricsOtelEnabled=" + metricsOtelEnabled From 5e2ea6ce83f61796ad31eab9b85f31321494f606 Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Tue, 17 Mar 2026 14:52:32 -0400 Subject: [PATCH 4/7] Change getter to otlp --- internal-api/src/main/java/datadog/trace/api/Config.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index abfca8082d8..dd161f00b6b 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -5209,11 +5209,11 @@ public boolean isJmxFetchIntegrationEnabled( return configProvider.isEnabled(integrationNames, "jmxfetch.", ".enabled", defaultEnabled); } - public String getotelTracesExporter() { + public String getOtelTracesExporter() { return otelTracesExporter; } - public boolean isotelTracesExporterEnabled() { + public boolean isOtlpTracesExporterEnabled() { return "otlp".equalsIgnoreCase(otelTracesExporter); } From 20af2bdd59a79d4f873b19b19f3670d7e75e1ccf Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Tue, 17 Mar 2026 15:15:34 -0400 Subject: [PATCH 5/7] remove direct references to 'otel.traces.exporter' in favor of the new constant --- .../bootstrap/config/provider/OtelEnvironmentConfigSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java index 7052e053cb0..dbac1792586 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java @@ -142,7 +142,7 @@ private void setupTraceOtelEnvironment() { } private String mapTracesExporter() { - String exporter = getOtelProperty("otel.traces.exporter"); + String exporter = getOtelProperty(OTEL_TRACES_EXPORTER); if ("otlp".equalsIgnoreCase(exporter)) { return "otlp"; } From 2809404af513851231c327af434db1c870ca6997 Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Tue, 17 Mar 2026 21:11:49 -0400 Subject: [PATCH 6/7] Rename key to TRACE_OTEL_EXPORTER --- .../main/java/datadog/trace/api/config/OtlpConfig.java | 2 +- internal-api/src/main/java/datadog/trace/api/Config.java | 8 ++------ .../provider/OtelEnvironmentConfigSourceTest.groovy | 7 +++---- .../config/provider/OtelEnvironmentConfigSource.java | 6 +++--- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java index cf90a880ffc..6c9633fc543 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java @@ -15,7 +15,7 @@ public final class OtlpConfig { public static final String OTLP_METRICS_TEMPORALITY_PREFERENCE = "otlp.metrics.temporality.preference"; - public static final String OTEL_TRACES_EXPORTER = "otel.traces.exporter"; + public static final String TRACE_OTEL_EXPORTER = "trace.otel.exporter"; public enum Protocol { GRPC, diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index dd161f00b6b..0dcfe411140 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -449,13 +449,13 @@ import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_ENABLED; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_INTERVAL; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_TIMEOUT; -import static datadog.trace.api.config.OtlpConfig.OTEL_TRACES_EXPORTER; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_COMPRESSION; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_ENDPOINT; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_HEADERS; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.TRACE_OTEL_EXPORTER; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS_DEFAULT; import static datadog.trace.api.config.ProfilingConfig.PROFILING_API_KEY_FILE_OLD; @@ -1892,7 +1892,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins statsDClientSocketBuffer = configProvider.getInteger(STATSD_CLIENT_SOCKET_BUFFER); statsDClientSocketTimeout = configProvider.getInteger(STATSD_CLIENT_SOCKET_TIMEOUT); - otelTracesExporter = configProvider.getString(OTEL_TRACES_EXPORTER); + otelTracesExporter = configProvider.getString(TRACE_OTEL_EXPORTER); metricsOtelEnabled = configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED); @@ -5209,10 +5209,6 @@ public boolean isJmxFetchIntegrationEnabled( return configProvider.isEnabled(integrationNames, "jmxfetch.", ".enabled", defaultEnabled); } - public String getOtelTracesExporter() { - return otelTracesExporter; - } - public boolean isOtlpTracesExporterEnabled() { return "otlp".equalsIgnoreCase(otelTracesExporter); } diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy index a85ed0ca8ff..9a87725a69b 100644 --- a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy @@ -9,7 +9,7 @@ import static datadog.trace.api.config.GeneralConfig.RUNTIME_METRICS_ENABLED import static datadog.trace.api.config.GeneralConfig.SERVICE_NAME import static datadog.trace.api.config.GeneralConfig.TAGS import static datadog.trace.api.config.GeneralConfig.VERSION -import static datadog.trace.api.config.OtlpConfig.OTEL_TRACES_EXPORTER +import static datadog.trace.api.config.OtlpConfig.TRACE_OTEL_EXPORTER import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED @@ -243,7 +243,7 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { then: source.get(TRACE_ENABLED) == null - source.get(OTEL_TRACES_EXPORTER) == 'otlp' + source.get(TRACE_OTEL_EXPORTER) == 'otlp' } def "otel traces exporter otlp environment variable is mapped"() { @@ -256,7 +256,7 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { then: source.get(TRACE_ENABLED) == null - source.get(OTEL_TRACES_EXPORTER) == 'otlp' + source.get(TRACE_OTEL_EXPORTER) == 'otlp' } def "otel traces exporter none still disables tracing"() { @@ -269,7 +269,6 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { then: source.get(TRACE_ENABLED) == 'false' - source.get(OTEL_TRACES_EXPORTER) == 'none' } def "otel resource attributes system property is mapped"() { diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java index dbac1792586..01e767bfb67 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java @@ -12,13 +12,13 @@ import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_ENABLED; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_INTERVAL; import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_TIMEOUT; -import static datadog.trace.api.config.OtlpConfig.OTEL_TRACES_EXPORTER; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_COMPRESSION; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_ENDPOINT; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_HEADERS; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.TRACE_OTEL_EXPORTER; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED; @@ -135,14 +135,14 @@ private void setupTraceOtelEnvironment() { capture(TRACE_PROPAGATION_STYLE, mapPropagationStyle(propagators)); capture(TRACE_SAMPLE_RATE, mapSampleRate(tracesSampler)); capture(TRACE_ENABLED, mapDataCollection("traces")); - capture(OTEL_TRACES_EXPORTER, mapTracesExporter()); + capture(TRACE_OTEL_EXPORTER, mapTracesExporter()); capture(REQUEST_HEADER_TAGS, mapHeaderTags("http.request.header.", requestHeaders)); capture(RESPONSE_HEADER_TAGS, mapHeaderTags("http.response.header.", responseHeaders)); capture(TRACE_EXTENSIONS_PATH, extensions); } private String mapTracesExporter() { - String exporter = getOtelProperty(OTEL_TRACES_EXPORTER); + String exporter = getOtelProperty("otel.traces.exporter"); if ("otlp".equalsIgnoreCase(exporter)) { return "otlp"; } From 923c88002beb1f97a52c19589fc3a8ac0e80c7ea Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Tue, 17 Mar 2026 21:16:24 -0400 Subject: [PATCH 7/7] Finish out renaming --- .../src/main/java/datadog/trace/api/Config.java | 10 +++++----- .../provider/OtelEnvironmentConfigSourceTest.groovy | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 0dcfe411140..fd36a0a6a8f 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -914,7 +914,7 @@ public static String getHostName() { private final boolean jmxFetchMultipleRuntimeServicesEnabled; private final int jmxFetchMultipleRuntimeServicesLimit; - private final String otelTracesExporter; + private final String traceOtelExporter; private final boolean metricsOtelEnabled; private final int metricsOtelInterval; @@ -1892,7 +1892,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins statsDClientSocketBuffer = configProvider.getInteger(STATSD_CLIENT_SOCKET_BUFFER); statsDClientSocketTimeout = configProvider.getInteger(STATSD_CLIENT_SOCKET_TIMEOUT); - otelTracesExporter = configProvider.getString(TRACE_OTEL_EXPORTER); + traceOtelExporter = configProvider.getString(TRACE_OTEL_EXPORTER); metricsOtelEnabled = configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED); @@ -5210,7 +5210,7 @@ public boolean isJmxFetchIntegrationEnabled( } public boolean isOtlpTracesExporterEnabled() { - return "otlp".equalsIgnoreCase(otelTracesExporter); + return "otlp".equalsIgnoreCase(traceOtelExporter); } public boolean isMetricsOtelEnabled() { @@ -6264,8 +6264,8 @@ public String toString() { + aiGuardEnabled + ", aiGuardEndpoint=" + aiGuardEndpoint - + ", otelTracesExporter='" - + otelTracesExporter + + ", traceOtelExporter='" + + traceOtelExporter + '\'' + ", metricsOtelEnabled=" + metricsOtelEnabled diff --git a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy index 9a87725a69b..491abb39dcf 100644 --- a/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy @@ -232,7 +232,6 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification { source.get(TRACE_EXTENSIONS_PATH) == '/opt/opentelemetry/extensions' } - // TODO: Do we expect to support the system property version of this, actually? def "otel traces exporter otlp system property is mapped"() { setup: injectSysConfig('dd.trace.otel.enabled', 'true', false)