Skip to content

Commit 1eea182

Browse files
mtoffl01mccullsdevflow.devflow-routing-intake
authored
Add OTEL_TRACES_EXPORTER=otlp configuration (#10877)
Add OTLP_TRACES_EXPORT=otlp config rename otlp -> otel fix last reference to otlp -> otel Change getter to otlp remove direct references to 'otel.traces.exporter' in favor of the new constant Rename key to TRACE_OTEL_EXPORTER Finish out renaming Add DD_TRACE_OTEL_EXPORTER to supported-configurations.json Update internal-api/src/main/java/datadog/trace/api/Config.java Co-authored-by: Stuart McCulloch <stuart.mcculloch@datadoghq.com> Merge branch 'master' into mtoff/otlp-traces-exporter-config Merge branch 'master' into mtoff/otlp-traces-exporter-config Co-authored-by: mcculls <stuart.mcculloch@datadoghq.com> Co-authored-by: devflow.devflow-routing-intake <devflow.devflow-routing-intake@kubernetes.us1.ddbuild.io>
1 parent dbb0729 commit 1eea182

File tree

6 files changed

+76
-2
lines changed

6 files changed

+76
-2
lines changed

dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public final class OtlpConfig {
1515
public static final String OTLP_METRICS_TEMPORALITY_PREFERENCE =
1616
"otlp.metrics.temporality.preference";
1717

18+
public static final String TRACE_OTEL_EXPORTER = "trace.otel.exporter";
19+
1820
public enum Protocol {
1921
GRPC,
2022
HTTP_PROTOBUF,

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,7 @@
455455
import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL;
456456
import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE;
457457
import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT;
458+
import static datadog.trace.api.config.OtlpConfig.TRACE_OTEL_EXPORTER;
458459
import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS;
459460
import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS_DEFAULT;
460461
import static datadog.trace.api.config.ProfilingConfig.PROFILING_API_KEY_FILE_OLD;
@@ -913,6 +914,8 @@ public static String getHostName() {
913914
private final boolean jmxFetchMultipleRuntimeServicesEnabled;
914915
private final int jmxFetchMultipleRuntimeServicesLimit;
915916

917+
private final String traceOtelExporter;
918+
916919
private final boolean metricsOtelEnabled;
917920
private final int metricsOtelInterval;
918921
private final int metricsOtelTimeout;
@@ -1889,6 +1892,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
18891892
statsDClientSocketBuffer = configProvider.getInteger(STATSD_CLIENT_SOCKET_BUFFER);
18901893
statsDClientSocketTimeout = configProvider.getInteger(STATSD_CLIENT_SOCKET_TIMEOUT);
18911894

1895+
traceOtelExporter = configProvider.getString(TRACE_OTEL_EXPORTER);
1896+
18921897
metricsOtelEnabled =
18931898
configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED);
18941899

@@ -5204,6 +5209,10 @@ public boolean isJmxFetchIntegrationEnabled(
52045209
return configProvider.isEnabled(integrationNames, "jmxfetch.", ".enabled", defaultEnabled);
52055210
}
52065211

5212+
public boolean isOtlpTracesExporterEnabled() {
5213+
return "otlp".equalsIgnoreCase(traceOtelExporter);
5214+
}
5215+
52075216
public boolean isMetricsOtelEnabled() {
52085217
return metricsOtelEnabled;
52095218
}
@@ -6255,6 +6264,8 @@ public String toString() {
62556264
+ aiGuardEnabled
62566265
+ ", aiGuardEndpoint="
62576266
+ aiGuardEndpoint
6267+
+ ", traceOtelExporter="
6268+
+ traceOtelExporter
62586269
+ ", metricsOtelEnabled="
62596270
+ metricsOtelEnabled
62606271
+ ", metricsOtelInterval="

internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ class OtelEnvMetricCollectorImplTest extends DDSpecification {
199199
where:
200200
otelEnvKey | otelEnvValue || metricType | metricValue | metricNamespace | metricName | tagsOtelValue
201201
'OTEL_METRICS_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_metrics_exporter'
202-
'OTEL_TRACES_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_traces_exporter'
202+
'OTEL_TRACES_EXPORTER' | 'zipkin' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_traces_exporter'
203203
'OTEL_LOGS_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_logs_exporter'
204204
}
205205
}

internal-api/src/test/groovy/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSourceTest.groovy

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import static datadog.trace.api.config.GeneralConfig.RUNTIME_METRICS_ENABLED
99
import static datadog.trace.api.config.GeneralConfig.SERVICE_NAME
1010
import static datadog.trace.api.config.GeneralConfig.TAGS
1111
import static datadog.trace.api.config.GeneralConfig.VERSION
12+
import static datadog.trace.api.config.OtlpConfig.TRACE_OTEL_EXPORTER
1213
import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED
1314
import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH
1415
import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED
@@ -231,6 +232,44 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification {
231232
source.get(TRACE_EXTENSIONS_PATH) == '/opt/opentelemetry/extensions'
232233
}
233234

235+
def "otel traces exporter otlp system property is mapped"() {
236+
setup:
237+
injectSysConfig('dd.trace.otel.enabled', 'true', false)
238+
injectSysConfig('otel.traces.exporter', 'otlp', false)
239+
240+
when:
241+
def source = new OtelEnvironmentConfigSource()
242+
243+
then:
244+
source.get(TRACE_ENABLED) == null
245+
source.get(TRACE_OTEL_EXPORTER) == 'otlp'
246+
}
247+
248+
def "otel traces exporter otlp environment variable is mapped"() {
249+
setup:
250+
injectEnvConfig('DD_TRACE_OTEL_ENABLED', 'true', false)
251+
injectEnvConfig('OTEL_TRACES_EXPORTER', 'otlp', false)
252+
253+
when:
254+
def source = new OtelEnvironmentConfigSource()
255+
256+
then:
257+
source.get(TRACE_ENABLED) == null
258+
source.get(TRACE_OTEL_EXPORTER) == 'otlp'
259+
}
260+
261+
def "otel traces exporter none still disables tracing"() {
262+
setup:
263+
injectEnvConfig('DD_TRACE_OTEL_ENABLED', 'true', false)
264+
injectEnvConfig('OTEL_TRACES_EXPORTER', 'none', false)
265+
266+
when:
267+
def source = new OtelEnvironmentConfigSource()
268+
269+
then:
270+
source.get(TRACE_ENABLED) == 'false'
271+
}
272+
234273
def "otel resource attributes system property is mapped"() {
235274
setup:
236275
injectSysConfig('dd.trace.otel.enabled', 'true', false)

metadata/supported-configurations.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8177,6 +8177,14 @@
81778177
"aliases": []
81788178
}
81798179
],
8180+
"DD_TRACE_OTEL_EXPORTER": [
8181+
{
8182+
"version": "A",
8183+
"type": "string",
8184+
"default": null,
8185+
"aliases": []
8186+
}
8187+
],
81808188
"DD_TRACE_PARTIAL_FLUSH_ENABLED": [
81818189
{
81828190
"version": "B",

utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL;
1919
import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE;
2020
import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT;
21+
import static datadog.trace.api.config.OtlpConfig.TRACE_OTEL_EXPORTER;
2122
import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED;
2223
import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH;
2324
import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED;
@@ -134,11 +135,20 @@ private void setupTraceOtelEnvironment() {
134135
capture(TRACE_PROPAGATION_STYLE, mapPropagationStyle(propagators));
135136
capture(TRACE_SAMPLE_RATE, mapSampleRate(tracesSampler));
136137
capture(TRACE_ENABLED, mapDataCollection("traces"));
138+
capture(TRACE_OTEL_EXPORTER, mapTracesExporter());
137139
capture(REQUEST_HEADER_TAGS, mapHeaderTags("http.request.header.", requestHeaders));
138140
capture(RESPONSE_HEADER_TAGS, mapHeaderTags("http.response.header.", responseHeaders));
139141
capture(TRACE_EXTENSIONS_PATH, extensions);
140142
}
141143

144+
private String mapTracesExporter() {
145+
String exporter = getOtelProperty("otel.traces.exporter");
146+
if ("otlp".equalsIgnoreCase(exporter)) {
147+
return "otlp";
148+
}
149+
return null;
150+
}
151+
142152
private void setupMetricsOtelEnvironment() {
143153
capture(
144154
METRICS_OTEL_INTERVAL,
@@ -439,7 +449,11 @@ private String mapDataCollection(String signal) {
439449
}
440450

441451
if ("none".equalsIgnoreCase(exporter)) {
442-
return "false"; // currently we only accept "none" which maps to disable data collection
452+
return "false"; // "none" maps to disable data collection
453+
}
454+
455+
if ("traces".equals(signal) && "otlp".equalsIgnoreCase(exporter)) {
456+
return null; // otlp is handled separately for traces
443457
}
444458

445459
log.warn("OTEL_{}_EXPORTER={} is not supported", signal, exporter.toUpperCase(Locale.ROOT));

0 commit comments

Comments
 (0)