diff --git a/.github/patches/opentelemetry-java-instrumentation.patch b/.github/patches/opentelemetry-java-instrumentation.patch index 45d6bd3c69..6eda0e8374 100644 --- a/.github/patches/opentelemetry-java-instrumentation.patch +++ b/.github/patches/opentelemetry-java-instrumentation.patch @@ -250,23 +250,28 @@ index 0000000000..e890cb3c0f + } +} 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 3e8fddec5c..70e8eeae7f 100644 +index 3e8fddec5c..c0c2bb7de5 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 -@@ -18,6 +18,32 @@ final class AwsExperimentalAttributes { - static final AttributeKey AWS_STREAM_NAME = stringKey("aws.stream.name"); +@@ -19,5 +19,37 @@ final class AwsExperimentalAttributes { static final AttributeKey AWS_TABLE_NAME = stringKey("aws.table.name"); static final AttributeKey AWS_REQUEST_ID = stringKey("aws.requestId"); + + static final AttributeKey AWS_AGENT_ID = stringKey("aws.bedrock.agent.id"); ++ + static final AttributeKey AWS_KNOWLEDGE_BASE_ID = + stringKey("aws.bedrock.knowledge_base.id"); ++ + static final AttributeKey AWS_DATA_SOURCE_ID = stringKey("aws.bedrock.data_source.id"); ++ + static final AttributeKey AWS_GUARDRAIL_ID = stringKey("aws.bedrock.guardrail.id"); ++ + static final AttributeKey AWS_GUARDRAIL_ARN = stringKey("aws.bedrock.guardrail.arn"); + + // TODO: Merge in gen_ai attributes in opentelemetry-semconv-incubating once upgrade to v1.26.0 + static final AttributeKey AWS_BEDROCK_RUNTIME_MODEL_ID = + stringKey("gen_ai.request.model"); ++ + static final AttributeKey AWS_BEDROCK_SYSTEM = stringKey("gen_ai.system"); + + static final AttributeKey AWS_STATE_MACHINE_ARN = @@ -283,11 +288,11 @@ index 3e8fddec5c..70e8eeae7f 100644 + + static final AttributeKey AWS_LAMBDA_RESOURCE_ID = + stringKey("aws.lambda.resource_mapping.id"); - ++ private AwsExperimentalAttributes() {} } 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 245f09a5d8..178579a2b7 100644 +index 245f09a5d8..d2bdf1c987 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 @@ -6,11 +6,23 @@ @@ -332,7 +337,7 @@ index 245f09a5d8..178579a2b7 100644 @Override public void onStart(AttributesBuilder attributes, Context parentContext, Request request) { -@@ -34,21 +51,30 @@ class AwsSdkExperimentalAttributesExtractor +@@ -34,21 +51,29 @@ class AwsSdkExperimentalAttributesExtractor attributes.put(AWS_ENDPOINT, request.getEndpoint().toString()); Object originalRequest = request.getOriginalRequest(); @@ -342,6 +347,15 @@ index 245f09a5d8..178579a2b7 100644 - setRequestAttribute(attributes, AWS_STREAM_NAME, originalRequest, RequestAccess::getStreamName); - setRequestAttribute(attributes, AWS_TABLE_NAME, originalRequest, RequestAccess::getTableName); - } +- +- private static void setRequestAttribute( +- AttributesBuilder attributes, +- AttributeKey key, +- Object request, +- Function getter) { +- String value = getter.apply(request); +- if (value != null) { +- attributes.put(key, value); + String requestClassName = originalRequest.getClass().getSimpleName(); + setAttribute(attributes, AWS_BUCKET_NAME, originalRequest, RequestAccess::getBucketName); + setAttribute(attributes, AWS_QUEUE_URL, originalRequest, RequestAccess::getQueueUrl); @@ -360,15 +374,6 @@ index 245f09a5d8..178579a2b7 100644 + setAttribute(attributes, AWS_LAMBDA_NAME, originalRequest, RequestAccess::getLambdaName); + setAttribute( + attributes, AWS_LAMBDA_RESOURCE_ID, originalRequest, RequestAccess::getLambdaResourceId); - -- private static void setRequestAttribute( -- AttributesBuilder attributes, -- AttributeKey key, -- Object request, -- Function getter) { -- String value = getter.apply(request); -- if (value != null) { -- attributes.put(key, value); + // Get serviceName defined in the AWS Java SDK V1 Request class. + String serviceName = request.getServiceName(); + // Extract request attributes only for Bedrock services. @@ -377,7 +382,7 @@ index 245f09a5d8..178579a2b7 100644 } } -@@ -59,12 +85,118 @@ class AwsSdkExperimentalAttributesExtractor +@@ -59,12 +84,117 @@ class AwsSdkExperimentalAttributesExtractor Request request, @Nullable Response response, @Nullable Throwable error) { @@ -402,15 +407,15 @@ index 245f09a5d8..178579a2b7 100644 + if (requestId != null) { + attributes.put(AWS_REQUEST_ID, requestId); + } - } ++ } + // Get serviceName defined in the AWS Java SDK V1 Request class. + String serviceName = request.getServiceName(); + // Extract response attributes for Bedrock services + if (awsResp != null && isBedrockService(serviceName)) { + bedrockOnEnd(attributes, awsResp, serviceName); -+ } -+ } -+ } + } + } + } + + private static void bedrockOnStart( + AttributesBuilder attributes, @@ -445,7 +450,6 @@ index 245f09a5d8..178579a2b7 100644 + Function getter = RequestAccess::getModelId; + String modelId = getter.apply(originalRequest); + attributes.put(AWS_BEDROCK_RUNTIME_MODEL_ID, modelId); -+ + break; + default: + break; @@ -498,8 +502,8 @@ index 245f09a5d8..178579a2b7 100644 + String value = getter.apply(request); + if (value != null) { + attributes.put(key, value); - } - } ++ } ++ } } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/RequestAccess.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/RequestAccess.java index bb2ae9266c..36e216047f 100644 @@ -750,7 +754,7 @@ index 548631e9f1..51483839a7 100644 // needed for SQS - using emq directly as localstack references emq v0.15.7 ie WITHOUT AWS trace header propagation implementation("org.elasticmq:elasticmq-rest-sqs_2.12:1.0.0") 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 95e6ed8985..613a93fc7b 100644 +index 95e6ed8985..48fb10624e 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 @@ -27,6 +27,24 @@ import com.amazonaws.services.rds.AmazonRDSClientBuilder @@ -786,12 +790,12 @@ index 95e6ed8985..613a93fc7b 100644 import static io.opentelemetry.api.trace.SpanKind.CLIENT import static io.opentelemetry.api.trace.SpanKind.PRODUCER -@@ -156,6 +175,88 @@ abstract class AbstractAws1ClientTest extends InstrumentationSpecification { +@@ -156,6 +175,85 @@ abstract class AbstractAws1ClientTest extends InstrumentationSpecification { """ + "Bedrock" | "GetGuardrail" | "GET" | "/" | -+ AmazonBedrockClientBuilder.standard() | { c -> c.getGuardrail(new GetGuardrailRequest().withGuardrailIdentifier("guardrailId")) } | ["aws.bedrock.guardrail.id":"guardrailId", "aws.bedrock.guardrail.arn": "guardrailArn"] | """ ++ AmazonBedrockClientBuilder.standard() | { c -> c.getGuardrail(new GetGuardrailRequest().withGuardrailIdentifier("guardrailId")) } | ["aws.bedrock.guardrail.id":"guardrailId", "aws.bedrock.guardrail.arn": "guardrailArn"] | """ + { + "blockedInputMessaging": "string", + "blockedOutputsMessaging": "string", @@ -823,10 +827,7 @@ index 95e6ed8985..613a93fc7b 100644 + "AWSBedrockAgent" | "GetKnowledgeBase" | "GET" | "/" | AWSBedrockAgentClientBuilder.standard() | { c -> c.getKnowledgeBase(new GetKnowledgeBaseRequest().withKnowledgeBaseId("knowledgeBaseId")) } | ["aws.bedrock.knowledge_base.id": "knowledgeBaseId"] | "" + "AWSBedrockAgent" | "GetDataSource" | "GET" | "/" | AWSBedrockAgentClientBuilder.standard() | { c -> c.getDataSource(new GetDataSourceRequest().withDataSourceId("datasourceId").withKnowledgeBaseId("knowledgeBaseId")) } | ["aws.bedrock.data_source.id": "datasourceId"] | "" + "BedrockRuntime" | "InvokeModel" | "POST" | "/" | AmazonBedrockRuntimeClientBuilder.standard() | -+ { c -> c.invokeModel( -+ new InvokeModelRequest().withModelId("anthropic.claude-v2").withBody(StandardCharsets.UTF_8.encode( -+ "{\"prompt\":\"Hello, world!\",\"temperature\":0.7,\"top_p\":0.9,\"max_tokens_to_sample\":100}\n" -+ ))) } | ["gen_ai.request.model": "anthropic.claude-v2", "gen_ai.system": "aws_bedrock"] | """ ++ { c -> c.invokeModel(new InvokeModelRequest().withModelId("anthropic.claude-v2").withBody(StandardCharsets.UTF_8.encode("{\"prompt\":\"Hello, world!\",\"temperature\":0.7,\"top_p\":0.9,\"max_tokens_to_sample\":100}\n"))) } | ["gen_ai.request.model": "anthropic.claude-v2", "gen_ai.system": "aws_bedrock"] | """ + { + "completion": " Here is a simple explanation of black ", + "stop_reason": "length", @@ -834,17 +835,17 @@ index 95e6ed8985..613a93fc7b 100644 + } + """ + "AWSStepFunctions" | "DescribeStateMachine" | "POST" | "/" | AWSStepFunctionsClientBuilder.standard() -+ | { c -> c.describeStateMachine(new DescribeStateMachineRequest().withStateMachineArn("stateMachineArn")) } -+ | ["aws.stepfunctions.state_machine.arn": "stateMachineArn"] -+ | "" ++ | { c -> c.describeStateMachine(new DescribeStateMachineRequest().withStateMachineArn("stateMachineArn")) } ++ | ["aws.stepfunctions.state_machine.arn": "stateMachineArn"] ++ | "" + "AWSStepFunctions" | "DescribeActivity" | "POST" | "/" | AWSStepFunctionsClientBuilder.standard() -+ | { c -> c.describeActivity(new DescribeActivityRequest().withActivityArn("activityArn")) } -+ | ["aws.stepfunctions.activity.arn": "activityArn"] -+ | "" ++ | { c -> c.describeActivity(new DescribeActivityRequest().withActivityArn("activityArn")) } ++ | ["aws.stepfunctions.activity.arn": "activityArn"] ++ | "" + "SNS" | "Publish" | "POST" | "/" | AmazonSNSClientBuilder.standard() -+ | { c -> c.publish(new PublishRequest().withMessage("message").withTopicArn("topicArn")) } -+ | ["aws.sns.topic.arn": "topicArn"] -+ | """ ++ | { c -> c.publish(new PublishRequest().withMessage("message").withTopicArn("topicArn")) } ++ | ["aws.sns.topic.arn": "topicArn"] ++ | """ + + + 567910cd-659e-55d4-8ccb-5aaf14679dc0 @@ -855,9 +856,9 @@ index 95e6ed8985..613a93fc7b 100644 + + """ + "AWSSecretsManager" | "CreateSecret" | "POST" | "/" | AWSSecretsManagerClientBuilder.standard() -+ | { c -> c.createSecret(new CreateSecretRequest().withName("secretName").withSecretString("secretValue")) } -+ | ["aws.secretsmanager.secret.arn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3"] -+ | """ ++ | { c -> c.createSecret(new CreateSecretRequest().withName("secretName").withSecretString("secretValue")) } ++ | ["aws.secretsmanager.secret.arn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3"] ++ | """ + { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name":"MyTestDatabaseSecret", @@ -865,18 +866,18 @@ index 95e6ed8985..613a93fc7b 100644 + } + """ + "AWSLambda" | "GetEventSourceMapping" | "GET" | "/" | AWSLambdaClientBuilder.standard() -+ | { c -> c.getEventSourceMapping(new GetEventSourceMappingRequest().withUUID("uuid")) } -+ | ["aws.lambda.resource_mapping.id": "uuid"] -+ | "" ++ | { c -> c.getEventSourceMapping(new GetEventSourceMappingRequest().withUUID("uuid")) } ++ | ["aws.lambda.resource_mapping.id": "uuid"] ++ | "" + "AWSLambda" | "GetFunction" | "GET" | "/" | AWSLambdaClientBuilder.standard() -+ | { c-> c.getFunction(new GetFunctionRequest().withFunctionName("functionName")) } -+ | ["aws.lambda.function.name": "functionName"] -+ | "" ++ | { c-> c.getFunction(new GetFunctionRequest().withFunctionName("functionName")) } ++ | ["aws.lambda.function.name": "functionName"] ++ | "" } def "send #operation request to closed port"() { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts -index 8f442b268b..24c14dec4e 100644 +index 3b6efbd696..9f4487d727 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts @@ -84,6 +84,9 @@ dependencies { @@ -886,11 +887,11 @@ index 8f442b268b..24c14dec4e 100644 + testLibrary("software.amazon.awssdk:sfn:2.2.0") + testLibrary("software.amazon.awssdk:secretsmanager:2.2.0") + testLibrary("software.amazon.awssdk:lambda:2.2.0") + } - // last version that does not use json protocol - latestDepTestLibrary("software.amazon.awssdk:sqs:2.21.17") + val latestDepTest = findProperty("testLatestDeps") as Boolean diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts -index e73abc7bc3..d387a7472c 100644 +index 6e0ea36a64..68b9c72b7d 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts @@ -21,6 +21,9 @@ dependencies { @@ -900,11 +901,11 @@ index e73abc7bc3..d387a7472c 100644 + testLibrary("software.amazon.awssdk:sfn:2.2.0") + testLibrary("software.amazon.awssdk:secretsmanager:2.2.0") + testLibrary("software.amazon.awssdk:lambda:2.2.0") + } - // last version that does not use json protocol - latestDepTestLibrary("software.amazon.awssdk:sqs:2.21.17") + tasks { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts -index 081d542e76..4f71a06a57 100644 +index 862df156ae..2ed33d6f03 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts @@ -19,6 +19,9 @@ dependencies { @@ -914,9 +915,9 @@ index 081d542e76..4f71a06a57 100644 + testLibrary("software.amazon.awssdk:sfn:2.2.0") + testLibrary("software.amazon.awssdk:secretsmanager:2.2.0") + testLibrary("software.amazon.awssdk:lambda:2.2.0") + } - // last version that does not use json protocol - latestDepTestLibrary("software.amazon.awssdk:sqs:2.21.17") + testing { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsExperimentalAttributes.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsExperimentalAttributes.java new file mode 100644 index 0000000000..e1cb180d75 @@ -971,7 +972,7 @@ index 0000000000..e1cb180d75 + private AwsExperimentalAttributes() {} +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java -index 54253d0f7b..5326400f7e 100644 +index 54253d0f7b..2374bd4a52 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java @@ -5,10 +5,20 @@ @@ -995,10 +996,11 @@ index 54253d0f7b..5326400f7e 100644 import static io.opentelemetry.instrumentation.awssdk.v2_2.FieldMapping.request; import static io.opentelemetry.instrumentation.awssdk.v2_2.FieldMapping.response; -@@ -32,6 +42,49 @@ enum AwsSdkRequest { +@@ -32,6 +42,54 @@ enum AwsSdkRequest { S3Request(S3, "S3Request"), SqsRequest(SQS, "SqsRequest"), KinesisRequest(KINESIS, "KinesisRequest"), ++ + BedrockRequest(BEDROCK, "BedrockRequest"), + BedrockAgentRuntimeRequest(BEDROCKAGENTRUNTIMEOPERATION, "BedrockAgentRuntimeRequest"), + BedrockRuntimeRequest(BEDROCKRUNTIME, "BedrockRuntimeRequest"), @@ -1038,18 +1040,22 @@ index 54253d0f7b..5326400f7e 100644 + BedrockListDataSourcesRequest(BEDROCKKNOWLEDGEBASEOPERATION, "ListDataSourcesRequest"), + BedrockUpdateAgentKnowledgeBaseRequest( + BEDROCKKNOWLEDGEBASEOPERATION, "UpdateAgentKnowledgeBaseRequest"), ++ + SfnRequest(STEPFUNCTION, "SfnRequest"), ++ + SnsRequest(SNS, "SnsRequest"), ++ + SecretsManagerRequest(SECRETSMANAGER, "SecretsManagerRequest"), ++ + LambdaRequest(LAMBDA, "LambdaRequest"), // specific requests BatchGetItem( DYNAMODB, diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java -index 9062f2aa17..9511cd6f05 100644 +index 9062f2aa17..1c34035588 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java -@@ -5,17 +5,62 @@ +@@ -5,17 +5,69 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; @@ -1084,9 +1090,13 @@ index 9062f2aa17..9511cd6f05 100644 - KINESIS(request("aws.stream.name", "StreamName")), - DYNAMODB(request("aws.table.name", "TableName")); + S3(request(AWS_BUCKET_NAME.getKey(), "Bucket")), ++ + SQS(request(AWS_QUEUE_URL.getKey(), "QueueUrl"), request(AWS_QUEUE_NAME.getKey(), "QueueName")), ++ + KINESIS(request(AWS_STREAM_NAME.getKey(), "StreamName")), ++ + DYNAMODB(request(AWS_TABLE_NAME.getKey(), "TableName")), ++ + BEDROCK( + request(AWS_GUARDRAIL_ID.getKey(), "guardrailIdentifier"), + response(AWS_GUARDRAIL_ARN.getKey(), "guardrailArn")), @@ -1107,8 +1117,11 @@ index 9062f2aa17..9511cd6f05 100644 + STEPFUNCTION( + request(AWS_STATE_MACHINE_ARN.getKey(), "stateMachineArn"), + request(AWS_STEP_FUNCTIONS_ACTIVITY_ARN.getKey(), "activityArn")), ++ + SNS(request(AWS_SNS_TOPIC_ARN.getKey(), "TopicArn")), ++ + SECRETSMANAGER(response(AWS_SECRET_ARN.getKey(), "ARN")), ++ + LAMBDA( + request(AWS_LAMBDA_NAME.getKey(), "FunctionName"), + request(AWS_LAMBDA_RESOURCE_ID.getKey(), "UUID"), @@ -1149,7 +1162,7 @@ index f717b1efc4..352b02093e 100644 @Override diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts -index 2a7f14d14b..584b8dda6c 100644 +index 9981aa9a19..1caed55e62 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts @@ -19,6 +19,9 @@ dependencies { @@ -1161,12 +1174,12 @@ index 2a7f14d14b..584b8dda6c 100644 + compileOnly("software.amazon.awssdk:secretsmanager:2.2.0") // needed for SQS - using emq directly as localstack references emq v0.15.7 ie WITHOUT AWS trace header propagation - implementation("org.elasticmq:elasticmq-rest-sqs_2.12:1.0.0") + implementation("org.elasticmq:elasticmq-rest-sqs_2.13:1.5.1") 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 53390c8d85..692cd005eb 100644 +index 7c152bb91b..b30b8fa2c7 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 -@@ -33,8 +33,19 @@ import software.amazon.awssdk.services.sqs.SqsAsyncClient +@@ -35,6 +35,16 @@ import software.amazon.awssdk.services.sqs.SqsAsyncClient import software.amazon.awssdk.services.sqs.SqsClient import software.amazon.awssdk.services.sqs.model.CreateQueueRequest import software.amazon.awssdk.services.sqs.model.SendMessageRequest @@ -1182,11 +1195,8 @@ index 53390c8d85..692cd005eb 100644 +import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest import spock.lang.Unroll -+ - import java.time.Duration - import java.util.concurrent.Future - -@@ -120,7 +131,31 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { + import java.nio.charset.StandardCharsets +@@ -144,6 +154,29 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { "$SemanticAttributes.MESSAGING_SYSTEM" "AmazonSQS" } else if (service == "Kinesis") { "aws.stream.name" "somestream" @@ -1214,29 +1224,27 @@ index 53390c8d85..692cd005eb 100644 + } else if (service == "SecretsManager") { + "aws.secretsmanager.secret.arn" "someSecretArn" } -+ } } - } -@@ -162,6 +197,41 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { +@@ -218,6 +251,41 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { 0ac9cda2-bbf4-11d3-f92b-31fa5e8dbc99 """ + "Sfn" | "DescribeStateMachine" | "POST" | "UNKNOWN" | SfnClient.builder() -+ | { c -> c.describeStateMachine(DescribeStateMachineRequest.builder().stateMachineArn("stateMachineArn").build()) } -+ | "" ++ | { c -> c.describeStateMachine(DescribeStateMachineRequest.builder().stateMachineArn("stateMachineArn").build()) } ++ | "" + "Sfn" | "DescribeActivity" | "POST" | "UNKNOWN" | SfnClient.builder() -+ | { c -> c.describeActivity(DescribeActivityRequest.builder().activityArn("activityArn").build()) } -+ | "" ++ | { c -> c.describeActivity(DescribeActivityRequest.builder().activityArn("activityArn").build()) } ++ | "" + "Lambda" | "GetFunction" | "GET" | "UNKNOWN" | LambdaClient.builder() -+ | { c -> c.getFunction(GetFunctionRequest.builder().functionName("functionName").build()) } -+ | "" ++ | { c -> c.getFunction(GetFunctionRequest.builder().functionName("functionName").build()) } ++ | "" + "Lambda" | "GetEventSourceMapping" | "GET" |"UNKNOWN" | LambdaClient.builder() -+ | { c -> c.getEventSourceMapping(GetEventSourceMappingRequest.builder().uuid("sourceEventId").build()) } -+ | "" ++ | { c -> c.getEventSourceMapping(GetEventSourceMappingRequest.builder().uuid("sourceEventId").build()) } ++ | "" + "Sns" | "Publish" | "POST" | "d74b8436-ae13-5ab4-a9ff-ce54dfea72a0" | SnsClient.builder() -+ | { c -> c.publish(PublishRequest.builder().topicArn("topicArn").message("message").build()) } -+ | """ ++ | { c -> c.publish(PublishRequest.builder().topicArn("topicArn").message("message").build()) } ++ | """ + + + 567910cd-659e-55d4-8ccb-5aaf14679dc0 @@ -1247,8 +1255,8 @@ index 53390c8d85..692cd005eb 100644 + + """ + "SecretsManager" | "GetSecretValue" | "POST" | "UNKNOWN" | SecretsManagerClient.builder() -+ | { c -> c.getSecretValue(GetSecretValueRequest.builder().secretId("someSecret1").build()) } -+ | """ ++ | { c -> c.getSecretValue(GetSecretValueRequest.builder().secretId("someSecret1").build()) } ++ | """ + { + "ARN":"someSecretArn", + "CreatedDate":1.523477145713E9, @@ -1345,14 +1353,14 @@ index 8b0fd636be..b9856f1dc9 100644 exec.schedule( new Runnable() { diff --git a/version.gradle.kts b/version.gradle.kts -index fdf57bdbea..c38a2e00f3 100644 +index 5217d396e2..66cc8ecb2a 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -1,5 +1,5 @@ --val stableVersion = "1.32.1" --val alphaVersion = "1.32.1-alpha" -+val stableVersion = "1.32.1-adot2" -+val alphaVersion = "1.32.1-adot2-alpha" +-val stableVersion = "1.33.6" +-val alphaVersion = "1.33.6-alpha" ++val stableVersion = "1.33.6-adot1" ++val alphaVersion = "1.33.6-adot1-alpha" allprojects { if (findProperty("otel.stable") != "true") { diff --git a/.github/patches/versions b/.github/patches/versions index 5ea226511e..46fc43aaa1 100644 --- a/.github/patches/versions +++ b/.github/patches/versions @@ -1 +1 @@ -OTEL_JAVA_INSTRUMENTATION_VERSION=v1.32.1 \ No newline at end of file +OTEL_JAVA_INSTRUMENTATION_VERSION=v1.33.6 \ No newline at end of file diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index 8248c3d26f..07f8b29fa2 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -194,7 +194,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' - uses: gradle/wrapper-validation-action@v1 @@ -219,7 +219,7 @@ jobs: key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} - name: Pull base image of Contract Tests Sample Apps - run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine + run: docker pull public.ecr.aws/docker/library/amazoncorretto:21-alpine - name: Build snapshot with Gradle uses: gradle/gradle-build-action@v3 diff --git a/.github/workflows/nightly-upstream-snapshot-build.yml b/.github/workflows/nightly-upstream-snapshot-build.yml index ec7c607354..a364358265 100644 --- a/.github/workflows/nightly-upstream-snapshot-build.yml +++ b/.github/workflows/nightly-upstream-snapshot-build.yml @@ -120,7 +120,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' - uses: gradle/wrapper-validation-action@v1 @@ -136,7 +136,7 @@ jobs: registry: public.ecr.aws - name: Pull base image of Contract Tests Sample Apps - run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine + run: docker pull public.ecr.aws/docker/library/amazoncorretto:21-alpine - name: Build snapshot with Gradle uses: gradle/gradle-build-action@v3 diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 38989dc65c..9e47a15bce 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -81,9 +81,15 @@ jobs: with: arguments: build integrationTests --stacktrace -PenableCoverage=true -PlocalDocker=true + - name: Set up Java version for tests + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: temurin + - name: Pull base image of Contract Tests Sample Apps if: ${{ matrix.os == 'ubuntu-latest' }} - run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine + run: docker pull public.ecr.aws/docker/library/amazoncorretto:21-alpine - name: Run contract tests uses: gradle/gradle-build-action@v3 @@ -91,6 +97,12 @@ jobs: with: arguments: contractTests -PlocalDocker=true -i + - name: Set up Java version for image build + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - name: Get current version if: ${{ matrix.os == 'ubuntu-latest' }} shell: bash diff --git a/appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts b/appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts index 77fad5427c..4aa5ea57a0 100644 --- a/appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts +++ b/appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts @@ -57,7 +57,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-aws-sdk-v1", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/aws-sdk/aws-sdk-v2/build.gradle.kts b/appsignals-tests/images/aws-sdk/aws-sdk-v2/build.gradle.kts index 0ba17450d6..ee5e4b9105 100644 --- a/appsignals-tests/images/aws-sdk/aws-sdk-v2/build.gradle.kts +++ b/appsignals-tests/images/aws-sdk/aws-sdk-v2/build.gradle.kts @@ -57,7 +57,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-aws-sdk-v2", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/grpc/grpc-client/build.gradle.kts b/appsignals-tests/images/grpc/grpc-client/build.gradle.kts index 9b529bb23f..c113cb447c 100644 --- a/appsignals-tests/images/grpc/grpc-client/build.gradle.kts +++ b/appsignals-tests/images/grpc/grpc-client/build.gradle.kts @@ -41,7 +41,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "grpc-client", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/grpc/grpc-server/build.gradle.kts b/appsignals-tests/images/grpc/grpc-server/build.gradle.kts index 73be8257d2..a7e0728029 100644 --- a/appsignals-tests/images/grpc/grpc-server/build.gradle.kts +++ b/appsignals-tests/images/grpc/grpc-server/build.gradle.kts @@ -46,7 +46,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "grpc-server", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/http-clients/apache-http-client/build.gradle.kts b/appsignals-tests/images/http-clients/apache-http-client/build.gradle.kts index 8315cf4bdc..5ba716f7c1 100644 --- a/appsignals-tests/images/http-clients/apache-http-client/build.gradle.kts +++ b/appsignals-tests/images/http-clients/apache-http-client/build.gradle.kts @@ -43,7 +43,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-apache-http-client-app", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/http-clients/native-http-client/build.gradle.kts b/appsignals-tests/images/http-clients/native-http-client/build.gradle.kts index 127a3787f9..2827da3637 100644 --- a/appsignals-tests/images/http-clients/native-http-client/build.gradle.kts +++ b/appsignals-tests/images/http-clients/native-http-client/build.gradle.kts @@ -42,7 +42,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-native-http-client-app", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/http-clients/netty-http-client/build.gradle.kts b/appsignals-tests/images/http-clients/netty-http-client/build.gradle.kts index 37813f7a0a..ac481d4769 100644 --- a/appsignals-tests/images/http-clients/netty-http-client/build.gradle.kts +++ b/appsignals-tests/images/http-clients/netty-http-client/build.gradle.kts @@ -43,7 +43,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-netty-http-client-app", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/http-clients/spring-mvc-client/build.gradle.kts b/appsignals-tests/images/http-clients/spring-mvc-client/build.gradle.kts index 08a644c838..4235fa0d54 100644 --- a/appsignals-tests/images/http-clients/spring-mvc-client/build.gradle.kts +++ b/appsignals-tests/images/http-clients/spring-mvc-client/build.gradle.kts @@ -39,7 +39,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-spring-mvc-client-app", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/http-servers/netty-server/build.gradle.kts b/appsignals-tests/images/http-servers/netty-server/build.gradle.kts index e017e85e4d..307ab89146 100644 --- a/appsignals-tests/images/http-servers/netty-server/build.gradle.kts +++ b/appsignals-tests/images/http-servers/netty-server/build.gradle.kts @@ -42,7 +42,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-http-server-netty-server", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/http-servers/spring-mvc/build.gradle.kts b/appsignals-tests/images/http-servers/spring-mvc/build.gradle.kts index e39d7ff7d6..5ed341d6f6 100644 --- a/appsignals-tests/images/http-servers/spring-mvc/build.gradle.kts +++ b/appsignals-tests/images/http-servers/spring-mvc/build.gradle.kts @@ -41,7 +41,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-http-server-spring-mvc", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/http-servers/tomcat/build.gradle.kts b/appsignals-tests/images/http-servers/tomcat/build.gradle.kts index a97ed1ab6c..1ff2464e5b 100644 --- a/appsignals-tests/images/http-servers/tomcat/build.gradle.kts +++ b/appsignals-tests/images/http-servers/tomcat/build.gradle.kts @@ -44,7 +44,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-http-server-tomcat", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/jdbc/build.gradle.kts b/appsignals-tests/images/jdbc/build.gradle.kts index 983992c7cb..073f6d4c40 100644 --- a/appsignals-tests/images/jdbc/build.gradle.kts +++ b/appsignals-tests/images/jdbc/build.gradle.kts @@ -45,7 +45,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-jdbc-app", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts b/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts index 29fc199788..91ef8a7528 100644 --- a/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts +++ b/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts @@ -47,7 +47,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-kafka-kafka-consumers", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts b/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts index ffc26bb0c2..a7e0b98f08 100644 --- a/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts +++ b/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts @@ -47,7 +47,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-tests-kafka-kafka-producers", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/appsignals-tests/images/mock-collector/build.gradle.kts b/appsignals-tests/images/mock-collector/build.gradle.kts index 5b9883299c..16c1715b81 100644 --- a/appsignals-tests/images/mock-collector/build.gradle.kts +++ b/appsignals-tests/images/mock-collector/build.gradle.kts @@ -42,7 +42,7 @@ tasks { } jib { configureImages( - "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "public.ecr.aws/docker/library/amazoncorretto:21-alpine", "aws-appsignals-mock-collector", localDocker = rootProject.property("localDocker")!! == "true", multiPlatform = false, diff --git a/awsagentprovider/build.gradle.kts b/awsagentprovider/build.gradle.kts index e052e5eb47..3d3b76a15b 100644 --- a/awsagentprovider/build.gradle.kts +++ b/awsagentprovider/build.gradle.kts @@ -51,8 +51,8 @@ dependencies { testRuntimeOnly("io.opentelemetry:opentelemetry-exporter-otlp-common") compileOnly("com.google.code.findbugs:jsr305:3.0.2") - testImplementation("org.mockito:mockito-core:5.3.1") - testImplementation("org.mockito:mockito-junit-jupiter:5.8.0") + testImplementation("org.mockito:mockito-core:5.14.2") + testImplementation("org.mockito:mockito-junit-jupiter:5.14.2") } tasks { diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/UdpExporterTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/UdpExporterTest.java index 1494b30c98..2a1cea7106 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/UdpExporterTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/UdpExporterTest.java @@ -129,7 +129,9 @@ private SpanData buildSpanDataMock() { when(mockSpanData.getParentSpanContext()).thenReturn(parentSpanContextMock); SpanContext spanContextMock = mock(SpanContext.class); + TraceFlags spanContextTraceFlagsMock = mock(TraceFlags.class); when(spanContextMock.isValid()).thenReturn(true); + when(spanContextMock.getTraceFlags()).thenReturn(spanContextTraceFlagsMock); when(mockSpanData.getSpanContext()).thenReturn(spanContextMock); TraceState traceState = TraceState.builder().build(); diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 590ea7f35f..6394ab93c8 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -27,8 +27,8 @@ data class DependencySet(val group: String, val version: String, val modules: Li val TEST_SNAPSHOTS = rootProject.findProperty("testUpstreamSnapshots") == "true" // This is the version of the upstream instrumentation BOM -val otelVersion = "1.32.1-adot2" -val otelSnapshotVersion = "1.33.0" +val otelVersion = "1.33.6-adot1" +val otelSnapshotVersion = "1.33.6" val otelAlphaVersion = if (!TEST_SNAPSHOTS) "$otelVersion-alpha" else "$otelSnapshotVersion-alpha-SNAPSHOT" val otelJavaAgentVersion = if (!TEST_SNAPSHOTS) otelVersion else "$otelSnapshotVersion-SNAPSHOT" // All versions below are only used in testing and do not affect the released artifact. @@ -73,10 +73,11 @@ val DEPENDENCIES = listOf( "commons-logging:commons-logging:1.2", "com.sparkjava:spark-core:2.9.4", "com.squareup.okhttp3:okhttp:4.12.0", - "io.opentelemetry.contrib:opentelemetry-aws-xray:1.32.0", - "io.opentelemetry.contrib:opentelemetry-aws-resources:1.32.0-alpha", + "io.opentelemetry.contrib:opentelemetry-aws-xray:1.39.0", + "io.opentelemetry.contrib:opentelemetry-aws-resources:1.39.0-alpha", "io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha", "io.opentelemetry.javaagent:opentelemetry-javaagent:$otelJavaAgentVersion", + "io.opentelemetry:opentelemetry-extension-aws:1.20.1", "net.bytebuddy:byte-buddy:1.14.10", ) diff --git a/scripts/docker/corretto-slim/Dockerfile b/scripts/docker/corretto-slim/Dockerfile index b9c97e3781..5303d4d2c0 100644 --- a/scripts/docker/corretto-slim/Dockerfile +++ b/scripts/docker/corretto-slim/Dockerfile @@ -1,4 +1,4 @@ -FROM public.ecr.aws/docker/library/amazoncorretto:17-alpine-jdk +FROM public.ecr.aws/docker/library/amazoncorretto:21-alpine-jdk # Copied from https://github.com/corretto/corretto-docker/blob/master/11/jre/alpine/Dockerfile RUN apk update && apk add binutils && jlink --endian little --release-info $JAVA_HOME/release \