Skip to content

Commit 1062a73

Browse files
committed
Add OTLP_TRACES_EXPORT=otlp config
1 parent 3ff081c commit 1062a73

5 files changed

Lines changed: 75 additions & 2 deletions

File tree

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 OTLP_TRACES_EXPORTER = "otlp.traces.exporter";
19+
1820
public enum Protocol {
1921
GRPC,
2022
HTTP_PROTOBUF,

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

Lines changed: 16 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.OTLP_TRACES_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 otlpTracesExporter;
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+
otlpTracesExporter = configProvider.getString(OTLP_TRACES_EXPORTER);
1896+
18921897
metricsOtelEnabled =
18931898
configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED);
18941899

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

5212+
public String getOtlpTracesExporter() {
5213+
return otlpTracesExporter;
5214+
}
5215+
5216+
public boolean isOtlpTracesExporterEnabled() {
5217+
return "otlp".equalsIgnoreCase(otlpTracesExporter);
5218+
}
5219+
52075220
public boolean isMetricsOtelEnabled() {
52085221
return metricsOtelEnabled;
52095222
}
@@ -6255,6 +6268,9 @@ public String toString() {
62556268
+ aiGuardEnabled
62566269
+ ", aiGuardEndpoint="
62576270
+ aiGuardEndpoint
6271+
+ ", otlpTracesExporter='"
6272+
+ otlpTracesExporter
6273+
+ '\''
62586274
+ ", metricsOtelEnabled="
62596275
+ metricsOtelEnabled
62606276
+ ", 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: 41 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.OTLP_TRACES_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,46 @@ class OtelEnvironmentConfigSourceTest extends DDSpecification {
231232
source.get(TRACE_EXTENSIONS_PATH) == '/opt/opentelemetry/extensions'
232233
}
233234

235+
// TODO: Do we expect to support the system property version of this, actually?
236+
def "otel traces exporter otlp system property is mapped"() {
237+
setup:
238+
injectSysConfig('dd.trace.otel.enabled', 'true', false)
239+
injectSysConfig('otel.traces.exporter', 'otlp', false)
240+
241+
when:
242+
def source = new OtelEnvironmentConfigSource()
243+
244+
then:
245+
source.get(TRACE_ENABLED) == null
246+
source.get(OTLP_TRACES_EXPORTER) == 'otlp'
247+
}
248+
249+
def "otel traces exporter otlp environment variable is mapped"() {
250+
setup:
251+
injectEnvConfig('DD_TRACE_OTEL_ENABLED', 'true', false)
252+
injectEnvConfig('OTEL_TRACES_EXPORTER', 'otlp', false)
253+
254+
when:
255+
def source = new OtelEnvironmentConfigSource()
256+
257+
then:
258+
source.get(TRACE_ENABLED) == null
259+
source.get(OTLP_TRACES_EXPORTER) == 'otlp'
260+
}
261+
262+
def "otel traces exporter none still disables tracing"() {
263+
setup:
264+
injectEnvConfig('DD_TRACE_OTEL_ENABLED', 'true', false)
265+
injectEnvConfig('OTEL_TRACES_EXPORTER', 'none', false)
266+
267+
when:
268+
def source = new OtelEnvironmentConfigSource()
269+
270+
then:
271+
source.get(TRACE_ENABLED) == 'false'
272+
source.get(OTLP_TRACES_EXPORTER) == null
273+
}
274+
234275
def "otel resource attributes system property is mapped"() {
235276
setup:
236277
injectSysConfig('dd.trace.otel.enabled', 'true', false)

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.OTLP_TRACES_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(OTLP_TRACES_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)