Skip to content

Commit f604e22

Browse files
authored
Onboarding ADOT Java to v2.x - with otel v2.10.0 (#975)
*Description of changes:* Onboarding ADOT Java to v2.x, with the latest `opentelemetry-java-instrumentation` dependency version `v2.10.0`. Update the workflows, adot core implementation codes, contract tests and smoke tests with following change: **A. Workflows:** 1. Update `.github/patches/opentelemetry-java-instrumentation.patch` file with the same code change as previous patch based on upstream v2.10.0. 2. Upgrade contract testing build env with JDK 23. **B. Core repo:** 1. Upgrade `com.github.johnrengelman.shadow` to `com.gradleup.shadow` as it has been marked under maintenance mode: https://github.com/GradleUp/shadow?tab=readme-ov-file#gradle-shadow 2. Upgrade to new ktlint version 1.4.0, and apply latest spotless format. 3. Upgrade gradle to 8.10 4. Upgrade `com.diffplug.spotless` to newer version 6.25.0 5. Upgrade `com.google.cloud.tools.jib` to newer version 3.4.4 6. Update the unit test to check the migrated semantic conventions. 7. AWS Resource detector is [set as disabled by default](open-telemetry/opentelemetry-java-instrumentation#10754), enable it by setting environment variable `"otel.resource.providers.aws.enabled"` to be `true`. **C. Contract tests:** 1. Use the latest `kotlin("jvm")` version to be compatible if the new Java class from upstream. 2. Add `OTEL_EXPORTER_OTLP_PROTOCOL` to `grpc` for instrumentation as in [version v2.0.0](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/tag/v2.0.0): > The default OTLP protocol has been changed from grpc to http/protobuf in orderto align with the specification. 3. Update tomcat contract test `TOMCAT_THREADS` metric threshold to `-2`, as the value can be negative by [tomcat design](https://github.com/apache/tomcat/blob/1afe41491f0e56ec0a776db5ff84607f87ce6640/java/org/apache/tomcat/util/net/AbstractEndpoint.java#L1204). 4. Update the test classes to migrate to the new semantic conventions to match with [upstream latest change](open-telemetry/opentelemetry-java-instrumentation@7cd705b): a. All the change made in #972: `http.url` -> `url.full` `http.method` -> `http.request.method` `http.status_code` -> `http.response.status_code` `net.peer.name` -> `server.address` `net.peer.port` -> `server.port` b. extra semantic conventions included in contract tests: `http.scheme` -> `url.scheme` `http.target` -> `url.query` `http.url` -> `url.full` `net.host.name` -> `server.address` `net.host.port` -> `server.port` `net.peer.name` -> `server.address` `net.peer.port` -> `server.port` `net.protocol.name` -> `network.protocol.name` `net.protocol.version` -> `network.protocol.version` `net.sock.host.addr` -> `network.local.address` `net.sock.host.port` -> `network.local.port` `net.sock.peer.addr` -> `network.peer.address` `net.sock.peer.name` -> no replacement, removed `messaging.kafka.destination.partition` -> `messaging.destination.partition.id` `messaging.message.payload_size_bytes` -> `messaging.message.body.size` Remove `network.protocol.name` attribute check as it has marked as Conditionally required if not http and network.protocol.version is set: https://opentelemetry.io/blog/2023/http-conventions-declared-stable/#summary-of-changes. Conditionally check `peer.service` for http client. Match with PR: https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/12083/files Remove local socket attributes from http server span check as it is not extracted from HttpServerAttributesExtractor [code](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/5ebb81b8a8ac0e5b3c9f2e175b847a3d0b12251f/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HttpServerAttributesExtractorBuilder.java#L141), Remove `http.response.header.content_length` as it need an explicit configuration: https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-response-header **D. Smoke tests** Enable controller telemetry using env variable `OTEL_INSTRUMENTATION_COMMON_EXPERIMENTAL_CONTROLLER_TELEMETRY_ENABLED`, which is disabled by default. https://opentelemetry.io/docs/zero-code/java/agent/disable/#suppressing-controller-andor-view-spans **Testing:** 1. All contract tests and smoke tests passed. 2. All workflow passed. 3. Tested all E2E tests (This E2E test PR need to be merged after ADOT Java v2.x released): - EC2: https://github.com/aws-observability/aws-application-signals-test-framework/actions/runs/12378967612 - EKS: https://github.com/aws-observability/aws-application-signals-test-framework/actions/runs/12382416662 - K8S: https://github.com/aws-observability/aws-application-signals-test-framework/actions/runs/12378972156 - ECS: https://github.com/aws-observability/aws-application-signals-test-framework/actions/runs/12378968843 4. Audit all upstream v2.0.0 - v2.10.0 [change logs](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases) and manual did E2E test and compared the traces, logs, metrics for Java v1.x vs Java v2.x: ![Screenshot 2024-12-16 at 3 27 02 PM](https://github.com/user-attachments/assets/52bb9106-b4a1-4223-9df5-74f1f1b10089) By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 448d680 commit f604e22

File tree

63 files changed

+2229
-690
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2229
-690
lines changed

.github/patches/opentelemetry-java-instrumentation.patch

Lines changed: 1818 additions & 432 deletions
Large diffs are not rendered by default.

.github/patches/versions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
OTEL_JAVA_INSTRUMENTATION_VERSION=v1.33.6
1+
OTEL_JAVA_INSTRUMENTATION_VERSION=v2.10.0

.github/workflows/docker-build-smoke-tests-fake-backend.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ jobs:
2525
with:
2626
java-version: 17
2727
distribution: 'temurin'
28+
# cache local patch outputs
29+
- name: Cache local Maven repository
30+
uses: actions/cache@v3
31+
with:
32+
path: |
33+
~/.m2/repository/io/opentelemetry/
34+
key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }}
35+
36+
- name: Publish patched dependencies to maven local
37+
uses: ./.github/actions/patch-dependencies
38+
with:
39+
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
40+
gpg_password: ${{ secrets.GPG_PASSPHRASE }}
2841
- uses: gradle/wrapper-validation-action@v1
2942
- name: Configure AWS Credentials
3043
uses: aws-actions/configure-aws-credentials@v4

.github/workflows/main-build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ jobs:
194194
fetch-depth: 0
195195
- uses: actions/setup-java@v4
196196
with:
197-
java-version: 21
197+
java-version: 23
198198
distribution: 'temurin'
199199
- uses: gradle/wrapper-validation-action@v1
200200

@@ -219,7 +219,7 @@ jobs:
219219
key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }}
220220

221221
- name: Pull base image of Contract Tests Sample Apps
222-
run: docker pull public.ecr.aws/docker/library/amazoncorretto:21-alpine
222+
run: docker pull public.ecr.aws/docker/library/amazoncorretto:23-alpine
223223

224224
- name: Build snapshot with Gradle
225225
uses: gradle/gradle-build-action@v3

.github/workflows/nightly-upstream-snapshot-build.yml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ jobs:
3232
java-version: 17
3333
distribution: 'temurin'
3434

35+
# cache local patch outputs
36+
- name: Cache local Maven repository
37+
uses: actions/cache@v3
38+
with:
39+
path: |
40+
~/.m2/repository/io/opentelemetry/
41+
key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }}
42+
43+
- name: Publish patched dependencies to maven local
44+
uses: ./.github/actions/patch-dependencies
45+
with:
46+
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
47+
gpg_password: ${{ secrets.GPG_PASSPHRASE }}
48+
3549
- uses: gradle/wrapper-validation-action@v1
3650

3751
- name: Configure AWS Credentials
@@ -120,7 +134,7 @@ jobs:
120134
fetch-depth: 0
121135
- uses: actions/setup-java@v4
122136
with:
123-
java-version: 21
137+
java-version: 23
124138
distribution: 'temurin'
125139
- uses: gradle/wrapper-validation-action@v1
126140

@@ -136,7 +150,7 @@ jobs:
136150
registry: public.ecr.aws
137151

138152
- name: Pull base image of Contract Tests Sample Apps
139-
run: docker pull public.ecr.aws/docker/library/amazoncorretto:21-alpine
153+
run: docker pull public.ecr.aws/docker/library/amazoncorretto:23-alpine
140154

141155
- name: Build snapshot with Gradle
142156
uses: gradle/gradle-build-action@v3

.github/workflows/patch-release-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ on:
1212

1313
env:
1414
AWS_DEFAULT_REGION: us-east-1
15-
TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test
15+
TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test-v2
1616

1717
permissions:
1818
id-token: write

.github/workflows/pr-build.yml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
- main
66
- "release/v*"
77
env:
8-
TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test
8+
TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test-v2
99

1010
jobs:
1111
testpatch:
@@ -63,6 +63,13 @@ jobs:
6363

6464
- uses: gradle/wrapper-validation-action@v1
6565

66+
# Cleanup directories before proceeding with setup
67+
- name: Clean up old installations
68+
if: ${{ matrix.os != 'windows-latest' }}
69+
run: |
70+
sudo rm -rf /usr/local/lib/android
71+
sudo rm -rf /usr/share/dotnet
72+
6673
# cache local patch outputs
6774
- name: Cache local Maven repository
6875
uses: actions/cache@v3
@@ -84,12 +91,12 @@ jobs:
8491
- name: Set up Java version for tests
8592
uses: actions/setup-java@v4
8693
with:
87-
java-version: 21
94+
java-version: 23
8895
distribution: temurin
8996

9097
- name: Pull base image of Contract Tests Sample Apps
9198
if: ${{ matrix.os == 'ubuntu-latest' }}
92-
run: docker pull public.ecr.aws/docker/library/amazoncorretto:21-alpine
99+
run: docker pull public.ecr.aws/docker/library/amazoncorretto:23-alpine
93100

94101
- name: Run contract tests
95102
uses: gradle/gradle-build-action@v3

.github/workflows/release-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99
env:
1010
AWS_PUBLIC_ECR_REGION: us-east-1
1111
AWS_PRIVATE_ECR_REGION: us-west-2
12-
TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test
12+
TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test-v2
1313
PUBLIC_REPOSITORY: public.ecr.aws/aws-observability/adot-autoinstrumentation-java
1414
PRIVATE_REPOSITORY: 020628701572.dkr.ecr.us-west-2.amazonaws.com/adot-autoinstrumentation-java
1515
PRIVATE_REGISTRY: 020628701572.dkr.ecr.us-west-2.amazonaws.com

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ can be exported in a variety of formats. In addition, the agent and exporter can
1313
command line arguments or environment variables. The net result is the ability to gather telemetry
1414
data from a Java application without any code changes.
1515

16+
Note: There are 2.x releases and 1.x releases. The 2.0 release included significant breaking changes from [OpenTelemetry Agent for Java](https://github.com/open-telemetry/opentelemetry-java-instrumentation),
17+
the details of which can be found in the [release notes](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases).
18+
It is recommended to use the latest 2.x release which will have the latest features and improvements.
19+
1.x will receive security patches for a limited time and will not include other bug fixes and enhancements.
20+
1621
## Getting Started
1722

1823
Check out the [getting started documentation](https://aws-otel.github.io/docs/getting-started/java-sdk/auto-instr).
@@ -45,4 +50,4 @@ In addition to the sample apps in this repository, there are also a set of [stan
4550
Please note that as per policy, we're providing support via GitHub on a best effort basis. However, if you have AWS Enterprise Support you can create a ticket and we will provide direct support within the respective SLAs.
4651

4752
## Security issue notifications
48-
If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue.
53+
If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue.

appsignals-tests/contract-tests/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
3333

3434
plugins {
3535
java
36-
kotlin("jvm") version "1.8.22"
36+
kotlin("jvm") version "2.1.0-RC2"
3737
}
3838

3939
java {

0 commit comments

Comments
 (0)