Skip to content

Commit e13ab16

Browse files
authored
Remove conflicting attributes from aws-sdk instrumentation (#1294)
## Summary: We are trying to upgrade to upstream's 2.23.x, but they have changed [AWS SDK 1.x/2.x attributes to align with semantic conventions](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/tag/v2.22.0), generally, the changes are acceptable, but observed that in our aws-sdk instrumentation package, we are duplicating attribute generation for some of these changed attributes, specifically: * `aws.bucket.name` -> `aws.s3.bucket` * `aws.table.name` -> `aws.dynamnodb.table_names` * `aws.stream.name` -> `aws.kinesis.stream_name` * `aws.queue.url` -> `aws.sqs.queue_url` Since we would have to change these fields in the aws-sdk instrumentation, we are questioning whether we need this attribute generation logic at all - if we are just duplicating what the upstream is doing, why do it? Our aws-sdk instrumentation runs IN ADDITION TO, not IN PLACE OF the upstream, so removing this logic should be a no-op. ## Testing: * We have [robust contract tests](https://github.com/aws-observability/aws-otel-java-instrumentation/tree/main/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk) that validate the `aws.*` attributes (see PR approval workflow). * E2E tests also cover this logic, which are run in [main-build](https://github.com/aws-observability/aws-otel-java-instrumentation/actions/runs/21257574136). By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 3ab4aa2 commit e13ab16

4 files changed

Lines changed: 6 additions & 54 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ If your change does not need a CHANGELOG entry, add the "skip changelog" label t
1919
([#1275](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1275))
2020
- Bump Netty version to 4.1.130 Final
2121
([#1271](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1271))
22+
- Remove conflicting attributes from aws-sdk instrumentation
23+
([#1294](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1294))
2224

2325

2426
### Enhancements

instrumentation/aws-sdk/src/main/java/software/amazon/opentelemetry/javaagent/instrumentation/awssdk_v2_2/AwsExperimentalAttributes.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,8 @@
2020
import io.opentelemetry.api.common.AttributeKey;
2121

2222
final class AwsExperimentalAttributes {
23-
static final AttributeKey<String> AWS_BUCKET_NAME = stringKey("aws.bucket.name");
24-
static final AttributeKey<String> AWS_QUEUE_URL = stringKey("aws.queue.url");
2523
static final AttributeKey<String> AWS_QUEUE_NAME = stringKey("aws.queue.name");
26-
static final AttributeKey<String> AWS_STREAM_NAME = stringKey("aws.stream.name");
2724
static final AttributeKey<String> AWS_STREAM_ARN = stringKey("aws.stream.arn");
28-
static final AttributeKey<String> AWS_TABLE_NAME = stringKey("aws.table.name");
2925
static final AttributeKey<String> AWS_GUARDRAIL_ID = stringKey("aws.bedrock.guardrail.id");
3026
static final AttributeKey<String> AWS_GUARDRAIL_ARN = stringKey("aws.bedrock.guardrail.arn");
3127
static final AttributeKey<String> AWS_AGENT_ID = stringKey("aws.bedrock.agent.id");

instrumentation/aws-sdk/src/main/java/software/amazon/opentelemetry/javaagent/instrumentation/awssdk_v2_2/AwsSdkRequestType.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
*/
2424

2525
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_AGENT_ID;
26-
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_BUCKET_NAME;
2726
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_DATA_SOURCE_ID;
2827
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_GUARDRAIL_ARN;
2928
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_GUARDRAIL_ID;
@@ -32,15 +31,12 @@
3231
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_LAMBDA_NAME;
3332
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_LAMBDA_RESOURCE_ID;
3433
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_QUEUE_NAME;
35-
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_QUEUE_URL;
3634
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_SECRET_ARN;
3735
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_SNS_TOPIC_ARN;
3836
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_STATE_MACHINE_ARN;
3937
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_STEP_FUNCTIONS_ACTIVITY_ARN;
4038
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_STREAM_ARN;
41-
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_STREAM_NAME;
4239
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_TABLE_ARN;
43-
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.AWS_TABLE_NAME;
4440
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.GEN_AI_MODEL;
4541
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.GEN_AI_REQUEST_MAX_TOKENS;
4642
import static software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsExperimentalAttributes.GEN_AI_REQUEST_TEMPERATURE;
@@ -58,17 +54,13 @@
5854

5955
enum AwsSdkRequestType {
6056
// 2025-07-22: Amazon addition
61-
S3(request(AWS_BUCKET_NAME.getKey(), "Bucket")),
57+
S3(),
6258

63-
SQS(request(AWS_QUEUE_URL.getKey(), "QueueUrl"), request(AWS_QUEUE_NAME.getKey(), "QueueName")),
59+
SQS(request(AWS_QUEUE_NAME.getKey(), "QueueName")),
6460

65-
KINESIS(
66-
request(AWS_STREAM_NAME.getKey(), "StreamName"),
67-
request(AWS_STREAM_ARN.getKey(), "StreamARN")),
61+
KINESIS(request(AWS_STREAM_ARN.getKey(), "StreamARN")),
6862

69-
DYNAMODB(
70-
request(AWS_TABLE_NAME.getKey(), "TableName"),
71-
response(AWS_TABLE_ARN.getKey(), "Table.TableArn")),
63+
DYNAMODB(response(AWS_TABLE_ARN.getKey(), "Table.TableArn")),
7264

7365
SNS(
7466
/*

instrumentation/aws-sdk/src/test/java/software/amazon/opentelemetry/javaagent/instrumentation/awssdk_v2_2/AwsSdkExperimentalAttributesInjectionTest.java

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -46,39 +46,6 @@ void setUp() {
4646
mockRequest = mock(SdkRequest.class);
4747
}
4848

49-
@Test
50-
void testS3ExperimentalAttributes() {
51-
when(mockRequest.getValueForField("Bucket", Object.class))
52-
.thenReturn(Optional.of("test-bucket"));
53-
54-
fieldMapper.mapToAttributes(mockRequest, AwsSdkRequest.S3Request, mockSpan);
55-
56-
verify(mockSpan)
57-
.setAttribute(eq(AwsExperimentalAttributes.AWS_BUCKET_NAME.getKey()), eq("test-bucket"));
58-
}
59-
60-
@Test
61-
void testSqsExperimentalAttributes() {
62-
String queueUrl = "https://sqs.us-east-1.amazonaws.com/123456789012/test-queue";
63-
when(mockRequest.getValueForField("QueueUrl", Object.class)).thenReturn(Optional.of(queueUrl));
64-
65-
fieldMapper.mapToAttributes(mockRequest, AwsSdkRequest.SqsRequest, mockSpan);
66-
67-
verify(mockSpan)
68-
.setAttribute(eq(AwsExperimentalAttributes.AWS_QUEUE_URL.getKey()), eq(queueUrl));
69-
}
70-
71-
@Test
72-
void testDynamoDbExperimentalAttributes() {
73-
when(mockRequest.getValueForField("TableName", Object.class))
74-
.thenReturn(Optional.of("test-table"));
75-
76-
fieldMapper.mapToAttributes(mockRequest, AwsSdkRequest.DynamoDbRequest, mockSpan);
77-
78-
verify(mockSpan)
79-
.setAttribute(eq(AwsExperimentalAttributes.AWS_TABLE_NAME.getKey()), eq("test-table"));
80-
}
81-
8249
@Test
8350
void testSnsExperimentalAttributes() {
8451
String topicArn = "arn:aws:sns:us-east-1:123456789012:test-topic";
@@ -92,15 +59,10 @@ void testSnsExperimentalAttributes() {
9259

9360
@Test
9461
void testKinesisExperimentalAttributes() {
95-
when(mockRequest.getValueForField("StreamName", Object.class))
96-
.thenReturn(Optional.of("test-stream"));
9762
when(mockRequest.getValueForField("StreamARN", Object.class))
9863
.thenReturn(Optional.of("arn:aws:kinesis:region:account:stream/test-stream"));
9964

10065
fieldMapper.mapToAttributes(mockRequest, AwsSdkRequest.KinesisRequest, mockSpan);
101-
102-
verify(mockSpan)
103-
.setAttribute(eq(AwsExperimentalAttributes.AWS_STREAM_NAME.getKey()), eq("test-stream"));
10466
verify(mockSpan)
10567
.setAttribute(
10668
eq(AwsExperimentalAttributes.AWS_STREAM_ARN.getKey()),

0 commit comments

Comments
 (0)