Skip to content

Commit 1897a12

Browse files
committed
add config to disable injecting datadog attribute in aws messaging services
1 parent c6e7fca commit 1897a12

File tree

8 files changed

+34
-6
lines changed

8 files changed

+34
-6
lines changed

dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/eventbridge/EventBridgeInterceptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import static datadog.trace.instrumentation.aws.v2.eventbridge.TextMapInjectAdapter.SETTER;
77

88
import datadog.context.Context;
9+
import datadog.trace.api.Config;
910
import datadog.trace.api.datastreams.DataStreamsContext;
1011
import datadog.trace.api.datastreams.DataStreamsTags;
1112
import datadog.trace.api.datastreams.PathwayContext;
@@ -34,7 +35,8 @@ public class EventBridgeInterceptor implements ExecutionInterceptor {
3435

3536
@Override
3637
public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) {
37-
if (!(context.request() instanceof PutEventsRequest)) {
38+
if (!(context.request() instanceof PutEventsRequest)
39+
|| !Config.get().isAwsInjectDatadogAttributeEnabled()) {
3840
return context.request();
3941
}
4042

dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sfn/SfnInterceptor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static datadog.trace.bootstrap.instrumentation.api.AgentSpan.fromContext;
44

55
import datadog.context.Context;
6+
import datadog.trace.api.Config;
67
import datadog.trace.bootstrap.InstanceStore;
78
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
89
import software.amazon.awssdk.core.SdkRequest;
@@ -23,10 +24,14 @@ public SfnInterceptor() {}
2324

2425
@Override
2526
public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes executionAttributes) {
27+
SdkRequest request = context.request();
28+
if (Config.get().isAwsInjectDatadogAttributeEnabled()) {
29+
return request;
30+
}
2631
try {
2732
return modifyRequestImpl(context, executionAttributes);
2833
} catch (Exception e) {
29-
return context.request();
34+
return request;
3035
}
3136
}
3237

dd-java-agent/instrumentation/aws-java/aws-java-sns-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sns/SnsInterceptor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.amazonaws.services.sns.model.PublishBatchRequestEntry;
1414
import com.amazonaws.services.sns.model.PublishRequest;
1515
import datadog.context.Context;
16+
import datadog.trace.api.Config;
1617
import datadog.trace.api.datastreams.DataStreamsContext;
1718
import datadog.trace.api.datastreams.DataStreamsTags;
1819
import datadog.trace.bootstrap.ContextStore;
@@ -57,7 +58,7 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request
5758
Map<String, MessageAttributeValue> messageAttributes = pRequest.getMessageAttributes();
5859
// 10 messageAttributes is a limit from SQS, which is often used as a subscriber, therefore
5960
// the limit still applies here
60-
if (messageAttributes.size() < 10) {
61+
if (messageAttributes.size() < 10 && Config.get().isAwsInjectDatadogAttributeEnabled()) {
6162
// Extract the topic name from the ARN for DSM
6263
String topicName = pRequest.getTopicArn();
6364
if (null == topicName) {

dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static datadog.trace.instrumentation.aws.v2.sns.TextMapInjectAdapter.SETTER;
88

99
import datadog.context.Context;
10+
import datadog.trace.api.Config;
1011
import datadog.trace.api.datastreams.DataStreamsContext;
1112
import datadog.trace.api.datastreams.DataStreamsTags;
1213
import datadog.trace.bootstrap.InstanceStore;
@@ -55,7 +56,8 @@ public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes execu
5556
PublishRequest request = (PublishRequest) context.request();
5657
// 10 messageAttributes is a limit from SQS, which is often used as a subscriber, therefore
5758
// the limit still applies here
58-
if (request.messageAttributes().size() < 10) {
59+
if (request.messageAttributes().size() < 10
60+
&& Config.get().isAwsInjectDatadogAttributeEnabled()) {
5961
// Get topic name for DSM
6062
String snsTopicArn = request.topicArn();
6163
if (null == snsTopicArn) {

dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/main/java/datadog/trace/instrumentation/aws/v1/sqs/SqsInterceptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import datadog.context.Context;
1919
import datadog.context.propagation.Propagator;
2020
import datadog.context.propagation.Propagators;
21+
import datadog.trace.api.Config;
2122
import datadog.trace.api.datastreams.DataStreamsContext;
2223
import datadog.trace.api.datastreams.DataStreamsTags;
2324
import datadog.trace.bootstrap.ContextStore;
@@ -69,7 +70,8 @@ public AmazonWebServiceRequest beforeMarshalling(AmazonWebServiceRequest request
6970
}
7071
} else if (request instanceof ReceiveMessageRequest) {
7172
ReceiveMessageRequest rmRequest = (ReceiveMessageRequest) request;
72-
if (rmRequest.getMessageAttributeNames().size() < 10
73+
if (Config.get().isAwsInjectDatadogAttributeEnabled()
74+
&& rmRequest.getMessageAttributeNames().size() < 10
7375
&& !rmRequest.getMessageAttributeNames().contains(DATADOG_KEY)) {
7476
List<String> attributeNames = new ArrayList<>(rmRequest.getMessageAttributeNames());
7577
attributeNames.add(DATADOG_KEY);

dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/src/main/java/datadog/trace/instrumentation/aws/v2/sqs/SqsInterceptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import datadog.context.Context;
1111
import datadog.context.propagation.Propagator;
1212
import datadog.context.propagation.Propagators;
13+
import datadog.trace.api.Config;
1314
import datadog.trace.api.datastreams.DataStreamsContext;
1415
import datadog.trace.api.datastreams.DataStreamsTags;
1516
import datadog.trace.bootstrap.InstanceStore;
@@ -77,7 +78,8 @@ public SdkRequest modifyRequest(ModifyRequest context, ExecutionAttributes execu
7778
} else if (context.request() instanceof ReceiveMessageRequest) {
7879
ReceiveMessageRequest request = (ReceiveMessageRequest) context.request();
7980
if (request.messageAttributeNames().size() < 10
80-
&& !request.messageAttributeNames().contains(DATADOG_KEY)) {
81+
&& !request.messageAttributeNames().contains(DATADOG_KEY)
82+
&& Config.get().isAwsInjectDatadogAttributeEnabled()) {
8183
List<String> messageAttributeNames = new ArrayList<>(request.messageAttributeNames());
8284
messageAttributeNames.add(DATADOG_KEY);
8385
return request.toBuilder().messageAttributeNames(messageAttributeNames).build();

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public final class TracerConfig {
4747

4848
@Deprecated
4949
public static final String TRACE_SAMPLING_OPERATION_RULES = "trace.sampling.operation.rules";
50+
5051
// JSON rules
5152
public static final String TRACE_SAMPLING_RULES = "trace.sampling.rules";
5253
public static final String SPAN_SAMPLING_RULES = "span.sampling.rules";
@@ -164,6 +165,8 @@ public final class TracerConfig {
164165
public static final String TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS =
165166
"trace.cloud.payload.tagging.max-tags";
166167
public static final String TRACE_SERVICE_DISCOVERY_ENABLED = "trace.service.discovery.enabled";
168+
public static final String TRACE_AWS_INJECT_DATADOG_ATTRIBUTE =
169+
"trace.aws.inject.datadog.attribute";
167170

168171
private TracerConfig() {}
169172
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@
623623
import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_PORT;
624624
import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_URL;
625625
import static datadog.trace.api.config.TracerConfig.TRACE_ANALYTICS_ENABLED;
626+
import static datadog.trace.api.config.TracerConfig.TRACE_AWS_INJECT_DATADOG_ATTRIBUTE;
626627
import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_MAX_BYTES;
627628
import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_MAX_ITEMS;
628629
import static datadog.trace.api.config.TracerConfig.TRACE_BAGGAGE_TAG_KEYS;
@@ -822,6 +823,7 @@ public static String getHostName() {
822823
private final String agentUnixDomainSocket;
823824
private final String agentNamedPipe;
824825
private final int agentTimeout;
826+
825827
/** Should be set to {@code true} when running in agentless mode in a JVM without TLS */
826828
private final boolean forceClearTextHttpForIntakeClient;
827829

@@ -1301,6 +1303,8 @@ public static String getHostName() {
13011303
private final int tagValueUtf8CacheSize;
13021304
private final int stackTraceLengthLimit;
13031305

1306+
private final boolean awsInjectDatadogAttributeEnabled;
1307+
13041308
private final RumInjectorConfig rumInjectorConfig;
13051309

13061310
private final boolean aiGuardEnabled;
@@ -1583,6 +1587,9 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
15831587
awsServerless =
15841588
getEnv("AWS_LAMBDA_FUNCTION_NAME") != null && !getEnv("AWS_LAMBDA_FUNCTION_NAME").isEmpty();
15851589

1590+
awsInjectDatadogAttributeEnabled =
1591+
configProvider.getBoolean(TRACE_AWS_INJECT_DATADOG_ATTRIBUTE, true);
1592+
15861593
spanAttributeSchemaVersion = schemaVersionFromConfig();
15871594

15881595
peerHostNameEnabled = configProvider.getBoolean(TRACE_PEER_HOSTNAME_ENABLED, true);
@@ -4684,6 +4691,10 @@ public int getStackTraceLengthLimit() {
46844691
return stackTraceLengthLimit;
46854692
}
46864693

4694+
public boolean isAwsInjectDatadogAttributeEnabled() {
4695+
return this.awsInjectDatadogAttributeEnabled;
4696+
}
4697+
46874698
/** @return A map of tags to be applied only to the local application root span. */
46884699
public TagMap getLocalRootSpanTags() {
46894700
final Map<String, String> runtimeTags = getRuntimeTags();

0 commit comments

Comments
 (0)