From 351a23f9c6e0278639bdb3c5bd373763e34dd1f4 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 28 Sep 2024 10:01:04 -0400 Subject: [PATCH 01/10] update attribute name for sqs request id to match sem conv --- .../v1_11/AwsExperimentalAttributes.java | 2 +- .../v2_2/TracingExecutionInterceptor.java | 3 +- .../v2_2/AbstractAws2ClientCoreTest.groovy | 6 +- .../awssdk/v2_2/AbstractAws2ClientTest.groovy | 4 +- ...ractAws2SqsSuppressReceiveSpansTest.groovy | 8 +- ...AbstractAws2ClientRecordHttpErrorTest.java | 86 +++++++++---------- .../v2_2/AbstractAws2SqsTracingTest.java | 8 +- 7 files changed, 58 insertions(+), 59 deletions(-) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java index 3e8fddec5c15..13e513a3b4e3 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java @@ -17,7 +17,7 @@ final class AwsExperimentalAttributes { static final AttributeKey AWS_QUEUE_NAME = stringKey("aws.queue.name"); static final AttributeKey AWS_STREAM_NAME = stringKey("aws.stream.name"); static final AttributeKey AWS_TABLE_NAME = stringKey("aws.table.name"); - static final AttributeKey AWS_REQUEST_ID = stringKey("aws.requestId"); + static final AttributeKey AWS_REQUEST_ID = stringKey("aws.request_id"); private AwsExperimentalAttributes() {} } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java index ada21457d45b..18c85438cd5a 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java @@ -362,7 +362,8 @@ private void onSdkResponse( Span span, SdkResponse response, ExecutionAttributes executionAttributes) { if (captureExperimentalSpanAttributes) { if (response instanceof AwsResponse) { - span.setAttribute("aws.requestId", ((AwsResponse) response).responseMetadata().requestId()); + span.setAttribute( + "aws.request_id", ((AwsResponse) response).responseMetadata().requestId()); } AwsSdkRequest sdkRequest = executionAttributes.getAttribute(AWS_SDK_REQUEST_ATTRIBUTE); if (sdkRequest != null) { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy index a73122bc1af9..36a682e2408c 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy @@ -146,7 +146,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_SERVICE" "DynamoDb" "$RpcIncubatingAttributes.RPC_METHOD" "CreateTable" "aws.agent" "java-aws-sdk" - "aws.requestId" "$requestId" + "aws.request_id" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" "$DbIncubatingAttributes.DB_OPERATION" "CreateTable" @@ -179,7 +179,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_SERVICE" "DynamoDb" "$RpcIncubatingAttributes.RPC_METHOD" "Query" "aws.agent" "java-aws-sdk" - "aws.requestId" "$requestId" + "aws.request_id" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" "$DbIncubatingAttributes.DB_OPERATION" "Query" @@ -211,7 +211,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_SERVICE" "$service" "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.agent" "java-aws-sdk" - "aws.requestId" "$requestId" + "aws.request_id" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" "$DbIncubatingAttributes.DB_OPERATION" "${operation}" diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy index 3241c48640bb..7b11e62c1c94 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy @@ -135,7 +135,7 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { "$RpcIncubatingAttributes.RPC_SERVICE" "$service" "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.agent" "java-aws-sdk" - "aws.requestId" "$requestId" + "aws.request_id" "$requestId" if (service == "S3") { "aws.bucket.name" "somebucket" } else if (service == "Sqs" && operation == "CreateQueue") { @@ -295,7 +295,7 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { "$RpcIncubatingAttributes.RPC_SERVICE" "$service" "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.agent" "java-aws-sdk" - "aws.requestId" "$requestId" + "aws.request_id" "$requestId" if (service == "S3") { "aws.bucket.name" "somebucket" } else if (service == "Sqs" && operation == "CreateQueue") { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy index 6f44c92573d6..6f0c5711d9d1 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy @@ -128,7 +128,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp attributes { "aws.agent" "java-aws-sdk" "aws.queue.name" "testSdkSqs" - "aws.requestId" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "aws.request_id" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.system" "aws-api" "rpc.service" "Sqs" "rpc.method" "CreateQueue" @@ -148,7 +148,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp attributes { "aws.agent" "java-aws-sdk" "aws.queue.url" "http://localhost:$sqsPort/000000000000/testSdkSqs" - "aws.requestId" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "aws.request_id" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.system" "aws-api" "rpc.method" "SendMessage" "rpc.service" "Sqs" @@ -208,7 +208,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp hasNoLinks() attributes { "aws.agent" "java-aws-sdk" - "aws.requestId" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "aws.request_id" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.method" "ReceiveMessage" "aws.queue.url" "http://localhost:$sqsPort/000000000000/testSdkSqs" "rpc.system" "aws-api" @@ -320,7 +320,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp attributes { "aws.agent" "java-aws-sdk" "aws.queue.url" "http://localhost:$sqsPort/000000000000/testSdkSqs" - "aws.requestId" { it.trim() == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "aws.request_id" { it.trim() == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.system" "aws-api" "rpc.method" "SendMessageBatch" "rpc.service" "Sqs" diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java index 8c68be58729b..1816b11b8adc 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java @@ -156,50 +156,48 @@ public void testSendDynamoDbRequestWithRetries() { getTesting() .waitAndAssertTraces( - trace -> { - trace.hasSpansSatisfyingExactly( - span -> { - span.hasKind(SpanKind.CLIENT); - span.hasNoParent(); - span.hasAttributesSatisfying( - attributes -> { - assertThat(attributes) - .containsEntry(ServerAttributes.SERVER_ADDRESS, "127.0.0.1") - .containsEntry(ServerAttributes.SERVER_PORT, server.httpPort()) - .containsEntry(HttpAttributes.HTTP_REQUEST_METHOD, method) - .containsEntry(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200) - .containsEntry(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api") - .containsEntry(RpcIncubatingAttributes.RPC_SERVICE, service) - .containsEntry(RpcIncubatingAttributes.RPC_METHOD, operation) - .containsEntry("aws.agent", "java-aws-sdk") - .containsEntry("aws.requestId", requestId) - .containsEntry("aws.table.name", "sometable") - .containsEntry(DbIncubatingAttributes.DB_SYSTEM, "dynamodb") - .containsEntry(DbIncubatingAttributes.DB_OPERATION, operation); - }); - if (isRecordIndividualHttpErrorEnabled()) { - span.hasEventsSatisfyingExactly( - event -> - event - .hasName("HTTP request failure") - .hasAttributesSatisfyingExactly( - equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500), - equalTo( - AttributeKey.stringKey("aws.http.error_message"), - "DynamoDB could not process your request")), - event -> - event - .hasName("HTTP request failure") - .hasAttributesSatisfyingExactly( - equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 503), - equalTo( - AttributeKey.stringKey("aws.http.error_message"), - "DynamoDB is currently unavailable"))); - } else { - span.hasEventsSatisfying(events -> assertThat(events.size()).isEqualTo(0)); - } - }); - }); + trace -> + trace.hasSpansSatisfyingExactly( + span -> { + span.hasKind(SpanKind.CLIENT); + span.hasNoParent(); + span.hasAttributesSatisfying( + attributes -> + assertThat(attributes) + .containsEntry(ServerAttributes.SERVER_ADDRESS, "127.0.0.1") + .containsEntry(ServerAttributes.SERVER_PORT, server.httpPort()) + .containsEntry(HttpAttributes.HTTP_REQUEST_METHOD, method) + .containsEntry(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200) + .containsEntry(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api") + .containsEntry(RpcIncubatingAttributes.RPC_SERVICE, service) + .containsEntry(RpcIncubatingAttributes.RPC_METHOD, operation) + .containsEntry("aws.agent", "java-aws-sdk") + .containsEntry("aws.request_id", requestId) + .containsEntry("aws.table.name", "sometable") + .containsEntry(DbIncubatingAttributes.DB_SYSTEM, "dynamodb") + .containsEntry(DbIncubatingAttributes.DB_OPERATION, operation)); + if (isRecordIndividualHttpErrorEnabled()) { + span.hasEventsSatisfyingExactly( + event -> + event + .hasName("HTTP request failure") + .hasAttributesSatisfyingExactly( + equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500), + equalTo( + AttributeKey.stringKey("aws.http.error_message"), + "DynamoDB could not process your request")), + event -> + event + .hasName("HTTP request failure") + .hasAttributesSatisfyingExactly( + equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 503), + equalTo( + AttributeKey.stringKey("aws.http.error_message"), + "DynamoDB is currently unavailable"))); + } else { + span.hasEventsSatisfying(events -> assertThat(events.size()).isEqualTo(0)); + } + })); // make sure the response body input stream is still available and check its content to be // expected diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java index 39a267222ba0..a2c35a91343c 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java @@ -166,7 +166,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { equalTo(stringKey("aws.agent"), "java-aws-sdk"), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), satisfies( - stringKey("aws.requestId"), + stringKey("aws.request_id"), val -> val.satisfiesAnyOf( v -> @@ -196,7 +196,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.requestId"), + stringKey("aws.request_id"), val -> val.satisfiesAnyOf( v -> @@ -260,7 +260,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.requestId"), + stringKey("aws.request_id"), val -> val.satisfiesAnyOf( v -> @@ -507,7 +507,7 @@ void testBatchSqsProducerConsumerServicesSync() throws URISyntaxException { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.requestId"), + stringKey("aws.request_id"), val -> val.satisfiesAnyOf( v -> From 60e5e76d8d71034126a2149995ed704597e38fde Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Sat, 28 Sep 2024 13:42:15 -0400 Subject: [PATCH 02/10] fix missing request_id in aws 1.11 instrumentation --- ...AwsSdkExperimentalAttributesExtractor.java | 8 +++--- .../v1_11/AbstractAws1ClientTest.groovy | 3 +++ .../AbstractSqsSuppressReceiveSpansTest.java | 21 +++++++++++++++ .../awssdk/v1_11/AbstractSqsTracingTest.java | 27 +++++++++++++++++++ .../apachecamel/aws/AwsSpanAssertions.java | 2 ++ 5 files changed, 57 insertions(+), 4 deletions(-) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java index 245f09a5d8f5..803cc9548d53 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java @@ -14,7 +14,7 @@ import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_STREAM_NAME; import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_TABLE_NAME; -import com.amazonaws.AmazonWebServiceResponse; +import com.amazonaws.AmazonWebServiceResult; import com.amazonaws.Request; import com.amazonaws.Response; import io.opentelemetry.api.common.AttributeKey; @@ -59,9 +59,9 @@ public void onEnd( Request request, @Nullable Response response, @Nullable Throwable error) { - if (response != null && response.getAwsResponse() instanceof AmazonWebServiceResponse) { - AmazonWebServiceResponse awsResp = (AmazonWebServiceResponse) response.getAwsResponse(); - String requestId = awsResp.getRequestId(); + if (response != null && response.getAwsResponse() instanceof AmazonWebServiceResult) { + AmazonWebServiceResult awsResp = (AmazonWebServiceResult) response.getAwsResponse(); + String requestId = awsResp.getSdkResponseMetadata().getRequestId(); if (requestId != null) { attributes.put(AWS_REQUEST_ID, requestId); } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy index 81a3c4243b2f..ecc40c6fb426 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy @@ -103,6 +103,8 @@ abstract class AbstractAws1ClientTest extends InstrumentationSpecification { client.requestHandler2s != null client.requestHandler2s.find { it.getClass().getSimpleName() == "TracingRequestHandler" } != null + def hasRequestId = service in ["SNS", "RDS", "EC2"] + assertTraces(1) { trace(0, 1) { span(0) { @@ -121,6 +123,7 @@ abstract class AbstractAws1ClientTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.endpoint" "${server.httpUri()}" "aws.agent" "java-aws-sdk" + "aws.request_id" hasRequestId ? String : null for (def addedTag : additionalAttributes) { "$addedTag.key" "$addedTag.value" } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java index 51dc8b4d37e9..20e2ec20d092 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java @@ -97,6 +97,9 @@ void testSimpleSqsProducerConsumerServices() { equalTo(stringKey("aws.agent"), "java-aws-sdk"), equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "CreateQueue"), @@ -118,6 +121,9 @@ void testSimpleSqsProducerConsumerServices() { equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "SendMessage"), @@ -148,6 +154,9 @@ void testSimpleSqsProducerConsumerServices() { equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), @@ -206,6 +215,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo(stringKey("aws.agent"), "java-aws-sdk"), equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "CreateQueue"), @@ -227,6 +239,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "SendMessage"), @@ -257,6 +272,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), @@ -298,6 +316,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java index 3dd3fe259a3b..435cc6a1720f 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java @@ -130,6 +130,9 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead equalTo(stringKey("aws.agent"), "java-aws-sdk"), equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "CreateQueue"), @@ -150,6 +153,9 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "SendMessage"), @@ -194,6 +200,9 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), @@ -236,6 +245,9 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), @@ -306,6 +318,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo(stringKey("aws.agent"), "java-aws-sdk"), equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "CreateQueue"), @@ -327,6 +342,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo( stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "SendMessage"), @@ -371,6 +389,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), @@ -394,6 +415,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), @@ -431,6 +455,9 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + satisfies( + stringKey("aws.request_id"), + val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), equalTo(RpcIncubatingAttributes.RPC_METHOD, "ReceiveMessage"), diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java index b004b676d209..4c072a495a26 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java @@ -70,6 +70,7 @@ static SpanDataAssert sqs( val -> val.satisfiesAnyOf( v -> assertThat(v).isEqualTo(queueUrl), v -> assertThat(v).isNull())), + satisfies(stringKey("aws.request_id"), val -> val.isInstanceOf(String.class)), equalTo(HttpAttributes.HTTP_REQUEST_METHOD, "POST"), equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200), satisfies(UrlAttributes.URL_FULL, val -> val.isInstanceOf(String.class)), @@ -150,6 +151,7 @@ static SpanDataAssert sns(SpanDataAssert span, String spanName, String topicArn) .hasAttributesSatisfyingExactly( equalTo(stringKey("aws.agent"), "java-aws-sdk"), satisfies(stringKey("aws.endpoint"), val -> val.isInstanceOf(String.class)), + satisfies(stringKey("aws.request_id"), val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_METHOD, spanName.substring(4)), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSNS"), From 5912c1d2688e6140210f43dd567bad12af6e737d Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Mon, 30 Sep 2024 05:57:34 -0400 Subject: [PATCH 03/10] bump min aws sdk version to fix muzzle checks --- docs/supported-libraries.md | 2 +- .../aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/supported-libraries.md b/docs/supported-libraries.md index 725423a4c465..09c77d740531 100644 --- a/docs/supported-libraries.md +++ b/docs/supported-libraries.md @@ -46,7 +46,7 @@ These are the supported libraries and frameworks: | [Armeria gRPC](https://armeria.dev) | 1.14+ | | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | | [AsyncHttpClient](https://github.com/AsyncHttpClient/async-http-client) | 1.9+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] | | [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/java-handler.html) | 1.0+ | [opentelemetry-aws-lambda-core-1.0](../instrumentation/aws-lambda/aws-lambda-core-1.0/library),
[opentelemetry-aws-lambda-events-2.2](../instrumentation/aws-lambda/aws-lambda-events-2.2/library) | [FaaS Server Spans] | -| [AWS SDK](https://aws.amazon.com/sdk-for-java/) | 1.11.x and 2.2+ | [opentelemetry-aws-sdk-1.11](../instrumentation/aws-sdk/aws-sdk-1.11/library),
[opentelemetry-aws-sdk-1.11-autoconfigure](../instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure),
[opentelemetry-aws-sdk-2.2](../instrumentation/aws-sdk/aws-sdk-2.2/library),
[opentelemetry-aws-sdk-2.2-autoconfigure](../instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure) | [Messaging Spans], [Database Client Spans], [HTTP Client Spans] | +| [AWS SDK](https://aws.amazon.com/sdk-for-java/) | 1.11.33+ and 2.2+ | [opentelemetry-aws-sdk-1.11](../instrumentation/aws-sdk/aws-sdk-1.11/library),
[opentelemetry-aws-sdk-1.11-autoconfigure](../instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure),
[opentelemetry-aws-sdk-2.2](../instrumentation/aws-sdk/aws-sdk-2.2/library),
[opentelemetry-aws-sdk-2.2-autoconfigure](../instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure) | [Messaging Spans], [Database Client Spans], [HTTP Client Spans] | | [Azure Core](https://docs.microsoft.com/en-us/java/api/overview/azure/core-readme) | 1.14+ | N/A | Context propagation | | [Cassandra Driver](https://github.com/datastax/java-driver) | 3.0+ | [opentelemetry-cassandra-4.4](../instrumentation/cassandra/cassandra-4.4/library) | [Database Client Spans] | | [Clickhouse Client](https://github.com/ClickHouse/clickhouse-java) | 0.5+ | N/A | [Database Client Spans] | diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts index f357a19f885d..f957fb3d8429 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts @@ -13,7 +13,7 @@ muzzle { pass { group.set("com.amazonaws") module.set("aws-java-sdk-core") - versions.set("[1.10.33,)") + versions.set("[1.11.33,)") assertInverse.set(true) excludeInstrumentationName("aws-sdk-1.11-sqs") @@ -22,7 +22,7 @@ muzzle { fail { group.set("com.amazonaws") module.set("aws-java-sdk-core") - versions.set("[1.10.33,)") + versions.set("[1.11.33,)") excludeInstrumentationName("aws-sdk-1.11-core") } @@ -30,7 +30,7 @@ muzzle { pass { group.set("com.amazonaws") module.set("aws-java-sdk-sqs") - versions.set("[1.10.33,)") + versions.set("[1.11.33,)") } } From e8ed1d8dc2070c996fad26901a23a05887b17ace Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Mon, 30 Sep 2024 07:10:39 -0400 Subject: [PATCH 04/10] use reflection instead of bumping aws sdk version, fix remaining tests --- .../aws-sdk-1.11/javaagent/build.gradle.kts | 6 ++-- .../src/test/groovy/S3TracingTest.groovy | 35 +++++++++++++------ .../src/test/groovy/SnsTracingTest.groovy | 13 +++++-- ...AwsSdkExperimentalAttributesExtractor.java | 32 +++++++++++++++-- 4 files changed, 66 insertions(+), 20 deletions(-) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts index f957fb3d8429..f357a19f885d 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts @@ -13,7 +13,7 @@ muzzle { pass { group.set("com.amazonaws") module.set("aws-java-sdk-core") - versions.set("[1.11.33,)") + versions.set("[1.10.33,)") assertInverse.set(true) excludeInstrumentationName("aws-sdk-1.11-sqs") @@ -22,7 +22,7 @@ muzzle { fail { group.set("com.amazonaws") module.set("aws-java-sdk-core") - versions.set("[1.11.33,)") + versions.set("[1.10.33,)") excludeInstrumentationName("aws-sdk-1.11-core") } @@ -30,7 +30,7 @@ muzzle { pass { group.set("com.amazonaws") module.set("aws-java-sdk-sqs") - versions.set("[1.11.33,)") + versions.set("[1.10.33,)") } } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy index 1dea81b84719..b2f1e55bd5df 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy @@ -60,8 +60,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "CreateQueue" "aws.queue.name" queueName + "aws.request_id" String + "rpc.method" "CreateQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -82,10 +83,10 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String + "aws.bucket.name" bucketName "rpc.method" "CreateBucket" "rpc.system" "aws-api" "rpc.service" "Amazon S3" - "aws.bucket.name" bucketName "$HttpAttributes.HTTP_REQUEST_METHOD" "PUT" "$HttpAttributes.HTTP_RESPONSE_STATUS_CODE" 200 "$UrlAttributes.URL_FULL" { it.startsWith("http://") } @@ -104,8 +105,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "GetQueueAttributes" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "GetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -126,8 +128,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "SetQueueAttributes" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "SetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -188,8 +191,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "ReceiveMessage" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "ReceiveMessage" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -282,8 +286,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "PurgeQueue" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "PurgeQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -336,8 +341,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "CreateQueue" "aws.queue.name" queueName + "aws.request_id" String + "rpc.method" "CreateQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -357,8 +363,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "GetQueueAttributes" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "GetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -399,6 +406,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String + "aws.request_id" String "rpc.method" "CreateTopic" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -419,6 +427,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String + "aws.request_id" String "rpc.method" "Subscribe" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -440,8 +449,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "SetQueueAttributes" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "SetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -461,6 +471,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String + "aws.request_id" String "rpc.method" "SetTopicAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -524,8 +535,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "ReceiveMessage" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "ReceiveMessage" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -618,8 +630,9 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "PurgeQueue" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "PurgeQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy index ba6b28fafb59..23838afceba8 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy @@ -52,8 +52,9 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "CreateQueue" "aws.queue.name" queueName + "aws.request_id" String + "rpc.method" "CreateQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -74,8 +75,9 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "GetQueueAttributes" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "GetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -96,8 +98,9 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "rpc.method" "SetQueueAttributes" "aws.queue.url" queueUrl + "aws.request_id" String + "rpc.method" "SetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "$HttpAttributes.HTTP_REQUEST_METHOD" "POST" @@ -118,6 +121,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String + "aws.request_id" String "rpc.method" "CreateTopic" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -139,6 +143,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String + "aws.request_id" String "rpc.method" "Subscribe" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -160,6 +165,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String + "aws.request_id" String "rpc.method" "Publish" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -180,6 +186,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl + "aws.request_id" String "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "rpc.method" "ReceiveMessage" diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java index 803cc9548d53..efb4ec26af81 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java @@ -17,16 +17,30 @@ import com.amazonaws.AmazonWebServiceResult; import com.amazonaws.Request; import com.amazonaws.Response; +import com.amazonaws.ResponseMetadata; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.javaagent.tooling.muzzle.NoMuzzle; import java.util.function.Function; import javax.annotation.Nullable; class AwsSdkExperimentalAttributesExtractor implements AttributesExtractor, Response> { private static final String COMPONENT_NAME = "java-aws-sdk"; + private static final boolean CAN_GET_RESPONSE_METADATA = canGetResponseMetadata(); + + // AmazonWebServiceResult is only available in v1.11.33 and later + private static boolean canGetResponseMetadata() { + try { + Class clazz = Class.forName("com.amazonaws.AmazonWebServiceResult"); + clazz.getMethod("getSdkResponseMetadata"); + return true; + } catch (ClassNotFoundException | NoSuchMethodException exception) { + return false; + } + } @Override public void onStart(AttributesBuilder attributes, Context parentContext, Request request) { @@ -59,12 +73,24 @@ public void onEnd( Request request, @Nullable Response response, @Nullable Throwable error) { - if (response != null && response.getAwsResponse() instanceof AmazonWebServiceResult) { - AmazonWebServiceResult awsResp = (AmazonWebServiceResult) response.getAwsResponse(); - String requestId = awsResp.getSdkResponseMetadata().getRequestId(); + ResponseMetadata responseMetadata = getResponseMetadata(response); + + if (responseMetadata != null) { + String requestId = responseMetadata.getRequestId(); if (requestId != null) { attributes.put(AWS_REQUEST_ID, requestId); } } } + + @NoMuzzle + private static ResponseMetadata getResponseMetadata(Response response) { + if (CAN_GET_RESPONSE_METADATA + && response != null + && response.getAwsResponse() instanceof AmazonWebServiceResult) { + AmazonWebServiceResult awsResp = (AmazonWebServiceResult) response.getAwsResponse(); + return awsResp.getSdkResponseMetadata(); + } + return null; + } } From 26e7134eca1e94811fb9e746773b7bd9404b569d Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Mon, 30 Sep 2024 07:14:41 -0400 Subject: [PATCH 05/10] undo readme change --- docs/supported-libraries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/supported-libraries.md b/docs/supported-libraries.md index 09c77d740531..725423a4c465 100644 --- a/docs/supported-libraries.md +++ b/docs/supported-libraries.md @@ -46,7 +46,7 @@ These are the supported libraries and frameworks: | [Armeria gRPC](https://armeria.dev) | 1.14+ | | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | | [AsyncHttpClient](https://github.com/AsyncHttpClient/async-http-client) | 1.9+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] | | [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/java-handler.html) | 1.0+ | [opentelemetry-aws-lambda-core-1.0](../instrumentation/aws-lambda/aws-lambda-core-1.0/library),
[opentelemetry-aws-lambda-events-2.2](../instrumentation/aws-lambda/aws-lambda-events-2.2/library) | [FaaS Server Spans] | -| [AWS SDK](https://aws.amazon.com/sdk-for-java/) | 1.11.33+ and 2.2+ | [opentelemetry-aws-sdk-1.11](../instrumentation/aws-sdk/aws-sdk-1.11/library),
[opentelemetry-aws-sdk-1.11-autoconfigure](../instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure),
[opentelemetry-aws-sdk-2.2](../instrumentation/aws-sdk/aws-sdk-2.2/library),
[opentelemetry-aws-sdk-2.2-autoconfigure](../instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure) | [Messaging Spans], [Database Client Spans], [HTTP Client Spans] | +| [AWS SDK](https://aws.amazon.com/sdk-for-java/) | 1.11.x and 2.2+ | [opentelemetry-aws-sdk-1.11](../instrumentation/aws-sdk/aws-sdk-1.11/library),
[opentelemetry-aws-sdk-1.11-autoconfigure](../instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure),
[opentelemetry-aws-sdk-2.2](../instrumentation/aws-sdk/aws-sdk-2.2/library),
[opentelemetry-aws-sdk-2.2-autoconfigure](../instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure) | [Messaging Spans], [Database Client Spans], [HTTP Client Spans] | | [Azure Core](https://docs.microsoft.com/en-us/java/api/overview/azure/core-readme) | 1.14+ | N/A | Context propagation | | [Cassandra Driver](https://github.com/datastax/java-driver) | 3.0+ | [opentelemetry-cassandra-4.4](../instrumentation/cassandra/cassandra-4.4/library) | [Database Client Spans] | | [Clickhouse Client](https://github.com/ClickHouse/clickhouse-java) | 0.5+ | N/A | [Database Client Spans] | From 0dd6deb24596fb067d1024300bc6d0263093c73b Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Tue, 1 Oct 2024 07:25:28 -0400 Subject: [PATCH 06/10] change reference to request ID to use AwsIncubatingAttributes, update hasAttributesSatisfyingExactly --- .../src/test/groovy/S3TracingTest.groovy | 26 ++++++------- .../src/test/groovy/SnsTracingTest.groovy | 14 +++---- .../v1_11/AbstractAws1ClientTest.groovy | 2 +- .../AbstractSqsSuppressReceiveSpansTest.java | 15 ++++---- .../awssdk/v1_11/AbstractSqsTracingTest.java | 19 +++++----- .../v2_2/AbstractAws2ClientCoreTest.groovy | 6 +-- .../awssdk/v2_2/AbstractAws2ClientTest.groovy | 6 +-- ...ractAws2SqsSuppressReceiveSpansTest.groovy | 8 ++-- ...AbstractAws2ClientRecordHttpErrorTest.java | 37 ++++++++++--------- .../v2_2/AbstractAws2SqsTracingTest.java | 9 +++-- .../apachecamel/aws/AwsSpanAssertions.java | 7 +++- 11 files changed, 78 insertions(+), 71 deletions(-) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy index b2f1e55bd5df..2852ba907821 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy @@ -61,7 +61,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.name" queueName - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "CreateQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -106,7 +106,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "GetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -129,7 +129,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "SetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -192,7 +192,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "ReceiveMessage" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -287,7 +287,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "PurgeQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -342,7 +342,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.name" queueName - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "CreateQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -364,7 +364,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "GetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -406,7 +406,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "CreateTopic" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -427,7 +427,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "Subscribe" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -450,7 +450,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "SetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -471,7 +471,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "SetTopicAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -536,7 +536,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "ReceiveMessage" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -631,7 +631,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "PurgeQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy index 23838afceba8..741fb278dbd5 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy @@ -53,7 +53,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.name" queueName - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "CreateQueue" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -76,7 +76,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "GetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -99,7 +99,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "SetQueueAttributes" "rpc.system" "aws-api" "rpc.service" "AmazonSQS" @@ -121,7 +121,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "CreateTopic" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -143,7 +143,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "Subscribe" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -165,7 +165,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { attributes { "aws.agent" "java-aws-sdk" "aws.endpoint" String - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.method" "Publish" "rpc.system" "aws-api" "rpc.service" "AmazonSNS" @@ -186,7 +186,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { "aws.agent" "java-aws-sdk" "aws.endpoint" String "aws.queue.url" queueUrl - "aws.request_id" String + "$AwsIncubatingAttributes.AWS_REQUEST_ID" String "rpc.system" "aws-api" "rpc.service" "AmazonSQS" "rpc.method" "ReceiveMessage" diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy index ecc40c6fb426..45a82c8de6af 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy @@ -123,7 +123,7 @@ abstract class AbstractAws1ClientTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.endpoint" "${server.httpUri()}" "aws.agent" "java-aws-sdk" - "aws.request_id" hasRequestId ? String : null + "$AwsIncubatingAttributes.AWS_REQUEST_ID" hasRequestId ? String : null for (def addedTag : additionalAttributes) { "$addedTag.key" "$addedTag.value" } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java index 20e2ec20d092..2dd6822f4417 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java @@ -28,6 +28,7 @@ import io.opentelemetry.semconv.NetworkAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes; import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import org.elasticmq.rest.sqs.SQSRestServer; @@ -98,7 +99,7 @@ void testSimpleSqsProducerConsumerServices() { equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -122,7 +123,7 @@ void testSimpleSqsProducerConsumerServices() { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -155,7 +156,7 @@ void testSimpleSqsProducerConsumerServices() { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -216,7 +217,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -240,7 +241,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -273,7 +274,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -317,7 +318,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java index 435cc6a1720f..927239ca2e51 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java @@ -34,6 +34,7 @@ import io.opentelemetry.semconv.NetworkAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes; import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import java.util.ArrayList; @@ -131,7 +132,7 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -154,7 +155,7 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -201,7 +202,7 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -246,7 +247,7 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -319,7 +320,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -343,7 +344,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -390,7 +391,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -416,7 +417,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), @@ -456,7 +457,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSQS"), diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy index 36a682e2408c..b18c0727213b 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy @@ -146,7 +146,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_SERVICE" "DynamoDb" "$RpcIncubatingAttributes.RPC_METHOD" "CreateTable" "aws.agent" "java-aws-sdk" - "aws.request_id" "$requestId" + "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" "$DbIncubatingAttributes.DB_OPERATION" "CreateTable" @@ -179,7 +179,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_SERVICE" "DynamoDb" "$RpcIncubatingAttributes.RPC_METHOD" "Query" "aws.agent" "java-aws-sdk" - "aws.request_id" "$requestId" + "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" "$DbIncubatingAttributes.DB_OPERATION" "Query" @@ -211,7 +211,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$RpcIncubatingAttributes.RPC_SERVICE" "$service" "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.agent" "java-aws-sdk" - "aws.request_id" "$requestId" + "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" "$DbIncubatingAttributes.DB_OPERATION" "${operation}" diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy index 7b11e62c1c94..b41a37518a66 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2 - +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes import io.opentelemetry.semconv.ServerAttributes @@ -135,7 +135,7 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { "$RpcIncubatingAttributes.RPC_SERVICE" "$service" "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.agent" "java-aws-sdk" - "aws.request_id" "$requestId" + "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" if (service == "S3") { "aws.bucket.name" "somebucket" } else if (service == "Sqs" && operation == "CreateQueue") { @@ -295,7 +295,7 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { "$RpcIncubatingAttributes.RPC_SERVICE" "$service" "$RpcIncubatingAttributes.RPC_METHOD" "${operation}" "aws.agent" "java-aws-sdk" - "aws.request_id" "$requestId" + "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" if (service == "S3") { "aws.bucket.name" "somebucket" } else if (service == "Sqs" && operation == "CreateQueue") { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy index 6f0c5711d9d1..85885c0b8511 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy @@ -128,7 +128,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp attributes { "aws.agent" "java-aws-sdk" "aws.queue.name" "testSdkSqs" - "aws.request_id" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "$AwsIncubatingAttributes.AWS_REQUEST_ID" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.system" "aws-api" "rpc.service" "Sqs" "rpc.method" "CreateQueue" @@ -148,7 +148,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp attributes { "aws.agent" "java-aws-sdk" "aws.queue.url" "http://localhost:$sqsPort/000000000000/testSdkSqs" - "aws.request_id" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "$AwsIncubatingAttributes.AWS_REQUEST_ID" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.system" "aws-api" "rpc.method" "SendMessage" "rpc.service" "Sqs" @@ -208,7 +208,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp hasNoLinks() attributes { "aws.agent" "java-aws-sdk" - "aws.request_id" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "$AwsIncubatingAttributes.AWS_REQUEST_ID" { it == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.method" "ReceiveMessage" "aws.queue.url" "http://localhost:$sqsPort/000000000000/testSdkSqs" "rpc.system" "aws-api" @@ -320,7 +320,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp attributes { "aws.agent" "java-aws-sdk" "aws.queue.url" "http://localhost:$sqsPort/000000000000/testSdkSqs" - "aws.request_id" { it.trim() == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } + "$AwsIncubatingAttributes.AWS_REQUEST_ID" { it.trim() == "00000000-0000-0000-0000-000000000000" || it == "UNKNOWN" } "rpc.system" "aws-api" "rpc.method" "SendMessageBatch" "rpc.service" "Sqs" diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java index 1816b11b8adc..19abb21a8ee0 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java @@ -5,15 +5,16 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; +import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.semconv.HttpAttributes; import io.opentelemetry.semconv.ServerAttributes; +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import io.opentelemetry.testing.internal.armeria.common.HttpResponse; @@ -161,21 +162,21 @@ public void testSendDynamoDbRequestWithRetries() { span -> { span.hasKind(SpanKind.CLIENT); span.hasNoParent(); - span.hasAttributesSatisfying( - attributes -> - assertThat(attributes) - .containsEntry(ServerAttributes.SERVER_ADDRESS, "127.0.0.1") - .containsEntry(ServerAttributes.SERVER_PORT, server.httpPort()) - .containsEntry(HttpAttributes.HTTP_REQUEST_METHOD, method) - .containsEntry(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200) - .containsEntry(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api") - .containsEntry(RpcIncubatingAttributes.RPC_SERVICE, service) - .containsEntry(RpcIncubatingAttributes.RPC_METHOD, operation) - .containsEntry("aws.agent", "java-aws-sdk") - .containsEntry("aws.request_id", requestId) - .containsEntry("aws.table.name", "sometable") - .containsEntry(DbIncubatingAttributes.DB_SYSTEM, "dynamodb") - .containsEntry(DbIncubatingAttributes.DB_OPERATION, operation)); + span.hasAttributesSatisfyingExactly( + equalTo(ServerAttributes.SERVER_ADDRESS, "127.0.0.1"), + equalTo(ServerAttributes.SERVER_PORT, server.httpPort()), + equalTo(HttpAttributes.HTTP_REQUEST_METHOD, method), + equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200), + equalTo( + stringKey("url.full"), "http://127.0.0.1:" + server.httpPort() + "/"), + equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), + equalTo(RpcIncubatingAttributes.RPC_SERVICE, service), + equalTo(RpcIncubatingAttributes.RPC_METHOD, operation), + equalTo(stringKey("aws.agent"), "java-aws-sdk"), + equalTo(AwsIncubatingAttributes.AWS_REQUEST_ID, requestId), + equalTo(stringKey("aws.table.name"), "sometable"), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "dynamodb"), + equalTo(DbIncubatingAttributes.DB_OPERATION, operation)); if (isRecordIndividualHttpErrorEnabled()) { span.hasEventsSatisfyingExactly( event -> @@ -184,7 +185,7 @@ public void testSendDynamoDbRequestWithRetries() { .hasAttributesSatisfyingExactly( equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500), equalTo( - AttributeKey.stringKey("aws.http.error_message"), + stringKey("aws.http.error_message"), "DynamoDB could not process your request")), event -> event @@ -192,7 +193,7 @@ public void testSendDynamoDbRequestWithRetries() { .hasAttributesSatisfyingExactly( equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 503), equalTo( - AttributeKey.stringKey("aws.http.error_message"), + stringKey("aws.http.error_message"), "DynamoDB is currently unavailable"))); } else { span.hasEventsSatisfying(events -> assertThat(events.size()).isEqualTo(0)); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java index a2c35a91343c..a6293e7af4db 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java @@ -21,6 +21,7 @@ import io.opentelemetry.semconv.HttpAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes; import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import io.opentelemetry.testing.internal.armeria.internal.shaded.guava.collect.ImmutableList; @@ -166,7 +167,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { equalTo(stringKey("aws.agent"), "java-aws-sdk"), equalTo(stringKey("aws.queue.name"), "testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.satisfiesAnyOf( v -> @@ -196,7 +197,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.satisfiesAnyOf( v -> @@ -260,7 +261,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.satisfiesAnyOf( v -> @@ -507,7 +508,7 @@ void testBatchSqsProducerConsumerServicesSync() throws URISyntaxException { stringKey("aws.queue.url"), "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), satisfies( - stringKey("aws.request_id"), + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.satisfiesAnyOf( v -> diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java index 4c072a495a26..74a3efe8cdca 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java @@ -18,6 +18,7 @@ import io.opentelemetry.semconv.NetworkAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes; import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import java.util.ArrayList; @@ -70,7 +71,8 @@ static SpanDataAssert sqs( val -> val.satisfiesAnyOf( v -> assertThat(v).isEqualTo(queueUrl), v -> assertThat(v).isNull())), - satisfies(stringKey("aws.request_id"), val -> val.isInstanceOf(String.class)), + satisfies( + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(HttpAttributes.HTTP_REQUEST_METHOD, "POST"), equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200), satisfies(UrlAttributes.URL_FULL, val -> val.isInstanceOf(String.class)), @@ -151,7 +153,8 @@ static SpanDataAssert sns(SpanDataAssert span, String spanName, String topicArn) .hasAttributesSatisfyingExactly( equalTo(stringKey("aws.agent"), "java-aws-sdk"), satisfies(stringKey("aws.endpoint"), val -> val.isInstanceOf(String.class)), - satisfies(stringKey("aws.request_id"), val -> val.isInstanceOf(String.class)), + satisfies( + AwsIncubatingAttributes.AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)), equalTo(RpcIncubatingAttributes.RPC_SYSTEM, "aws-api"), equalTo(RpcIncubatingAttributes.RPC_METHOD, spanName.substring(4)), equalTo(RpcIncubatingAttributes.RPC_SERVICE, "AmazonSNS"), From ef5408eab4614cabc66ae6e33dcc17ffc73049f5 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Tue, 1 Oct 2024 07:54:30 -0400 Subject: [PATCH 07/10] imports --- .../aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy | 1 + .../aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy | 1 + .../instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy | 1 + .../awssdk/v2_2/AbstractAws2ClientCoreTest.groovy | 1 + .../awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy | 1 + 5 files changed, 5 insertions(+) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy index 2852ba907821..616e8af4f92c 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy @@ -5,6 +5,7 @@ import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.HttpAttributes import io.opentelemetry.semconv.NetworkAttributes diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy index 741fb278dbd5..7f307f69015a 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy @@ -5,6 +5,7 @@ import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.HttpAttributes import io.opentelemetry.semconv.NetworkAttributes diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy index 45a82c8de6af..c4c5bbb9f47a 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy @@ -33,6 +33,7 @@ import io.opentelemetry.api.trace.Span import io.opentelemetry.instrumentation.test.InstrumentationSpecification import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.ErrorAttributes import io.opentelemetry.semconv.HttpAttributes diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy index b18c0727213b..c79c0eac333f 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy @@ -9,6 +9,7 @@ import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil import io.opentelemetry.instrumentation.test.InstrumentationSpecification import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes import io.opentelemetry.semconv.incubating.DbIncubatingAttributes +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.HttpAttributes import io.opentelemetry.semconv.UrlAttributes diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy index 85885c0b8511..22b33739fef8 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy @@ -7,6 +7,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2 import io.opentelemetry.instrumentation.test.InstrumentationSpecification import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.HttpAttributes import io.opentelemetry.semconv.UrlAttributes From 3b4b3670eac989c101396fb50b25e2b12e10c725 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Thu, 3 Oct 2024 06:51:24 -0400 Subject: [PATCH 08/10] emit aws request_id attribute by default --- .../v1_11/AwsExperimentalAttributes.java | 1 - .../v1_11/AwsSdkAttributesExtractor.java | 66 +++++++++++++++++++ ...AwsSdkExperimentalAttributesExtractor.java | 38 +---------- .../v1_11/AwsSdkInstrumenterFactory.java | 27 +++++--- .../v2_2/TracingExecutionInterceptor.java | 7 +- 5 files changed, 89 insertions(+), 50 deletions(-) create mode 100644 instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkAttributesExtractor.java diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java index 13e513a3b4e3..096c7826a12d 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java @@ -17,7 +17,6 @@ final class AwsExperimentalAttributes { static final AttributeKey AWS_QUEUE_NAME = stringKey("aws.queue.name"); static final AttributeKey AWS_STREAM_NAME = stringKey("aws.stream.name"); static final AttributeKey AWS_TABLE_NAME = stringKey("aws.table.name"); - static final AttributeKey AWS_REQUEST_ID = stringKey("aws.request_id"); private AwsExperimentalAttributes() {} } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkAttributesExtractor.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkAttributesExtractor.java new file mode 100644 index 000000000000..cb57c78b4e6d --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkAttributesExtractor.java @@ -0,0 +1,66 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awssdk.v1_11; + +import static io.opentelemetry.api.common.AttributeKey.stringKey; + +import com.amazonaws.AmazonWebServiceResult; +import com.amazonaws.Request; +import com.amazonaws.Response; +import com.amazonaws.ResponseMetadata; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.javaagent.tooling.muzzle.NoMuzzle; +import javax.annotation.Nullable; + +class AwsSdkAttributesExtractor implements AttributesExtractor, Response> { + private static final boolean CAN_GET_RESPONSE_METADATA = canGetResponseMetadata(); + private static final AttributeKey AWS_REQUEST_ID = stringKey("aws.request_id"); + + // AmazonWebServiceResult is only available in v1.11.33 and later + private static boolean canGetResponseMetadata() { + try { + Class clazz = Class.forName("com.amazonaws.AmazonWebServiceResult"); + clazz.getMethod("getSdkResponseMetadata"); + return true; + } catch (ClassNotFoundException | NoSuchMethodException exception) { + return false; + } + } + + @Override + public void onStart(AttributesBuilder attributes, Context parentContext, Request request) {} + + @Override + public void onEnd( + AttributesBuilder attributes, + Context context, + Request request, + @Nullable Response response, + @Nullable Throwable error) { + ResponseMetadata responseMetadata = getResponseMetadata(response); + + if (responseMetadata != null) { + String requestId = responseMetadata.getRequestId(); + if (requestId != null) { + attributes.put(AWS_REQUEST_ID, requestId); + } + } + } + + @NoMuzzle + private static ResponseMetadata getResponseMetadata(Response response) { + if (CAN_GET_RESPONSE_METADATA + && response != null + && response.getAwsResponse() instanceof AmazonWebServiceResult) { + AmazonWebServiceResult awsResp = (AmazonWebServiceResult) response.getAwsResponse(); + return awsResp.getSdkResponseMetadata(); + } + return null; + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java index efb4ec26af81..541e67d23b85 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java @@ -10,37 +10,21 @@ import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_ENDPOINT; import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_QUEUE_NAME; import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_QUEUE_URL; -import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_REQUEST_ID; import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_STREAM_NAME; import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_TABLE_NAME; -import com.amazonaws.AmazonWebServiceResult; import com.amazonaws.Request; import com.amazonaws.Response; -import com.amazonaws.ResponseMetadata; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.javaagent.tooling.muzzle.NoMuzzle; import java.util.function.Function; import javax.annotation.Nullable; class AwsSdkExperimentalAttributesExtractor implements AttributesExtractor, Response> { private static final String COMPONENT_NAME = "java-aws-sdk"; - private static final boolean CAN_GET_RESPONSE_METADATA = canGetResponseMetadata(); - - // AmazonWebServiceResult is only available in v1.11.33 and later - private static boolean canGetResponseMetadata() { - try { - Class clazz = Class.forName("com.amazonaws.AmazonWebServiceResult"); - clazz.getMethod("getSdkResponseMetadata"); - return true; - } catch (ClassNotFoundException | NoSuchMethodException exception) { - return false; - } - } @Override public void onStart(AttributesBuilder attributes, Context parentContext, Request request) { @@ -72,25 +56,5 @@ public void onEnd( Context context, Request request, @Nullable Response response, - @Nullable Throwable error) { - ResponseMetadata responseMetadata = getResponseMetadata(response); - - if (responseMetadata != null) { - String requestId = responseMetadata.getRequestId(); - if (requestId != null) { - attributes.put(AWS_REQUEST_ID, requestId); - } - } - } - - @NoMuzzle - private static ResponseMetadata getResponseMetadata(Response response) { - if (CAN_GET_RESPONSE_METADATA - && response != null - && response.getAwsResponse() instanceof AmazonWebServiceResult) { - AmazonWebServiceResult awsResp = (AmazonWebServiceResult) response.getAwsResponse(); - return awsResp.getSdkResponseMetadata(); - } - return null; - } + @Nullable Throwable error) {} } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkInstrumenterFactory.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkInstrumenterFactory.java index 16ef43d40961..4f196a39ba7d 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkInstrumenterFactory.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkInstrumenterFactory.java @@ -39,18 +39,14 @@ final class AwsSdkInstrumenterFactory { RpcClientAttributesExtractor.create(AwsSdkRpcAttributesGetter.INSTANCE); private static final AwsSdkExperimentalAttributesExtractor experimentalAttributesExtractor = new AwsSdkExperimentalAttributesExtractor(); + private static final AwsSdkAttributesExtractor sdkAttributesExtractor = + new AwsSdkAttributesExtractor(); private static final SnsAttributesExtractor snsAttributesExtractor = new SnsAttributesExtractor(); private static final List, Response>> - defaultAttributesExtractors = - Arrays.asList(httpAttributesExtractor, rpcAttributesExtractor, snsAttributesExtractor); + defaultAttributesExtractors = createAttributesExtractors(false); private static final List, Response>> - extendedAttributesExtractors = - Arrays.asList( - httpAttributesExtractor, - rpcAttributesExtractor, - snsAttributesExtractor, - experimentalAttributesExtractor); + extendedAttributesExtractors = createAttributesExtractors(true); private static final AwsSdkSpanNameExtractor spanName = new AwsSdkSpanNameExtractor(); private final OpenTelemetry openTelemetry; @@ -69,6 +65,21 @@ final class AwsSdkInstrumenterFactory { this.messagingReceiveInstrumentationEnabled = messagingReceiveInstrumentationEnabled; } + private static List, Response>> createAttributesExtractors( + boolean includeExperimental) { + List, Response>> extractors = + new ArrayList<>( + Arrays.asList( + httpAttributesExtractor, + rpcAttributesExtractor, + snsAttributesExtractor, + sdkAttributesExtractor)); + if (includeExperimental) { + extractors.add(experimentalAttributesExtractor); + } + return extractors; + } + Instrumenter, Response> requestInstrumenter() { return createInstrumenter( openTelemetry, diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java index 18c85438cd5a..31cb821f3857 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java @@ -360,11 +360,10 @@ public void afterExecution( private void onSdkResponse( Span span, SdkResponse response, ExecutionAttributes executionAttributes) { + if (response instanceof AwsResponse) { + span.setAttribute("aws.request_id", ((AwsResponse) response).responseMetadata().requestId()); + } if (captureExperimentalSpanAttributes) { - if (response instanceof AwsResponse) { - span.setAttribute( - "aws.request_id", ((AwsResponse) response).responseMetadata().requestId()); - } AwsSdkRequest sdkRequest = executionAttributes.getAttribute(AWS_SDK_REQUEST_ATTRIBUTE); if (sdkRequest != null) { fieldMapper.mapToAttributes(response, sdkRequest, span); From 7a51fbd9e359fc2836a8455454c6200e8f351aec Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Tue, 8 Oct 2024 17:40:03 -0400 Subject: [PATCH 09/10] update reference to attribute key --- .../awssdk/v2_2/TracingExecutionInterceptor.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java index 31cb821f3857..37b11ace2f00 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java @@ -48,6 +48,9 @@ final class TracingExecutionInterceptor implements ExecutionInterceptor { private static final AttributeKey DB_SYSTEM = AttributeKey.stringKey("db.system"); // copied from DbIncubatingAttributes.DbSystemValues private static final String DB_SYSTEM_DYNAMODB = "dynamodb"; + // copied from AwsIncubatingAttributes + private static final AttributeKey AWS_REQUEST_ID = + AttributeKey.stringKey("aws.request_id"); // the class name is part of the attribute name, so that it will be shaded when used in javaagent // instrumentation, and won't conflict with usage outside javaagent instrumentation @@ -361,7 +364,7 @@ public void afterExecution( private void onSdkResponse( Span span, SdkResponse response, ExecutionAttributes executionAttributes) { if (response instanceof AwsResponse) { - span.setAttribute("aws.request_id", ((AwsResponse) response).responseMetadata().requestId()); + span.setAttribute(AWS_REQUEST_ID, ((AwsResponse) response).responseMetadata().requestId()); } if (captureExperimentalSpanAttributes) { AwsSdkRequest sdkRequest = executionAttributes.getAttribute(AWS_SDK_REQUEST_ATTRIBUTE); From 65300a50b0353c99c80d222e8c287ee26a2f18c2 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Tue, 8 Oct 2024 19:04:53 -0400 Subject: [PATCH 10/10] update spring tests --- .../instrumentation/spring/aws/AwsSqsTest.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/instrumentation/spring/spring-cloud-aws-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/aws/AwsSqsTest.java b/instrumentation/spring/spring-cloud-aws-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/aws/AwsSqsTest.java index 676f94fe5a77..f1961da32e62 100644 --- a/instrumentation/spring/spring-cloud-aws-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/aws/AwsSqsTest.java +++ b/instrumentation/spring/spring-cloud-aws-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/aws/AwsSqsTest.java @@ -18,6 +18,7 @@ import io.opentelemetry.semconv.HttpAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes; import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import java.util.concurrent.CompletableFuture; @@ -95,7 +96,10 @@ void sqsListener() throws InterruptedException, ExecutionException, TimeoutExcep v -> v.startsWith( "http://localhost:" + AwsSqsTestApplication.sqsPort)), - equalTo(AttributeKey.stringKey("aws.queue.name"), "test-queue")), + equalTo(AttributeKey.stringKey("aws.queue.name"), "test-queue"), + satisfies( + AwsIncubatingAttributes.AWS_REQUEST_ID, + val -> val.isInstanceOf(String.class))), span -> span.hasName("test-queue publish") .hasKind(SpanKind.PRODUCER) @@ -129,7 +133,10 @@ void sqsListener() throws InterruptedException, ExecutionException, TimeoutExcep stringKey("aws.queue.url"), "http://localhost:" + AwsSqsTestApplication.sqsPort - + "/000000000000/test-queue")), + + "/000000000000/test-queue"), + satisfies( + AwsIncubatingAttributes.AWS_REQUEST_ID, + val -> val.isInstanceOf(String.class))), span -> span.hasName("test-queue process") .hasKind(SpanKind.CONSUMER) @@ -184,6 +191,9 @@ void sqsListener() throws InterruptedException, ExecutionException, TimeoutExcep stringKey("aws.queue.url"), "http://localhost:" + AwsSqsTestApplication.sqsPort - + "/000000000000/test-queue")))); + + "/000000000000/test-queue"), + satisfies( + AwsIncubatingAttributes.AWS_REQUEST_ID, + val -> val.isInstanceOf(String.class))))); } }