-
Notifications
You must be signed in to change notification settings - Fork 63
Fix: Lambda Topology Issue (#1016) #1085
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix: Lambda Topology Issue (#1016) #1085
Conversation
**Issue #, if available:** Lambda Topology issue -- more context in PRs for Python and JavaScript: - aws-observability/aws-otel-python-instrumentation#319 - aws-observability/aws-otel-js-instrumentation#149 **Description of changes:** - Apply fix for the Lambda Topology issue. The logic mimics the fix in our other ADOT SDKs. - Adding back AWS Resource support for Lambda. - aws-observability#907 - We previously removed support due to the Lambda Topology issue **Test plan:** Set up two Lambda functions with Java runtimes and tested with custom Lambda layer with fix built-in. Tested both AWS SDK v1 and v2. Below are screenshots of the topology for various configurations. **v1 Topology (lambdaA & lambdaB instrumented)** <img width="1311" alt="Screenshot 2025-02-07 at 11 48 51 AM" src="https://github.com/user-attachments/assets/48234604-ae4b-49cd-926f-05cdd74038a7" /> **v2 Topology (lambdaA & lambdaB instrumented)** <img width="1222" alt="Screenshot 2025-02-07 at 11 26 34 AM" src="https://github.com/user-attachments/assets/cf7446f3-888f-4756-8ce0-e5ed1e97c9b5" /> We observe the following correct behaviors for topology above: - Service entity node for `Invoke` call to downstream lambda. - AWS Resource node for `GetFunction` call to downstream lambda. - AWS Resource node for `ListBuckets` call to downstream s3. **v1 Topology (lambdaB not instrumented)** <img width="965" alt="Screenshot 2025-02-07 at 12 17 59 PM" src="https://github.com/user-attachments/assets/67c361c0-4b8b-4d54-b1dd-0f21a9eee6ff" /> **v2 Topology (lambdaB not instrumented)** <img width="965" alt="Screenshot 2025-02-07 at 12 17 59 PM" src="https://github.com/user-attachments/assets/67c361c0-4b8b-4d54-b1dd-0f21a9eee6ff" /> We observe the following correct behaviors for topology above: - Downstream lambda called with `Invoke` is correctly treated as RemoteService entity when not instrumented Additionally, I generated the spans locally to verify the lambda instrumentation patch behaves correctly. **v1 Invoke** <img width="1281" alt="Screenshot 2025-02-06 at 10 10 23 PM" src="https://github.com/user-attachments/assets/8d025453-4658-47c7-8c50-261be8b665f5" /> **v2 Invoke** <img width="1281" alt="Screenshot 2025-02-06 at 10 11 49 PM" src="https://github.com/user-attachments/assets/46b382d0-9475-4871-9773-ed78e609d4a2" /> **v1 GetFunction** <img width="1281" alt="Screenshot 2025-02-06 at 10 08 53 PM" src="https://github.com/user-attachments/assets/a59e2de6-d50c-47bf-b9d6-171c1ce7cc02" /> **v2 GetFunction** <img width="1281" alt="Screenshot 2025-02-06 at 10 10 05 PM" src="https://github.com/user-attachments/assets/bec349e0-92c7-4d80-b778-8fa29f3b1ab2" /> We observe the following correct behaviors in the spans above: - For `Invoke` calls, we see `aws.remote.service` and `aws.remote.environment` correctly populated in the spans. - For non-`Invoke` calls (i.e. `GetFunction`), we see AWS Resource attributes such as `aws.remote.resource.identifier` and `aws.cloudformation.primary.identifier` correctly populated. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
987eb35
to
d4ac453
Compare
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
Codecov ReportAttention: Patch coverage is
❗ Your organization needs to install the Codecov GitHub app to enable full functionality. Additional details and impacted files@@ Coverage Diff @@
## main #1085 +/- ##
=============================================
- Coverage 85.71% 71.57% -14.15%
- Complexity 19 376 +357
=============================================
Files 3 33 +30
Lines 49 1393 +1344
Branches 5 191 +186
=============================================
+ Hits 42 997 +955
- Misses 3 334 +331
- Partials 4 62 +58 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Show resolved
Hide resolved
...main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java
Outdated
Show resolved
Hide resolved
.../java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java
Show resolved
Hide resolved
*Description of changes:* Merges changes from mainline to v2.11.1 Namely: #1085 and #1089 ``` The following dependencies are using the latest release version: - com.sparkjava:spark-core:2.9.4 - com.squareup.okhttp3:okhttp:4.12.0 - io.opentelemetry:opentelemetry-extension-aws:1.20.1 The following dependencies have later release versions: - com.amazonaws:aws-java-sdk-bom [1.12.599 -> 1.12.785] https://aws.amazon.com/sdkforjava - com.fasterxml.jackson:jackson-bom [2.16.0 -> 2.19.0] https://github.com/FasterXML/jackson-bom - com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin [0.50.0 -> 0.52.0] - com.google.guava:guava-bom [33.0.0-jre -> 33.4.8-jre] https://github.com/google/guava - com.google.protobuf:protobuf-bom [3.25.1 -> 4.31.1] https://developers.google.com/protocol-buffers/ - com.linecorp.armeria:armeria-bom [1.26.4 -> 1.32.5] https://armeria.dev/ - commons-logging:commons-logging [1.2 -> 1.3.5] https://commons.apache.org/proper/commons-logging/ - io.grpc:grpc-bom [1.59.1 -> 1.73.0] https://github.com/grpc/grpc-java - io.opentelemetry.contrib:opentelemetry-aws-resources [1.39.0-alpha -> 1.46.0-alpha] https://github.com/open-telemetry/opentelemetry-java-contrib - io.opentelemetry.contrib:opentelemetry-aws-xray [1.39.0-adot1 -> 1.46.0] https://github.com/open-telemetry/opentelemetry-java-contrib - io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha [2.11.0-adot2-alpha -> 2.16.0-alpha] https://github.com/open-telemetry/opentelemetry-java-instrumentation - io.opentelemetry.javaagent:opentelemetry-javaagent [2.11.0-adot2 -> 2.16.0] https://github.com/open-telemetry/opentelemetry-java-instrumentation - io.opentelemetry.proto:opentelemetry-proto [1.0.0-alpha -> 1.7.0-alpha] https://github.com/open-telemetry/opentelemetry-proto-java - net.bytebuddy:byte-buddy [1.14.10 -> 1.17.5] https://bytebuddy.net - org.apache.logging.log4j:log4j-bom [2.21.1 -> 2.24.3] https://logging.apache.org/log4j/2.x/ - org.assertj:assertj-core [3.24.2 -> 3.27.3] https://assertj.github.io/doc/#assertj-core - org.curioswitch.curiostack:protobuf-jackson [2.2.0 -> 2.7.0] https://github.com/curioswitch/protobuf-jackson - org.junit:junit-bom [5.10.1 -> 5.13.0] https://junit.org/junit5/ - org.slf4j:slf4j-api [1.7.36 -> 2.0.17] http://www.slf4j.org - org.slf4j:slf4j-simple [1.7.36 -> 2.0.17] http://www.slf4j.org - org.springframework.boot:spring-boot-dependencies [2.7.17 -> 3.5.0] https://spring.io/projects/spring-boot - org.testcontainers:testcontainers-bom [1.19.3 -> 1.21.1] https://java.testcontainers.org - software.amazon.awssdk:bom [2.21.33 -> 2.31.56] https://aws.amazon.com/sdkforjava Gradle release-candidate updates: - Gradle: [8.10 -> 8.14.1] ``` By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --------- Co-authored-by: Jonathan Lee <[email protected]> Co-authored-by: Thomas Pierce <[email protected]> Co-authored-by: Michael He <[email protected]> Co-authored-by: ADOT Patch workflow <[email protected]> Co-authored-by: Prashant Srivastava <[email protected]> Co-authored-by: Mohamed Asaker <[email protected]>
What does this pull request do?
Cherry picks the Lambda Topology fix from our Lambda Layer v1 branch.
Original PR: #1016
Test strategy
Unit tests and followed e2e test strategy used in the original PR to sanity check correct behavior in service topology.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.