From 1897a12a318743865cd1f64dca93464a1f040682 Mon Sep 17 00:00:00 2001 From: Olivier John Ndjike Nzia Date: Mon, 10 Nov 2025 13:37:18 -0500 Subject: [PATCH 1/7] add config to disable injecting datadog attribute in aws messaging services --- .../aws/v2/eventbridge/EventBridgeInterceptor.java | 4 +++- .../instrumentation/aws/v2/sfn/SfnInterceptor.java | 7 ++++++- .../instrumentation/aws/v1/sns/SnsInterceptor.java | 3 ++- .../instrumentation/aws/v2/sns/SnsInterceptor.java | 4 +++- .../instrumentation/aws/v1/sqs/SqsInterceptor.java | 4 +++- .../instrumentation/aws/v2/sqs/SqsInterceptor.java | 4 +++- .../java/datadog/trace/api/config/TracerConfig.java | 3 +++ .../src/main/java/datadog/trace/api/Config.java | 11 +++++++++++ 8 files changed, 34 insertions(+), 6 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java index 7e7cd81b053..3e3a13945e0 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java @@ -6,6 +6,7 @@ import static datadog.trace.instrumentation.aws.v2.eventbridge.TextMapInjectAdapter.SETTER; import datadog.context.Context; +import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.api.datastreams.PathwayContext; @@ -34,7 +35,8 @@ public class EventBridgeInterceptor implements ExecutionInterceptor { @Override public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) { - if (!(context.request() instanceof PutEventsRequest)) { + if (!(context.request() instanceof PutEventsRequest) + || !Config.get().isAwsInjectDatadogAttributeEnabled()) { return context.request(); } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java index abc6b72e15b..e6dc2695893 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java @@ -3,6 +3,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromContext; import datadog.context.Context; +import datadog.trace.api.Config; import datadog.trace.bootstrap.InstanceStore; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import software.amazon.awssdk.core.SdkRequest; @@ -23,10 +24,14 @@ public SfnInterceptor() {} @Override public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) { + SdkRequest request = context.request(); + if (Config.get().isAwsInjectDatadogAttributeEnabled()) { + return request; + } try { return modifyRequestImpl(context, executionAttributes); } catch (Exception e) { - return context.request(); + return request; } } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java index 63855b1455c..a6237a1d5f7 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java @@ -13,6 +13,7 @@ import com.amazonaws.services.sns.model.PublishBatchRequestEntry; import com.amazonaws.services.sns.model.PublishRequest; import datadog.context.Context; +import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.bootstrap.ContextStore; @@ -57,7 +58,7 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request Map messageAttributes = pRequest.getMessageAttributes(); // 10 messageAttributes is a limit from SQS, which is often used as a subscriber, therefore // the limit still applies here - if (messageAttributes.size() < 10) { + if (messageAttributes.size() < 10 && Config.get().isAwsInjectDatadogAttributeEnabled()) { // Extract the topic name from the ARN for DSM String topicName = pRequest.getTopicArn(); if (null == topicName) { diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java index 4090a46c0c6..591772700c1 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java @@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.aws.v2.sns.TextMapInjectAdapter.SETTER; import datadog.context.Context; +import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.bootstrap.InstanceStore; @@ -55,7 +56,8 @@ public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes execu PublishRequest request = (PublishRequest) context.request(); // 10 messageAttributes is a limit from SQS, which is often used as a subscriber, therefore // the limit still applies here - if (request.messageAttributes().size() < 10) { + if (request.messageAttributes().size() < 10 + && Config.get().isAwsInjectDatadogAttributeEnabled()) { // Get topic name for DSM String snsTopicArn = request.topicArn(); if (null == snsTopicArn) { diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java index 3a7fa98632f..ebc344c1b92 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java @@ -18,6 +18,7 @@ import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; +import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.bootstrap.ContextStore; @@ -69,7 +70,8 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request } } else if (request instanceof ReceiveMessageRequest) { ReceiveMessageRequest rmRequest = (ReceiveMessageRequest) request; - if (rmRequest.getMessageAttributeNames().size() < 10 + if (Config.get().isAwsInjectDatadogAttributeEnabled() + && rmRequest.getMessageAttributeNames().size() < 10 && !rmRequest.getMessageAttributeNames().contains(DATADOG_KEY)) { List attributeNames = new ArrayList<>(rmRequest.getMessageAttributeNames()); attributeNames.add(DATADOG_KEY); diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java index c78e041fa7e..bf1f8ec0ce9 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java @@ -10,6 +10,7 @@ import datadog.context.Context; import datadog.context.propagation.Propagator; import datadog.context.propagation.Propagators; +import datadog.trace.api.Config; import datadog.trace.api.datastreams.DataStreamsContext; import datadog.trace.api.datastreams.DataStreamsTags; import datadog.trace.bootstrap.InstanceStore; @@ -77,7 +78,8 @@ public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes execu } else if (context.request() instanceof ReceiveMessageRequest) { ReceiveMessageRequest request = (ReceiveMessageRequest) context.request(); if (request.messageAttributeNames().size() < 10 - && !request.messageAttributeNames().contains(DATADOG_KEY)) { + && !request.messageAttributeNames().contains(DATADOG_KEY) + && Config.get().isAwsInjectDatadogAttributeEnabled()) { List messageAttributeNames = new ArrayList<>(request.messageAttributeNames()); messageAttributeNames.add(DATADOG_KEY); return request.toBuilder().messageAttributeNames(messageAttributeNames).build(); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java index bc57f96612a..2bcc8c3fa90 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java @@ -47,6 +47,7 @@ public final class TracerConfig { @Deprecated public static final String TRACE_SAMPLING_OPERATION_RULES = "trace.sampling.operation.rules"; + // JSON rules public static final String TRACE_SAMPLING_RULES = "trace.sampling.rules"; public static final String SPAN_SAMPLING_RULES = "span.sampling.rules"; @@ -164,6 +165,8 @@ public final class TracerConfig { public static final String TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS = "trace.cloud.payload.tagging.max-tags"; public static final String TRACE_SERVICE_DISCOVERY_ENABLED = "trace.service.discovery.enabled"; + public static final String TRACE_AWS_INJECT_DATADOG_ATTRIBUTE = + "trace.aws.inject.datadog.attribute"; private TracerConfig() {} } 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 b22778171d5..3a207b4cfb2 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -623,6 +623,7 @@ import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_PORT; import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_URL; import static datadog.trace.api.config.TracerConfig.TRACE_ANALYTICS_ENABLED; +import static datadog.trace.api.config.TracerConfig.TRACE_AWS_INJECT_DATADOG_ATTRIBUTE; import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_MAX_BYTES; import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_MAX_ITEMS; import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_TAG_KEYS; @@ -822,6 +823,7 @@ public static String getHostName() { private final String agentUnixDomainSocket; private final String agentNamedPipe; private final int agentTimeout; + /** Should be set to {@code true} when running in agentless mode in a JVM without TLS */ private final boolean forceClearTextHttpForIntakeClient; @@ -1301,6 +1303,8 @@ public static String getHostName() { private final int tagValueUtf8CacheSize; private final int stackTraceLengthLimit; + private final boolean awsInjectDatadogAttributeEnabled; + private final RumInjectorConfig rumInjectorConfig; private final boolean aiGuardEnabled; @@ -1583,6 +1587,9 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins awsServerless = getEnv("AWS_LAMBDA_FUNCTION_NAME") != null && !getEnv("AWS_LAMBDA_FUNCTION_NAME").isEmpty(); + awsInjectDatadogAttributeEnabled = + configProvider.getBoolean(TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, true); + spanAttributeSchemaVersion = schemaVersionFromConfig(); peerHostNameEnabled = configProvider.getBoolean(TRACE_PEER_HOSTNAME_ENABLED, true); @@ -4684,6 +4691,10 @@ public int getStackTraceLengthLimit() { return stackTraceLengthLimit; } + public boolean isAwsInjectDatadogAttributeEnabled() { + return this.awsInjectDatadogAttributeEnabled; + } + /** @return A map of tags to be applied only to the local application root span. */ public TagMap getLocalRootSpanTags() { final Map runtimeTags = getRuntimeTags(); From 3b2767a4b402ef9c3dcdab0159eda882cf70fc33 Mon Sep 17 00:00:00 2001 From: Olivier John Ndjike Nzia Date: Wed, 12 Nov 2025 12:50:00 -0500 Subject: [PATCH 2/7] add checks to messageAttributeInjectors --- .../aws/v2/sfn/SfnInterceptor.java | 2 +- .../aws/v1/sns/SnsInterceptor.java | 5 +- .../aws/v2/sns/SnsInterceptor.java | 6 +- .../aws/v1/sqs/MessageAttributeInjector.java | 5 +- .../aws/v2/sqs/MessageAttributeInjector.java | 6 +- .../datadog/trace/api/ConfigDefaults.java | 1 + .../main/java/datadog/trace/api/Config.java | 185 +----------------- 7 files changed, 22 insertions(+), 188 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java index e6dc2695893..f2cd30a4f55 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java @@ -25,7 +25,7 @@ public SfnInterceptor() {} @Override public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) { SdkRequest request = context.request(); - if (Config.get().isAwsInjectDatadogAttributeEnabled()) { + if (!Config.get().isAwsInjectDatadogAttributeEnabled()) { return request; } try { diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java index a6237a1d5f7..00ed807fc15 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java @@ -50,6 +50,9 @@ private ByteBuffer getMessageAttributeValueToInject( @Override public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request) { + if (!Config.get().isAwsInjectDatadogAttributeEnabled()) { + return request; + } // Injecting the trace context into SNS messageAttributes. if (request instanceof PublishRequest) { PublishRequest pRequest = (PublishRequest) request; @@ -58,7 +61,7 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request Map messageAttributes = pRequest.getMessageAttributes(); // 10 messageAttributes is a limit from SQS, which is often used as a subscriber, therefore // the limit still applies here - if (messageAttributes.size() < 10 && Config.get().isAwsInjectDatadogAttributeEnabled()) { + if (messageAttributes.size() < 10) { // Extract the topic name from the ARN for DSM String topicName = pRequest.getTopicArn(); if (null == topicName) { diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java index 591772700c1..9b75e74c39e 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java @@ -51,13 +51,15 @@ public SnsInterceptor() {} @Override public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) { + if (!Config.get().isAwsInjectDatadogAttributeEnabled()) { + return context.request(); + } // Injecting the trace context into SNS messageAttributes. if (context.request() instanceof PublishRequest) { PublishRequest request = (PublishRequest) context.request(); // 10 messageAttributes is a limit from SQS, which is often used as a subscriber, therefore // the limit still applies here - if (request.messageAttributes().size() < 10 - && Config.get().isAwsInjectDatadogAttributeEnabled()) { + if (request.messageAttributes().size() < 10) { // Get topic name for DSM String snsTopicArn = request.topicArn(); if (null == snsTopicArn) { diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java index 02a81e8278e..213e8120aa1 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java @@ -4,6 +4,7 @@ import com.amazonaws.services.sqs.model.MessageAttributeValue; import datadog.context.propagation.CarrierSetter; +import datadog.trace.api.Config; import java.util.Map; public class MessageAttributeInjector implements CarrierSetter> { @@ -13,7 +14,9 @@ public class MessageAttributeInjector implements CarrierSetter carrier, final String key, final String value) { - if (carrier.size() < 10 && !carrier.containsKey(DATADOG_KEY)) { + if (carrier.size() < 10 + && !carrier.containsKey(DATADOG_KEY) + && Config.get().isAwsInjectDatadogAttributeEnabled()) { String jsonPathway = String.format("{\"%s\": \"%s\"}", key, value); carrier.put( DATADOG_KEY, diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java index e39e3ac42db..5de93c34bbc 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java @@ -3,6 +3,7 @@ import static datadog.trace.api.datastreams.PathwayContext.DATADOG_KEY; import datadog.context.propagation.CarrierSetter; +import datadog.trace.api.Config; import java.util.Map; import javax.annotation.ParametersAreNonnullByDefault; import software.amazon.awssdk.services.sqs.model.MessageAttributeValue; @@ -15,7 +16,10 @@ public class MessageAttributeInjector implements CarrierSetter carrier, final String key, final String value) { - if (carrier.size() < 10 && !carrier.containsKey(DATADOG_KEY)) { + if (carrier.size() < 10 + && !carrier.containsKey(DATADOG_KEY) + && Config.get().isAwsInjectDatadogAttributeEnabled()) { + String jsonPathway = String.format("{\"%s\": \"%s\"}", key, value); carrier.put( DATADOG_KEY, diff --git a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java index 8ac6de1cf0b..3212aa70325 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java @@ -46,6 +46,7 @@ public final class ConfigDefaults { public static final String DEFAULT_AGENT_WRITER_TYPE = "DDAgentWriter"; public static final boolean DEFAULT_STARTUP_LOGS_ENABLED = true; + static final boolean DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE = true; static final boolean DEFAULT_WRITER_BAGGAGE_INJECT = true; static final String DEFAULT_SITE = "datadoghq.com"; 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 3a207b4cfb2..08e6e2286fc 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -2,187 +2,7 @@ import static datadog.environment.JavaVirtualMachine.isJavaVersion; import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast; -import static datadog.trace.api.ConfigDefaults.DEFAULT_ADD_SPAN_POINTERS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_HOST; -import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_TIMEOUT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_WRITER_TYPE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_ANALYTICS_SAMPLE_RATE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_DOWNSTREAM_REQUEST_BODY_ANALYSIS_SAMPLE_RATE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_SAMPLE_DELAY; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_BODY_PARSING_SIZE_LIMIT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_MAX_STACK_TRACES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_MAX_STACK_TRACE_DEPTH; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_RASP_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_REPORTING_INBAND; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_STACK_TRACE_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_TRACE_RATE_LIMIT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_WAF_METRICS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_WAF_TIMEOUT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CASSANDRA_KEYSPACE_STATEMENT_EXTRACTION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_AGENTLESS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_AUTO_CONFIGURATION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_BACKEND_API_TIMEOUT_MILLIS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_BUILD_INSTRUMENTATION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_COMPILER_PLUGIN_AUTO_CONFIGURATION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_COMPILER_PLUGIN_VERSION; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_COMMAND_TIMEOUT_MILLIS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_REMOTE_NAME; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_UNSHALLOW_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_UPLOAD_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_UPLOAD_TIMEOUT_MILLIS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_JACOCO_PLUGIN_EXCLUDES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_JACOCO_PLUGIN_VERSION; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_RESOURCE_FOLDER_NAMES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_SIGNAL_SERVER_HOST; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_SIGNAL_SERVER_PORT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_SOURCE_DATA_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CLIENT_IP_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CLOCK_SYNC_PERIOD; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CODE_ORIGIN_FOR_SPANS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CODE_ORIGIN_MAX_USER_FRAMES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_COUCHBASE_INTERNAL_SPANS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CWS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_CWS_TLS_REFRESH; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_EXPERIMENTAL_FEATURES_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_OPENLINEAGE_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_OPENLINEAGE_TIMEOUT_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_PARSE_SPARK_PLAN_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_STREAMS_BUCKET_DURATION; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_STREAMS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_CLIENT_HOST_SPLIT_BY_HOST; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE_TYPE_SUFFIX; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_DBM_ALWAYS_APPEND_SQL_COMMENT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_DBM_PROPAGATION_MODE_MODE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_DBM_TRACE_PREPARED_STATEMENTS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_CAPTURE_INTERMEDIATE_SPANS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_CAPTURE_INTERVAL_SECONDS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_MAX_CAPTURED_FRAMES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_ONLY_LOCAL_ROOT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_MAX_EXCEPTION_PER_SECOND; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_SOURCE_FILE_TRACKING_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DISTRIBUTED_DEBUGGER_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DOGSTATSD_PORT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DOGSTATSD_START_DELAY; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_CLASSFILE_DUMP_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_DIAGNOSTICS_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_LOCALVAR_HOISTING_LEVEL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_MAX_PAYLOAD_SIZE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_METRICS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_POLL_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_UPLOAD_BATCH_SIZE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_UPLOAD_TIMEOUT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_BODY_AND_PARAMS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_BODY_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_PARAMS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_EXPERIMENTATAL_JEE_SPLIT_BY_DEPLOYMENT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_GRPC_CLIENT_ERROR_STATUSES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_GRPC_SERVER_ERROR_STATUSES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_HEALTH_METRICS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_ERROR_STATUSES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_SPLIT_BY_DOMAIN; -import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_TAG_QUERY_STRING; -import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ERROR_STATUSES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ROUTE_BASED_NAMING; -import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_TAG_QUERY_STRING; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_ANONYMOUS_CLASSES_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_DB_ROWS_TO_TAINT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_DEBUG_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_HARDCODED_SECRET_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_REDACTION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_REDACTION_NAME_PATTERN; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_REDACTION_VALUE_PATTERN; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_STACKTRACE_LEAK_SUPPRESS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_STACK_TRACE_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_TRUNCATION_MAX_VALUE_LENGTH; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_WEAK_CIPHER_ALGORITHMS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_WEAK_HASH_ALGORITHMS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_INSTRUMENTATION_SOURCE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_JMX_FETCH_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_JMX_FETCH_MULTIPLE_RUNTIME_SERVICES_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_JMX_FETCH_MULTIPLE_RUNTIME_SERVICES_LIMIT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_LLM_OBS_AGENTLESS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_LOGS_INJECTION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_TIMEOUT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_GRPC_PORT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_HTTP_METRIC_ENDPOINT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_HTTP_PORT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_PARTIAL_FLUSH_MIN_SPANS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_PERF_METRICS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_PRIORITY_SAMPLING_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_PRIORITY_SAMPLING_FORCE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_PROPAGATION_EXTRACT_LOG_HEADER_NAMES_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_PROPAGATION_STYLE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_INTEGRITY_CHECK_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_MAX_EXTRA_SERVICES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_MAX_PAYLOAD_SIZE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_POLL_INTERVAL_SECONDS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_TARGETS_KEY; -import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_TARGETS_KEY_ID; -import static datadog.trace.api.ConfigDefaults.DEFAULT_RUM_MAJOR_VERSION; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SCOPE_DEPTH_LIMIT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SCOPE_ITERATION_KEEP_ALIVE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SECURE_RANDOM; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVICE_DISCOVERY_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVICE_NAME; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVLET_ROOT_CONTEXT_SERVICE_NAME; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SITE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SPARK_APP_NAME_AS_SERVICE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SPARK_TASK_HISTOGRAM_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SSI_INJECTION_FORCE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_STARTUP_LOGS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_COMPRESSED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_FLUSH_THRESHOLD; -import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_FORCE_UPLOAD; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_DEPENDENCY_RESOLUTION_QUEUE_SIZE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_HEARTBEAT_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_LOG_COLLECTION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_METRICS_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_128_BIT_TRACEID_GENERATION_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_V05_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_ANALYTICS_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_MAX_BYTES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_MAX_ITEMS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_TAG_KEYS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_EXPERIMENTAL_FEATURES_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_HTTP_RESOURCE_REMOVE_TRAILING_SLASH; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_KEEP_LATENCY_THRESHOLD_MS; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_POST_PROCESSING_TIMEOUT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_PROPAGATION_BEHAVIOR_EXTRACT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_PROPAGATION_EXTRACT_FIRST; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_PROPAGATION_STYLE; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_RATE_LIMIT; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_REPORT_HOSTNAME; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_RESOLVER_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_X_DATADOG_TAGS_MAX_LENGTH; -import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_INHERIT_SAMPLING; -import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_SEPARATE_TRACES; -import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_TAG_SESSION_ID; -import static datadog.trace.api.ConfigDefaults.DEFAULT_WRITER_BAGGAGE_INJECT; +import static datadog.trace.api.ConfigDefaults.*; import static datadog.trace.api.ConfigSetting.NON_DEFAULT_SEQ_ID; import static datadog.trace.api.DDTags.APM_ENABLED; import static datadog.trace.api.DDTags.HOST_TAG; @@ -1588,7 +1408,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins getEnv("AWS_LAMBDA_FUNCTION_NAME") != null && !getEnv("AWS_LAMBDA_FUNCTION_NAME").isEmpty(); awsInjectDatadogAttributeEnabled = - configProvider.getBoolean(TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, true); + configProvider.getBoolean( + TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE); spanAttributeSchemaVersion = schemaVersionFromConfig(); From 27674bc5032d6eb1467d3ec428edde2da459fb5e Mon Sep 17 00:00:00 2001 From: Olivier John Ndjike Nzia Date: Fri, 21 Nov 2025 16:01:48 -0500 Subject: [PATCH 3/7] separate config for each aws service --- .../eventbridge/EventBridgeInterceptor.java | 2 +- .../aws/v2/sfn/SfnInterceptor.java | 2 +- .../aws/v1/sns/SnsInterceptor.java | 2 +- .../aws/v2/sns/SnsInterceptor.java | 2 +- .../aws/v1/sqs/MessageAttributeInjector.java | 2 +- .../aws/v1/sqs/SqsInterceptor.java | 2 +- .../aws/v2/sqs/MessageAttributeInjector.java | 2 +- .../aws/v2/sqs/SqsInterceptor.java | 2 +- .../trace/api/config/TracerConfig.java | 3 -- .../main/java/datadog/trace/api/Config.java | 41 +++++++++++++++---- 10 files changed, 42 insertions(+), 18 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java index 3e3a13945e0..6b566886938 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java @@ -36,7 +36,7 @@ public class EventBridgeInterceptor implements ExecutionInterceptor { @Override public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) { if (!(context.request() instanceof PutEventsRequest) - || !Config.get().isAwsInjectDatadogAttributeEnabled()) { + || !Config.get().isEventbridgeInjectDatadogAttributeEnabled()) { return context.request(); } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java index f2cd30a4f55..5ab99ecae96 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java @@ -25,7 +25,7 @@ public SfnInterceptor() {} @Override public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) { SdkRequest request = context.request(); - if (!Config.get().isAwsInjectDatadogAttributeEnabled()) { + if (!Config.get().isSfnInjectDatadogAttributeEnabled()) { return request; } try { diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java index 00ed807fc15..4a09ad3292c 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java @@ -50,7 +50,7 @@ private ByteBuffer getMessageAttributeValueToInject( @Override public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request) { - if (!Config.get().isAwsInjectDatadogAttributeEnabled()) { + if (!Config.get().isSnsInjectDatadogAttributeEnabled()) { return request; } // Injecting the trace context into SNS messageAttributes. diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java index 9b75e74c39e..fb9ca4b1495 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java @@ -51,7 +51,7 @@ public SnsInterceptor() {} @Override public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) { - if (!Config.get().isAwsInjectDatadogAttributeEnabled()) { + if (!Config.get().isSnsInjectDatadogAttributeEnabled()) { return context.request(); } // Injecting the trace context into SNS messageAttributes. diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java index 213e8120aa1..f3302307aca 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/MessageAttributeInjector.java @@ -16,7 +16,7 @@ public void set( final Map carrier, final String key, final String value) { if (carrier.size() < 10 && !carrier.containsKey(DATADOG_KEY) - && Config.get().isAwsInjectDatadogAttributeEnabled()) { + && Config.get().isSqsInjectDatadogAttributeEnabled()) { String jsonPathway = String.format("{\"%s\": \"%s\"}", key, value); carrier.put( DATADOG_KEY, diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java index ebc344c1b92..3534e1ed9e2 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java @@ -70,7 +70,7 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request } } else if (request instanceof ReceiveMessageRequest) { ReceiveMessageRequest rmRequest = (ReceiveMessageRequest) request; - if (Config.get().isAwsInjectDatadogAttributeEnabled() + if (Config.get().isSqsInjectDatadogAttributeEnabled() && rmRequest.getMessageAttributeNames().size() < 10 && !rmRequest.getMessageAttributeNames().contains(DATADOG_KEY)) { List attributeNames = new ArrayList<>(rmRequest.getMessageAttributeNames()); diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java index 5de93c34bbc..889ff8e94c6 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/MessageAttributeInjector.java @@ -18,7 +18,7 @@ public void set( final Map carrier, final String key, final String value) { if (carrier.size() < 10 && !carrier.containsKey(DATADOG_KEY) - && Config.get().isAwsInjectDatadogAttributeEnabled()) { + && Config.get().isSqsInjectDatadogAttributeEnabled()) { String jsonPathway = String.format("{\"%s\": \"%s\"}", key, value); carrier.put( diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java index bf1f8ec0ce9..14bf6591938 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java @@ -79,7 +79,7 @@ public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes execu ReceiveMessageRequest request = (ReceiveMessageRequest) context.request(); if (request.messageAttributeNames().size() < 10 && !request.messageAttributeNames().contains(DATADOG_KEY) - && Config.get().isAwsInjectDatadogAttributeEnabled()) { + && Config.get().isSqsInjectDatadogAttributeEnabled()) { List messageAttributeNames = new ArrayList<>(request.messageAttributeNames()); messageAttributeNames.add(DATADOG_KEY); return request.toBuilder().messageAttributeNames(messageAttributeNames).build(); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java index 2bcc8c3fa90..bc57f96612a 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java @@ -47,7 +47,6 @@ public final class TracerConfig { @Deprecated public static final String TRACE_SAMPLING_OPERATION_RULES = "trace.sampling.operation.rules"; - // JSON rules public static final String TRACE_SAMPLING_RULES = "trace.sampling.rules"; public static final String SPAN_SAMPLING_RULES = "span.sampling.rules"; @@ -165,8 +164,6 @@ public final class TracerConfig { public static final String TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS = "trace.cloud.payload.tagging.max-tags"; public static final String TRACE_SERVICE_DISCOVERY_ENABLED = "trace.service.discovery.enabled"; - public static final String TRACE_AWS_INJECT_DATADOG_ATTRIBUTE = - "trace.aws.inject.datadog.attribute"; private TracerConfig() {} } 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 7c3ed992266..7561849b44f 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -445,7 +445,6 @@ import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_PORT; import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_URL; import static datadog.trace.api.config.TracerConfig.TRACE_ANALYTICS_ENABLED; -import static datadog.trace.api.config.TracerConfig.TRACE_AWS_INJECT_DATADOG_ATTRIBUTE; import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_MAX_BYTES; import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_MAX_ITEMS; import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_TAG_KEYS; @@ -1127,7 +1126,10 @@ public static String getHostName() { private final int tagValueUtf8CacheSize; private final int stackTraceLengthLimit; - private final boolean awsInjectDatadogAttributeEnabled; + private final boolean sfnInjectDatadogAttributeEnabled; + private final boolean sqsInjectDatadogAttributeEnabled; + private final boolean snsInjectDatadogAttributeEnabled; + private final boolean eventbridgeInjectDatadogAttributeEnabled; private final RumInjectorConfig rumInjectorConfig; @@ -1411,9 +1413,16 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins awsServerless = getEnv("AWS_LAMBDA_FUNCTION_NAME") != null && !getEnv("AWS_LAMBDA_FUNCTION_NAME").isEmpty(); - awsInjectDatadogAttributeEnabled = - configProvider.getBoolean( - TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE); + sfnInjectDatadogAttributeEnabled = + isInjectDatadogAttributeEnabled( + DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "sfn", "step.functions"); + eventbridgeInjectDatadogAttributeEnabled = + isInjectDatadogAttributeEnabled( + DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "events", "eventbridge"); + snsInjectDatadogAttributeEnabled = + isInjectDatadogAttributeEnabled(DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "sns"); + sqsInjectDatadogAttributeEnabled = + isInjectDatadogAttributeEnabled(DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "sqs"); spanAttributeSchemaVersion = schemaVersionFromConfig(); @@ -4551,8 +4560,20 @@ public int getStackTraceLengthLimit() { return stackTraceLengthLimit; } - public boolean isAwsInjectDatadogAttributeEnabled() { - return this.awsInjectDatadogAttributeEnabled; + public boolean isSqsInjectDatadogAttributeEnabled() { + return this.sqsInjectDatadogAttributeEnabled; + } + + public boolean isSnsInjectDatadogAttributeEnabled() { + return this.snsInjectDatadogAttributeEnabled; + } + + public boolean isEventbridgeInjectDatadogAttributeEnabled() { + return this.eventbridgeInjectDatadogAttributeEnabled; + } + + public boolean isSfnInjectDatadogAttributeEnabled() { + return sfnInjectDatadogAttributeEnabled; } /** @return A map of tags to be applied only to the local application root span. */ @@ -4990,6 +5011,12 @@ public boolean isPropagationEnabled( Arrays.asList(integrationNames), "", ".propagation.enabled", defaultEnabled); } + public boolean isInjectDatadogAttributeEnabled( + final boolean defaultEnabled, final String... integrationNames) { + return configProvider.isEnabled( + Arrays.asList(integrationNames), "", ".inject.datadog.attribute.enabled", defaultEnabled); + } + public boolean isLegacyTracingEnabled( final boolean defaultEnabled, final String... integrationNames) { return configProvider.isEnabled( From 0328511f9930de3725f56e3b86277ea367d816b8 Mon Sep 17 00:00:00 2001 From: Olivier John Ndjike Nzia Date: Mon, 24 Nov 2025 12:09:46 -0500 Subject: [PATCH 4/7] tests --- .../test/groovy/EventBridgeClientTest.groovy | 33 ++++++++++++++-- .../src/test/groovy/SfnClientTest.groovy | 37 ++++++++++++++---- .../src/test/groovy/SnsClientTest.groovy | 25 ++++++++++-- .../src/test/groovy/SnsClientTest.groovy | 20 ++++++++++ .../src/test/groovy/SqsClientTest.groovy | 39 +++++++++++++++---- .../src/test/groovy/SqsClientTest.groovy | 37 +++++++++++++++--- .../datadog/trace/api/ConfigDefaults.java | 2 +- .../config/TraceInstrumentationConfig.java | 9 +++++ .../main/java/datadog/trace/api/Config.java | 10 ++--- .../datadog/trace/api/ConfigTest.groovy | 38 ++++++++++++++++++ 10 files changed, 216 insertions(+), 34 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy index ce531ae50ca..0fc6a6d3a2b 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy @@ -1,7 +1,10 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes import datadog.trace.api.config.GeneralConfig +import datadog.trace.api.config.TraceInstrumentationConfig import groovy.json.JsonSlurper +import java.time.Duration +import java.util.concurrent.CompletableFuture import org.testcontainers.containers.GenericContainer import org.testcontainers.utility.DockerImageName import software.amazon.awssdk.auth.credentials.AwsBasicCredentials @@ -17,9 +20,6 @@ import software.amazon.awssdk.services.sqs.SqsClient import software.amazon.awssdk.services.sqs.model.QueueAttributeName import spock.lang.Shared -import java.time.Duration -import java.util.concurrent.CompletableFuture - class EventBridgeClientTest extends InstrumentationSpecification { static final LOCALSTACK = new GenericContainer(DockerImageName.parse("localstack/localstack:4.2.0")) .withExposedPorts(4566) @@ -495,4 +495,31 @@ class EventBridgeClientTest extends InstrumentationSpecification { 'tracestate' ] } + + def "datadog context is not injected when eventbridgeInjectDatadogAttribute is disabled"() { + setup: + injectSysConfig(TraceInstrumentationConfig.EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + + when: + TEST_WRITER.clear() + eventBridgeClient.putEvents { req -> + req.entries( + PutEventsRequestEntry.builder() + .source("com.example") + .detailType("test-no-inject") + .detail('{"message":"no-inject"}') + .eventBusName(testBusARN) + .build() + ) + } + + def message = sqsClient.receiveMessage { it.queueUrl(testQueueURL).waitTimeSeconds(3) }.messages().get(0) + def messageBody = new JsonSlurper().parseText(message.body()) + + then: + def detail = messageBody["detail"] + assert detail instanceof Map + assert detail["message"] == "no-inject" + assert detail["_datadog"] == null + } } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy index b90c4b4b131..45cbfe0d83e 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy @@ -1,23 +1,22 @@ +import static datadog.trace.agent.test.utils.TraceUtils.basicSpan + import datadog.trace.agent.test.naming.VersionedNamingTestBase import datadog.trace.agent.test.utils.TraceUtils import datadog.trace.api.DDSpanTypes +import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.bootstrap.instrumentation.api.Tags import groovy.json.JsonSlurper +import java.time.Duration import org.testcontainers.containers.GenericContainer import org.testcontainers.utility.DockerImageName +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider +import software.amazon.awssdk.regions.Region import software.amazon.awssdk.services.sfn.SfnClient import software.amazon.awssdk.services.sfn.model.SfnException import software.amazon.awssdk.services.sfn.model.StartExecutionResponse -import software.amazon.awssdk.regions.Region -import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider -import software.amazon.awssdk.auth.credentials.AwsBasicCredentials import spock.lang.Shared -import java.time.Duration - -import static datadog.trace.agent.test.utils.TraceUtils.basicSpan - - abstract class SfnClientTest extends VersionedNamingTestBase { @Shared GenericContainer localStack @Shared SfnClient sfnClient @@ -117,6 +116,28 @@ abstract class SfnClientTest extends VersionedNamingTestBase { input["_datadog"]["x-datadog-tags"] != null } + def "datadog context is not injected when SfnInjectDatadogAttribute is disabled"() { + setup: + injectSysConfig(TraceInstrumentationConfig.SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + + when: + StartExecutionResponse response = sfnClient.startExecution { builder -> + builder.stateMachineArn(testStateMachineARN) + .input("{\"key\": \"value\"}") + .build() + } + + then: + def execution = sfnClient.describeExecution { builder -> + builder.executionArn(response.executionArn()) + .build() + } + + def input = new JsonSlurper().parseText(execution.input()) + assert input["key"] == "value" + assert input["_datadog"] == null + } + def "AWS rejects invalid JSON but instrumentation does not error"() { when: sfnClient.startExecution { b -> diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy index efa7dfe4c8c..ae76c3836bb 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy @@ -10,9 +10,11 @@ import datadog.trace.agent.test.utils.TraceUtils import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig +import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.core.datastreams.StatsGroup import groovy.json.JsonSlurper +import java.time.Duration import org.testcontainers.containers.GenericContainer import org.testcontainers.utility.DockerImageName import software.amazon.awssdk.auth.credentials.AwsBasicCredentials @@ -22,9 +24,6 @@ import software.amazon.awssdk.services.sqs.SqsClient import software.amazon.awssdk.services.sqs.model.QueueAttributeName import spock.lang.Shared -import java.time.Duration - - abstract class SnsClientTest extends VersionedNamingTestBase { static final LOCALSTACK = new GenericContainer(DockerImageName.parse("localstack/localstack:4.2.0")) @@ -210,6 +209,26 @@ abstract class SnsClientTest extends VersionedNamingTestBase { !traceContextInJson['dd-pathway-ctx-base64'].toString().isBlank() } + + def "datadog context is not injected when SnsInjectDatadogAttribute is disabled"() { + setup: + TEST_WRITER.clear() + injectSysConfig(TraceInstrumentationConfig.SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + + when: + snsClient.publish(testTopicARN, 'sometext') + + def message = sqsClient.receiveMessage { it.queueUrl(testQueueURL).waitTimeSeconds(3) }.messages().get(0) + def jsonSlurper = new JsonSlurper() + def messageBody = jsonSlurper.parseText(message.body()) + if (isDataStreamsEnabled()) { + TEST_DATA_STREAMS_WRITER.waitForGroups(1) + } + then: + assert messageBody["Message"] == "sometext" + assert messageBody["MessageAttributes"] == null + } + def "SNS message to phone number doesn't leak exception"() { when: snsClient.publish(new PublishRequest().withPhoneNumber("+19995550123").withMessage('sometext')) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy index 1a52006e07f..f23b89e4b87 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy @@ -3,6 +3,7 @@ import datadog.trace.agent.test.utils.TraceUtils import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig +import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.core.datastreams.StatsGroup import datadog.trace.instrumentation.aws.ExpectedQueryParams @@ -180,6 +181,25 @@ abstract class SnsClientTest extends VersionedNamingTestBase { !traceContextInJson['dd-pathway-ctx-base64'].toString().isBlank() } + def "datadog context is not injected when SnsInjectDatadogAttribute is disabled"() { + setup: + TEST_WRITER.clear() + injectSysConfig(TraceInstrumentationConfig.SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + + when: + snsClient.publish { it.message("sometext").topicArn(testTopicARN)} + + def message = sqsClient.receiveMessage { it.queueUrl(testQueueURL).waitTimeSeconds(3) }.messages().get(0) + def jsonSlurper = new JsonSlurper() + def messageBody = jsonSlurper.parseText(message.body()) + if (isDataStreamsEnabled()) { + TEST_DATA_STREAMS_WRITER.waitForGroups(1) + } + then: + assert messageBody["Message"] == "sometext" + assert messageBody["MessageAttributes"] == null + } + def "SNS message to phone number doesn't leak exception"() { when: snsClient.publish { it.message("sometext").phoneNumber("+19995550123") } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy index 927fcfd110d..0eb52de1dcc 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy @@ -1,3 +1,6 @@ +import static datadog.trace.agent.test.utils.TraceUtils.basicSpan +import static java.nio.charset.StandardCharsets.UTF_8 + import com.amazon.sqs.javamessaging.ProviderConfiguration import com.amazon.sqs.javamessaging.SQSConnectionFactory import com.amazonaws.SDKGlobalConfiguration @@ -17,23 +20,20 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig +import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.api.datastreams.DataStreamsTags import datadog.trace.api.naming.SpanNaming import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.core.datastreams.StatsGroup import datadog.trace.instrumentation.aws.v1.sqs.TracingList +import java.nio.ByteBuffer +import java.nio.charset.Charset +import javax.jms.Session import org.elasticmq.rest.sqs.SQSRestServerBuilder import spock.lang.IgnoreIf import spock.lang.Shared -import javax.jms.Session -import java.nio.ByteBuffer -import java.nio.charset.Charset - -import static datadog.trace.agent.test.utils.TraceUtils.basicSpan -import static java.nio.charset.StandardCharsets.UTF_8 - abstract class SqsClientTest extends VersionedNamingTestBase { def setup() { @@ -189,6 +189,31 @@ abstract class SqsClientTest extends VersionedNamingTestBase { client.shutdown() } + def "dadatog context is not injected if SqsInjectDatadogAttribute is disabled"() { + setup: + injectSysConfig(TraceInstrumentationConfig.SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + def client = AmazonSQSClientBuilder.standard() + .withEndpointConfiguration(endpoint) + .withCredentials(credentialsProvider) + .build() + def queueUrl = client.createQueue('somequeue').queueUrl + TEST_WRITER.clear() + + when: + client.sendMessage(queueUrl, 'sometext') + def messages = client.receiveMessage(queueUrl).messages + + if (isDataStreamsEnabled()) { + TEST_DATA_STREAMS_WRITER.waitForGroups(1) + } + + then: + assert !messages[0].messageAttributes.containsKey("_datadog") + + cleanup: + client.shutdown() + } + @IgnoreIf({ !instance.isDataStreamsEnabled() }) def "propagation even when message attributes are readonly"() { setup: diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy index fe196f12a6f..ffe1640be76 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy @@ -1,3 +1,6 @@ +import static datadog.trace.agent.test.utils.TraceUtils.basicSpan +import static java.nio.charset.StandardCharsets.UTF_8 + import com.amazon.sqs.javamessaging.ProviderConfiguration import com.amazon.sqs.javamessaging.SQSConnectionFactory import datadog.trace.agent.test.naming.VersionedNamingTestBase @@ -7,12 +10,14 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig +import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.api.naming.SpanNaming import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.core.datastreams.StatsGroup -import datadog.trace.instrumentation.aws.v2.sqs.TracingList import datadog.trace.instrumentation.aws.ExpectedQueryParams +import datadog.trace.instrumentation.aws.v2.sqs.TracingList +import javax.jms.Session import org.elasticmq.rest.sqs.SQSRestServerBuilder import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider import software.amazon.awssdk.core.SdkBytes @@ -27,11 +32,6 @@ import software.amazon.awssdk.services.sqs.model.SendMessageRequest import spock.lang.IgnoreIf import spock.lang.Shared -import javax.jms.Session - -import static datadog.trace.agent.test.utils.TraceUtils.basicSpan -import static java.nio.charset.StandardCharsets.UTF_8 - abstract class SqsClientTest extends VersionedNamingTestBase { def setup() { @@ -189,6 +189,31 @@ abstract class SqsClientTest extends VersionedNamingTestBase { client.close() } + def "dadatog context is not injected if SqsInjectDatadogAttribute is disabled"() { + setup: + injectSysConfig(TraceInstrumentationConfig.SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + def client = SqsClient.builder() + .region(Region.EU_CENTRAL_1) + .endpointOverride(endpoint) + .credentialsProvider(credentialsProvider) + .build() + def queueUrl = client.createQueue(CreateQueueRequest.builder().queueName('somequeue').build()).queueUrl() + TEST_WRITER.clear() + + when: + client.sendMessage(SendMessageRequest.builder().queueUrl(queueUrl).messageBody('sometext').build()) + def messages = client.receiveMessage(ReceiveMessageRequest.builder().queueUrl(queueUrl).build()).messages() + + if (isDataStreamsEnabled()) { + TEST_DATA_STREAMS_WRITER.waitForGroups(1) + } + + then: + assert !messages[0].messageAttributes().containsKey("_datadog") + + cleanup: + client.close() + } @IgnoreIf({instance.isDataStreamsEnabled()}) def "trace details propagated via embedded SQS message attribute (string)"() { setup: diff --git a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java index 817ac7d6448..546f781cd82 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java @@ -46,7 +46,7 @@ public final class ConfigDefaults { public static final String DEFAULT_AGENT_WRITER_TYPE = "DDAgentWriter"; public static final boolean DEFAULT_STARTUP_LOGS_ENABLED = true; - static final boolean DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE = true; + static final boolean DEFAULT_INJECT_DATADOG_ATTRIBUTE = true; static final boolean DEFAULT_WRITER_BAGGAGE_INJECT = true; static final String DEFAULT_SITE = "datadoghq.com"; diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java index e7bc74a4443..e97bc435d3a 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java @@ -194,5 +194,14 @@ public final class TraceInstrumentationConfig { public static final String SQS_BODY_PROPAGATION_ENABLED = "trace.sqs.body.propagation.enabled"; public static final String ADD_SPAN_POINTERS = "add.span.pointers"; + public static final String SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED = + "sfn.inject.datadog.attribute.enabled"; + public static final String SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED = + "sqs.inject.datadog.attribute.enabled"; + public static final String SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED = + "sns.inject.datadog.attribute.enabled"; + public static final String EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED = + "eventbridge.inject.datadog.attribute.enabled"; + private TraceInstrumentationConfig() {} } 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 7561849b44f..0c2beca4f38 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -1414,15 +1414,13 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins getEnv("AWS_LAMBDA_FUNCTION_NAME") != null && !getEnv("AWS_LAMBDA_FUNCTION_NAME").isEmpty(); sfnInjectDatadogAttributeEnabled = - isInjectDatadogAttributeEnabled( - DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "sfn", "step.functions"); + isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "sfn", "step.functions"); eventbridgeInjectDatadogAttributeEnabled = - isInjectDatadogAttributeEnabled( - DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "events", "eventbridge"); + isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "eventbridge", "events"); snsInjectDatadogAttributeEnabled = - isInjectDatadogAttributeEnabled(DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "sns"); + isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "sns"); sqsInjectDatadogAttributeEnabled = - isInjectDatadogAttributeEnabled(DEFAULT_TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, "sqs"); + isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "sqs"); spanAttributeSchemaVersion = schemaVersionFromConfig(); diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 028e5f0e29b..646513ec73d 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -1,5 +1,10 @@ package datadog.trace.api +import static datadog.trace.api.config.TraceInstrumentationConfig.EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED +import static datadog.trace.api.config.TraceInstrumentationConfig.SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED +import static datadog.trace.api.config.TraceInstrumentationConfig.SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED +import static datadog.trace.api.config.TraceInstrumentationConfig.SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED + import datadog.trace.api.env.FixedCapturedEnvironment import datadog.trace.bootstrap.config.provider.AgentArgsInjector import datadog.trace.bootstrap.config.provider.ConfigConverter @@ -189,6 +194,11 @@ class ConfigTest extends DDSpecification { private static final DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING_ENV = "DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING" private static final DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING_ENV = "DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING" + private static final DD_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV = "DD_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED" + private static final DD_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV = "DD_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED" + private static final DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV = "DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED" + private static final DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV = "DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED" + private static final DD_TRACE_OTEL_ENABLED_ENV = "DD_TRACE_OTEL_ENABLED" private static final DD_TRACE_OTEL_ENABLED_PROP = "dd.trace.otel.enabled" @@ -320,6 +330,11 @@ class ConfigTest extends DDSpecification { prop.setProperty(TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING, "all") prop.setProperty(TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING, "all") + prop.setProperty(SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + prop.setProperty(EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + prop.setProperty(SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + prop.setProperty(SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + prop.setProperty(METRICS_OTEL_ENABLED, "True") prop.setProperty(METRICS_OTEL_INTERVAL, "11000") prop.setProperty(METRICS_OTEL_TIMEOUT, "9000") @@ -428,6 +443,11 @@ class ConfigTest extends DDSpecification { config.cloudRequestPayloadTagging == [] config.cloudResponsePayloadTagging == [] + !config.isSfnInjectDatadogAttributeEnabled() + !config.isSqsInjectDatadogAttributeEnabled() + !config.isSnsInjectDatadogAttributeEnabled() + !config.isEventbridgeInjectDatadogAttributeEnabled() + config.xDatadogTagsMaxLength == 128 config.metricsOtelEnabled config.metricsOtelInterval == 11000 @@ -722,6 +742,11 @@ class ConfigTest extends DDSpecification { System.setProperty(PREFIX + TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING, "all") System.setProperty(PREFIX + TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING, "all") + System.setProperty(PREFIX + SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + System.setProperty(PREFIX + EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + System.setProperty(PREFIX + SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + System.setProperty(PREFIX + SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + System.setProperty(DD_METRICS_OTEL_ENABLED_PROP, "True") System.setProperty(OTEL_METRIC_EXPORT_INTERVAL_PROP, "11000") System.setProperty(OTEL_METRIC_EXPORT_TIMEOUT_PROP, "9000") @@ -826,6 +851,11 @@ class ConfigTest extends DDSpecification { config.cloudRequestPayloadTagging == [] config.cloudResponsePayloadTagging == [] + !config.isSfnInjectDatadogAttributeEnabled() + !config.isSqsInjectDatadogAttributeEnabled() + !config.isSnsInjectDatadogAttributeEnabled() + !config.isEventbridgeInjectDatadogAttributeEnabled() + config.xDatadogTagsMaxLength == 128 config.metricsOtelEnabled @@ -859,6 +889,10 @@ class ConfigTest extends DDSpecification { environmentVariables.set(DD_TRACE_HEADER_TAGS, "*") environmentVariables.set(DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING_ENV, "all") environmentVariables.set(DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING_ENV, "all") + environmentVariables.set(DD_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV, "false") + environmentVariables.set(DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV, "false") + environmentVariables.set(DD_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV, "false") + environmentVariables.set(DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV, "false") environmentVariables.set(DD_METRICS_OTEL_ENABLED_ENV, "True") environmentVariables.set(OTEL_RESOURCE_ATTRIBUTES_ENV, "service.name=my=app,service.version=1.0.0,deployment.environment=production") @@ -890,6 +924,10 @@ class ConfigTest extends DDSpecification { config.getLongRunningTraceFlushInterval() == 81 config.cloudRequestPayloadTagging == [] config.cloudResponsePayloadTagging == [] + !config.isSfnInjectDatadogAttributeEnabled() + !config.isSqsInjectDatadogAttributeEnabled() + !config.isSnsInjectDatadogAttributeEnabled() + !config.isEventbridgeInjectDatadogAttributeEnabled() config.requestHeaderTags == ["*": "http.request.headers."] config.responseHeaderTags == ["*": "http.response.headers."] From 41260402d3da924427372b29fa6032f749e54b98 Mon Sep 17 00:00:00 2001 From: Olivier John Ndjike Nzia Date: Mon, 24 Nov 2025 12:53:29 -0500 Subject: [PATCH 5/7] add configs to supported configurations file --- internal-api/src/main/java/datadog/trace/api/Config.java | 4 ++-- metadata/supported-configurations.json | 4 ++++ 2 files changed, 6 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 0c2beca4f38..4dc7dd034f6 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -1414,9 +1414,9 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins getEnv("AWS_LAMBDA_FUNCTION_NAME") != null && !getEnv("AWS_LAMBDA_FUNCTION_NAME").isEmpty(); sfnInjectDatadogAttributeEnabled = - isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "sfn", "step.functions"); + isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "sfn"); eventbridgeInjectDatadogAttributeEnabled = - isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "eventbridge", "events"); + isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "eventbridge"); snsInjectDatadogAttributeEnabled = isInjectDatadogAttributeEnabled(DEFAULT_INJECT_DATADOG_ATTRIBUTE, "sns"); sqsInjectDatadogAttributeEnabled = diff --git a/metadata/supported-configurations.json b/metadata/supported-configurations.json index 65a52186da0..6363c7a00a8 100644 --- a/metadata/supported-configurations.json +++ b/metadata/supported-configurations.json @@ -175,6 +175,7 @@ "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_TIMEOUT": ["A"], "DD_DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE": ["A"], "DD_ENV": ["A"], + "DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_EXCEPTION_DEBUGGING_ENABLED": ["A"], "DD_EXCEPTION_REPLAY_CAPTURE_INTERMEDIATE_SPANS_ENABLED": ["A"], "DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS": ["A"], @@ -452,13 +453,16 @@ "DD_SERVICE_MAPPING": ["A"], "DD_SERVICE_NAME": ["A"], "DD_SERVICE_NAME_SET_BY_USER": ["A"], + "DD_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_SITE": ["A"], + "DD_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_SPAN_BUILDER_REUSE_ENABLED": ["A"], "DD_SPAN_SAMPLING_RULES": ["A"], "DD_SPAN_SAMPLING_RULES_FILE": ["A"], "DD_SPARK_APP_NAME_AS_SERVICE": ["A"], "DD_SPARK_TASK_HISTOGRAM_ENABLED": ["A"], "DD_SPRING_DATA_REPOSITORY_INTERFACE_RESOURCE_NAME": ["A"], + "DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_SQS_PROPAGATION_ENABLED": ["A"], "DD_STACK_TRACE_LENGTH_LIMIT": ["A"], "DD_STATSD_CLIENT_QUEUE_SIZE": ["A"], From 7a7253a1d4469557d6fad496ef3d8773a4d64ad1 Mon Sep 17 00:00:00 2001 From: Olivier John Ndjike Nzia Date: Mon, 24 Nov 2025 14:38:25 -0500 Subject: [PATCH 6/7] update supported-configurations with DD_TRACE env configs --- metadata/supported-configurations.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/metadata/supported-configurations.json b/metadata/supported-configurations.json index 6363c7a00a8..2c8696d19ad 100644 --- a/metadata/supported-configurations.json +++ b/metadata/supported-configurations.json @@ -671,6 +671,7 @@ "DD_TRACE_EMR_AWS_SDK_ENABLED": ["A"], "DD_TRACE_ENABLED": ["A"], "DD_TRACE_EVENTBRIDGE_ENABLED": ["A"], + "DD_TRACE_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_TRACE_EXECUTORS": ["A"], "DD_TRACE_EXECUTORS_ALL": ["A"], "DD_TRACE_EXPERIMENTAL_FEATURES_ENABLED": ["A"], @@ -1193,10 +1194,12 @@ "DD_TRACE_SERVLET_SESSION_ENABLED": ["A"], "DD_TRACE_SETUP_TEARDOWN_ENABLED": ["A"], "DD_TRACE_SFN_ENABLED": ["A"], + "DD_TRACE_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_TRACE_SHUTDOWN_ENABLED": ["A"], "DD_TRACE_SLICK_ENABLED": ["A"], "DD_TRACE_SNAKEYAML_ENABLED": ["A"], "DD_TRACE_SNS_ENABLED": ["A"], + "DD_TRACE_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_TRACE_SOCKET_ENABLED": ["A"], "DD_TRACE_SPAN_ATTRIBUTE_SCHEMA": ["A"], "DD_TRACE_SPAN_TAGS": ["A"], @@ -1253,6 +1256,7 @@ "DD_TRACE_SPYMEMCACHED_ENABLED": ["A"], "DD_TRACE_SQS_BODY_PROPAGATION_ENABLED": ["A"], "DD_TRACE_SQS_ENABLED": ["A"], + "DD_TRACE_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_TRACE_SQS_LEGACY_TRACING_ENABLED": ["A"], "DD_TRACE_SQS_PROPAGATION_ENABLED": ["A"], "DD_TRACE_SQS_TIME_IN_QUEUE_ENABLED": ["A"], From bac96d07c18c229f0bd74e8592a00a88cfa7d2dc Mon Sep 17 00:00:00 2001 From: Olivier John Ndjike Nzia Date: Mon, 24 Nov 2025 20:32:54 -0500 Subject: [PATCH 7/7] apply pr suggestions --- .../test/groovy/EventBridgeClientTest.groovy | 3 +- .../src/test/groovy/SfnClientTest.groovy | 3 +- .../src/test/groovy/SnsClientTest.groovy | 3 +- .../src/test/groovy/SnsClientTest.groovy | 3 +- .../src/test/groovy/SqsClientTest.groovy | 3 +- .../src/test/groovy/SqsClientTest.groovy | 3 +- .../config/TraceInstrumentationConfig.java | 9 - .../main/java/datadog/trace/api/Config.java | 189 +++++++++++++++++- .../datadog/trace/api/ConfigTest.groovy | 10 +- metadata/supported-configurations.json | 8 +- 10 files changed, 200 insertions(+), 34 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy index 0fc6a6d3a2b..3362d3f4b97 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/test/groovy/EventBridgeClientTest.groovy @@ -1,7 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes import datadog.trace.api.config.GeneralConfig -import datadog.trace.api.config.TraceInstrumentationConfig import groovy.json.JsonSlurper import java.time.Duration import java.util.concurrent.CompletableFuture @@ -498,7 +497,7 @@ class EventBridgeClientTest extends InstrumentationSpecification { def "datadog context is not injected when eventbridgeInjectDatadogAttribute is disabled"() { setup: - injectSysConfig(TraceInstrumentationConfig.EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + injectSysConfig("eventbridge.inject.datadog.attribute.enabled", "false") when: TEST_WRITER.clear() diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy index 45cbfe0d83e..d921d09e17a 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/test/groovy/SfnClientTest.groovy @@ -3,7 +3,6 @@ import static datadog.trace.agent.test.utils.TraceUtils.basicSpan import datadog.trace.agent.test.naming.VersionedNamingTestBase import datadog.trace.agent.test.utils.TraceUtils import datadog.trace.api.DDSpanTypes -import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.bootstrap.instrumentation.api.Tags import groovy.json.JsonSlurper import java.time.Duration @@ -118,7 +117,7 @@ abstract class SfnClientTest extends VersionedNamingTestBase { def "datadog context is not injected when SfnInjectDatadogAttribute is disabled"() { setup: - injectSysConfig(TraceInstrumentationConfig.SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + injectSysConfig("sfn.inject.datadog.attribute.enabled", "false") when: StartExecutionResponse response = sfnClient.startExecution { builder -> diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy index ae76c3836bb..4aa1e6e2ddc 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/test/groovy/SnsClientTest.groovy @@ -10,7 +10,6 @@ import datadog.trace.agent.test.utils.TraceUtils import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig -import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.core.datastreams.StatsGroup import groovy.json.JsonSlurper @@ -213,7 +212,7 @@ abstract class SnsClientTest extends VersionedNamingTestBase { def "datadog context is not injected when SnsInjectDatadogAttribute is disabled"() { setup: TEST_WRITER.clear() - injectSysConfig(TraceInstrumentationConfig.SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + injectSysConfig("sns.inject.datadog.attribute.enabled", "false") when: snsClient.publish(testTopicARN, 'sometext') diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy index f23b89e4b87..5c3eb59c295 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy @@ -3,7 +3,6 @@ import datadog.trace.agent.test.utils.TraceUtils import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig -import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.core.datastreams.StatsGroup import datadog.trace.instrumentation.aws.ExpectedQueryParams @@ -184,7 +183,7 @@ abstract class SnsClientTest extends VersionedNamingTestBase { def "datadog context is not injected when SnsInjectDatadogAttribute is disabled"() { setup: TEST_WRITER.clear() - injectSysConfig(TraceInstrumentationConfig.SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + injectSysConfig("sns.inject.datadog.attribute.enabled", "false") when: snsClient.publish { it.message("sometext").topicArn(testTopicARN)} diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy index 0eb52de1dcc..1ae7b65c8fc 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy @@ -20,7 +20,6 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig -import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.api.datastreams.DataStreamsTags import datadog.trace.api.naming.SpanNaming import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags @@ -191,7 +190,7 @@ abstract class SqsClientTest extends VersionedNamingTestBase { def "dadatog context is not injected if SqsInjectDatadogAttribute is disabled"() { setup: - injectSysConfig(TraceInstrumentationConfig.SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + injectSysConfig("sqs.inject.datadog.attribute.enabled", "false") def client = AmazonSQSClientBuilder.standard() .withEndpointConfiguration(endpoint) .withCredentials(credentialsProvider) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy index ffe1640be76..c5919e2349a 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/test/groovy/SqsClientTest.groovy @@ -10,7 +10,6 @@ import datadog.trace.api.DDSpanId import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.api.config.GeneralConfig -import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.api.naming.SpanNaming import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags import datadog.trace.bootstrap.instrumentation.api.Tags @@ -191,7 +190,7 @@ abstract class SqsClientTest extends VersionedNamingTestBase { def "dadatog context is not injected if SqsInjectDatadogAttribute is disabled"() { setup: - injectSysConfig(TraceInstrumentationConfig.SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED, "false") + injectSysConfig("sqs.inject.datadog.attribute.enabled", "false") def client = SqsClient.builder() .region(Region.EU_CENTRAL_1) .endpointOverride(endpoint) diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java index e97bc435d3a..e7bc74a4443 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java @@ -194,14 +194,5 @@ public final class TraceInstrumentationConfig { public static final String SQS_BODY_PROPAGATION_ENABLED = "trace.sqs.body.propagation.enabled"; public static final String ADD_SPAN_POINTERS = "add.span.pointers"; - public static final String SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED = - "sfn.inject.datadog.attribute.enabled"; - public static final String SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED = - "sqs.inject.datadog.attribute.enabled"; - public static final String SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED = - "sns.inject.datadog.attribute.enabled"; - public static final String EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED = - "eventbridge.inject.datadog.attribute.enabled"; - private TraceInstrumentationConfig() {} } 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 4dc7dd034f6..2f3c8d7f3d5 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -2,7 +2,188 @@ import static datadog.environment.JavaVirtualMachine.isJavaVersion; import static datadog.environment.JavaVirtualMachine.isJavaVersionAtLeast; -import static datadog.trace.api.ConfigDefaults.*; +import static datadog.trace.api.ConfigDefaults.DEFAULT_ADD_SPAN_POINTERS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_HOST; +import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_TIMEOUT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_WRITER_TYPE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_ANALYTICS_SAMPLE_RATE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_DOWNSTREAM_REQUEST_BODY_ANALYSIS_SAMPLE_RATE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_SAMPLE_DELAY; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_BODY_PARSING_SIZE_LIMIT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_MAX_STACK_TRACES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_MAX_STACK_TRACE_DEPTH; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_RASP_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_REPORTING_INBAND; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_STACK_TRACE_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_TRACE_RATE_LIMIT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_WAF_METRICS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_WAF_TIMEOUT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CASSANDRA_KEYSPACE_STATEMENT_EXTRACTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_AGENTLESS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_AUTO_CONFIGURATION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_BACKEND_API_TIMEOUT_MILLIS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_BUILD_INSTRUMENTATION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_COMPILER_PLUGIN_AUTO_CONFIGURATION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_COMPILER_PLUGIN_VERSION; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_COMMAND_TIMEOUT_MILLIS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_REMOTE_NAME; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_UNSHALLOW_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_UPLOAD_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_GIT_UPLOAD_TIMEOUT_MILLIS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_JACOCO_PLUGIN_EXCLUDES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_JACOCO_PLUGIN_VERSION; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_RESOURCE_FOLDER_NAMES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_SIGNAL_SERVER_HOST; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_SIGNAL_SERVER_PORT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_SOURCE_DATA_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CLIENT_IP_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CLOCK_SYNC_PERIOD; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CODE_ORIGIN_FOR_SPANS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CODE_ORIGIN_MAX_USER_FRAMES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_COUCHBASE_INTERNAL_SPANS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CWS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_CWS_TLS_REFRESH; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_EXPERIMENTAL_FEATURES_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_OPENLINEAGE_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_OPENLINEAGE_TIMEOUT_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_PARSE_SPARK_PLAN_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_STREAMS_BUCKET_DURATION; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_STREAMS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_CLIENT_HOST_SPLIT_BY_HOST; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE_TYPE_SUFFIX; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_DBM_ALWAYS_APPEND_SQL_COMMENT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_DBM_PROPAGATION_MODE_MODE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DB_DBM_TRACE_PREPARED_STATEMENTS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_CAPTURE_INTERMEDIATE_SPANS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_CAPTURE_INTERVAL_SECONDS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_MAX_CAPTURED_FRAMES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_EXCEPTION_ONLY_LOCAL_ROOT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_MAX_EXCEPTION_PER_SECOND; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DEBUGGER_SOURCE_FILE_TRACKING_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DISTRIBUTED_DEBUGGER_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DOGSTATSD_PORT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DOGSTATSD_START_DELAY; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_CLASSFILE_DUMP_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_DIAGNOSTICS_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_LOCALVAR_HOISTING_LEVEL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_MAX_PAYLOAD_SIZE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_METRICS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_POLL_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_UPLOAD_BATCH_SIZE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_UPLOAD_TIMEOUT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_BODY_AND_PARAMS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_BODY_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_PARAMS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_EXPERIMENTATAL_JEE_SPLIT_BY_DEPLOYMENT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_GRPC_CLIENT_ERROR_STATUSES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_GRPC_SERVER_ERROR_STATUSES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_HEALTH_METRICS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_ERROR_STATUSES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_SPLIT_BY_DOMAIN; +import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_TAG_QUERY_STRING; +import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ERROR_STATUSES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ROUTE_BASED_NAMING; +import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_TAG_QUERY_STRING; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_ANONYMOUS_CLASSES_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_DB_ROWS_TO_TAINT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_DEBUG_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_HARDCODED_SECRET_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_REDACTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_REDACTION_NAME_PATTERN; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_REDACTION_VALUE_PATTERN; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_STACKTRACE_LEAK_SUPPRESS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_STACK_TRACE_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_TRUNCATION_MAX_VALUE_LENGTH; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_WEAK_CIPHER_ALGORITHMS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_WEAK_HASH_ALGORITHMS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_INJECT_DATADOG_ATTRIBUTE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_INSTRUMENTATION_SOURCE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_JMX_FETCH_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_JMX_FETCH_MULTIPLE_RUNTIME_SERVICES_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_JMX_FETCH_MULTIPLE_RUNTIME_SERVICES_LIMIT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_LLM_OBS_AGENTLESS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_LOGS_INJECTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_TIMEOUT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_GRPC_PORT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_HTTP_METRIC_ENDPOINT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_HTTP_PORT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_PARTIAL_FLUSH_MIN_SPANS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_PERF_METRICS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_PRIORITY_SAMPLING_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_PRIORITY_SAMPLING_FORCE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_PROPAGATION_EXTRACT_LOG_HEADER_NAMES_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_PROPAGATION_STYLE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_INTEGRITY_CHECK_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_MAX_EXTRA_SERVICES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_MAX_PAYLOAD_SIZE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_POLL_INTERVAL_SECONDS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_TARGETS_KEY; +import static datadog.trace.api.ConfigDefaults.DEFAULT_REMOTE_CONFIG_TARGETS_KEY_ID; +import static datadog.trace.api.ConfigDefaults.DEFAULT_RUM_MAJOR_VERSION; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SCOPE_DEPTH_LIMIT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SCOPE_ITERATION_KEEP_ALIVE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SECURE_RANDOM; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVICE_DISCOVERY_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVICE_NAME; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVLET_ROOT_CONTEXT_SERVICE_NAME; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SITE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SPARK_APP_NAME_AS_SERVICE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SPARK_TASK_HISTOGRAM_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SSI_INJECTION_FORCE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_STARTUP_LOGS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_COMPRESSED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_FLUSH_THRESHOLD; +import static datadog.trace.api.ConfigDefaults.DEFAULT_SYMBOL_DATABASE_FORCE_UPLOAD; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_DEPENDENCY_RESOLUTION_QUEUE_SIZE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_HEARTBEAT_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_LOG_COLLECTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_METRICS_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_128_BIT_TRACEID_GENERATION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_V05_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_ANALYTICS_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_MAX_BYTES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_MAX_ITEMS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_TAG_KEYS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_EXPERIMENTAL_FEATURES_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_HTTP_RESOURCE_REMOVE_TRAILING_SLASH; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_KEEP_LATENCY_THRESHOLD_MS; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_POST_PROCESSING_TIMEOUT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_PROPAGATION_BEHAVIOR_EXTRACT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_PROPAGATION_EXTRACT_FIRST; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_PROPAGATION_STYLE; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_RATE_LIMIT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_REPORT_HOSTNAME; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_RESOLVER_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_X_DATADOG_TAGS_MAX_LENGTH; +import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_INHERIT_SAMPLING; +import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_SEPARATE_TRACES; +import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_TAG_SESSION_ID; +import static datadog.trace.api.ConfigDefaults.DEFAULT_WRITER_BAGGAGE_INJECT; import static datadog.trace.api.ConfigSetting.NON_DEFAULT_SEQ_ID; import static datadog.trace.api.DDTags.APM_ENABLED; import static datadog.trace.api.DDTags.HOST_TAG; @@ -4559,15 +4740,15 @@ public int getStackTraceLengthLimit() { } public boolean isSqsInjectDatadogAttributeEnabled() { - return this.sqsInjectDatadogAttributeEnabled; + return sqsInjectDatadogAttributeEnabled; } public boolean isSnsInjectDatadogAttributeEnabled() { - return this.snsInjectDatadogAttributeEnabled; + return snsInjectDatadogAttributeEnabled; } public boolean isEventbridgeInjectDatadogAttributeEnabled() { - return this.eventbridgeInjectDatadogAttributeEnabled; + return eventbridgeInjectDatadogAttributeEnabled; } public boolean isSfnInjectDatadogAttributeEnabled() { diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 646513ec73d..f82b9d2f874 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -1,10 +1,5 @@ package datadog.trace.api -import static datadog.trace.api.config.TraceInstrumentationConfig.EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED -import static datadog.trace.api.config.TraceInstrumentationConfig.SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED -import static datadog.trace.api.config.TraceInstrumentationConfig.SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED -import static datadog.trace.api.config.TraceInstrumentationConfig.SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED - import datadog.trace.api.env.FixedCapturedEnvironment import datadog.trace.bootstrap.config.provider.AgentArgsInjector import datadog.trace.bootstrap.config.provider.ConfigConverter @@ -199,6 +194,11 @@ class ConfigTest extends DDSpecification { private static final DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV = "DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED" private static final DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED_ENV = "DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED" + private static final EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED = "eventbridge.inject.datadog.attribute.enabled" + private static final SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED = "sfn.inject.datadog.attribute.enabled" + private static final SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED = "sns.inject.datadog.attribute.enabled" + private static final SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED = "sqs.inject.datadog.attribute.enabled" + private static final DD_TRACE_OTEL_ENABLED_ENV = "DD_TRACE_OTEL_ENABLED" private static final DD_TRACE_OTEL_ENABLED_PROP = "dd.trace.otel.enabled" diff --git a/metadata/supported-configurations.json b/metadata/supported-configurations.json index 2c8696d19ad..86c27118fa7 100644 --- a/metadata/supported-configurations.json +++ b/metadata/supported-configurations.json @@ -175,7 +175,6 @@ "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_TIMEOUT": ["A"], "DD_DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE": ["A"], "DD_ENV": ["A"], - "DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_EXCEPTION_DEBUGGING_ENABLED": ["A"], "DD_EXCEPTION_REPLAY_CAPTURE_INTERMEDIATE_SPANS_ENABLED": ["A"], "DD_EXCEPTION_REPLAY_CAPTURE_INTERVAL_SECONDS": ["A"], @@ -453,16 +452,13 @@ "DD_SERVICE_MAPPING": ["A"], "DD_SERVICE_NAME": ["A"], "DD_SERVICE_NAME_SET_BY_USER": ["A"], - "DD_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_SITE": ["A"], - "DD_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_SPAN_BUILDER_REUSE_ENABLED": ["A"], "DD_SPAN_SAMPLING_RULES": ["A"], "DD_SPAN_SAMPLING_RULES_FILE": ["A"], "DD_SPARK_APP_NAME_AS_SERVICE": ["A"], "DD_SPARK_TASK_HISTOGRAM_ENABLED": ["A"], "DD_SPRING_DATA_REPOSITORY_INTERFACE_RESOURCE_NAME": ["A"], - "DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["A"], "DD_SQS_PROPAGATION_ENABLED": ["A"], "DD_STACK_TRACE_LENGTH_LIMIT": ["A"], "DD_STATSD_CLIENT_QUEUE_SIZE": ["A"], @@ -1506,6 +1502,7 @@ "DD_TRACE_ELASTICSEARCH_TRANSPORT_ENABLED": ["DD_TRACE_INTEGRATION_ELASTICSEARCH_TRANSPORT_ENABLED","DD_INTEGRATION_ELASTICSEARCH_TRANSPORT_ENABLED"], "DD_TRACE_EMR_AWS_SDK_ENABLED": ["DD_TRACE_INTEGRATION_EMR_AWS_SDK_ENABLED","DD_INTEGRATION_EMR_AWS_SDK_ENABLED"], "DD_TRACE_EVENTBRIDGE_ENABLED": ["DD_TRACE_INTEGRATION_EVENTBRIDGE_ENABLED","DD_INTEGRATION_EVENTBRIDGE_ENABLED"], + "DD_TRACE_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["DD_EVENTBRIDGE_INJECT_DATADOG_ATTRIBUTE_ENABLED"], "DD_TRACE_FILEITEMITERATOR_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEMITERATOR_ENABLED","DD_INTEGRATION_FILEITEMITERATOR_ENABLED"], "DD_TRACE_FILEITEMSTREAM_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEMSTREAM_ENABLED","DD_INTEGRATION_FILEITEMSTREAM_ENABLED"], "DD_TRACE_FILEITEM_ENABLED": ["DD_TRACE_INTEGRATION_FILEITEM_ENABLED","DD_INTEGRATION_FILEITEM_ENABLED"], @@ -1888,10 +1885,12 @@ "DD_TRACE_SERVLET_SESSION_ENABLED": ["DD_TRACE_INTEGRATION_SERVLET_SESSION_ENABLED","DD_INTEGRATION_SERVLET_SESSION_ENABLED"], "DD_TRACE_SETUP_TEARDOWN_ENABLED": ["DD_TRACE_INTEGRATION_SETUP_TEARDOWN_ENABLED","DD_INTEGRATION_SETUP_TEARDOWN_ENABLED"], "DD_TRACE_SFN_ENABLED": ["DD_TRACE_INTEGRATION_SFN_ENABLED","DD_INTEGRATION_SFN_ENABLED"], + "DD_TRACE_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["DD_SFN_INJECT_DATADOG_ATTRIBUTE_ENABLED"], "DD_TRACE_SHUTDOWN_ENABLED": ["DD_TRACE_INTEGRATION_SHUTDOWN_ENABLED","DD_INTEGRATION_SHUTDOWN_ENABLED"], "DD_TRACE_SLICK_ENABLED": ["DD_TRACE_INTEGRATION_SLICK_ENABLED","DD_INTEGRATION_SLICK_ENABLED"], "DD_TRACE_SNAKEYAML_ENABLED": ["DD_TRACE_INTEGRATION_SNAKEYAML_ENABLED","DD_INTEGRATION_SNAKEYAML_ENABLED"], "DD_TRACE_SNS_ENABLED": ["DD_TRACE_INTEGRATION_SNS_ENABLED","DD_INTEGRATION_SNS_ENABLED"], + "DD_TRACE_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["DD_SNS_INJECT_DATADOG_ATTRIBUTE_ENABLED"], "DD_TRACE_SOCKET_ENABLED": ["DD_TRACE_INTEGRATION_SOCKET_ENABLED","DD_INTEGRATION_SOCKET_ENABLED"], "DD_TRACE_SPARKJAVA_2_4_ENABLED": ["DD_TRACE_INTEGRATION_SPARKJAVA_2_4_ENABLED","DD_INTEGRATION_SPARKJAVA_2_4_ENABLED"], "DD_TRACE_SPARKJAVA_ENABLED": ["DD_TRACE_INTEGRATION_SPARKJAVA_ENABLED","DD_INTEGRATION_SPARKJAVA_ENABLED"], @@ -1940,6 +1939,7 @@ "DD_TRACE_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE": ["DD_SPYMEMCACHED_ANALYTICS_SAMPLE_RATE"], "DD_TRACE_SPYMEMCACHED_ENABLED": ["DD_TRACE_INTEGRATION_SPYMEMCACHED_ENABLED","DD_INTEGRATION_SPYMEMCACHED_ENABLED"], "DD_TRACE_SQS_ENABLED": ["DD_TRACE_INTEGRATION_SQS_ENABLED","DD_INTEGRATION_SQS_ENABLED"], + "DD_TRACE_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED": ["DD_SQS_INJECT_DATADOG_ATTRIBUTE_ENABLED"], "DD_TRACE_SQS_LEGACY_TRACING_ENABLED": ["DD_SQS_LEGACY_TRACING_ENABLED"], "DD_TRACE_SQS_PROPAGATION_ENABLED": ["DD_TRACE_INTEGRATION_SQS_PROPAGATION_ENABLED","DD_INTEGRATION_SQS_PROPAGATION_ENABLED"], "DD_TRACE_SSLSOCKET_ENABLED": ["DD_TRACE_INTEGRATION_SSLSOCKET_ENABLED","DD_INTEGRATION_SSLSOCKET_ENABLED"],