Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ If your change does not need a CHANGELOG entry, add the "skip changelog" label t
### Enhancements

- Support X-Ray Trace Id extraction from Lambda Context object, and respect user-configured OTEL_PROPAGATORS in AWS Lamdba instrumentation
([#1191](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1191))
([#1191](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1191)) ([#1218](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1218))
- Adaptive Sampling improvements: Ensure propagation of sampling rule across services and AWS accounts. Remove unnecessary B3 propagator.
([#1201](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1201))
42 changes: 36 additions & 6 deletions lambda-layer/patches/opentelemetry-java-instrumentation.patch
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,10 @@ index 9341bf6f79..f719c1ea93 100644
}
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java
new file mode 100644
index 0000000000..e711558e05
index 0000000000..9bea9808a5
--- /dev/null
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java
@@ -0,0 +1,68 @@
@@ -0,0 +1,76 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
Expand All @@ -164,13 +164,15 @@ index 0000000000..e711558e05
+import io.opentelemetry.context.propagation.TextMapGetter;
+import java.util.Locale;
+import java.util.Map;
+import java.util.logging.Logger;
+
+/**
+ * This class is internal and is hence not for public use. Its APIs are unstable and can change at
+ * any time.
+ */
+public final class ParentContextExtractor {
+
+ private static final Logger logger = Logger.getLogger(ParentContextExtractor.class.getName());
+ private static final String AWS_TRACE_HEADER_ENV_KEY = "_X_AMZN_TRACE_ID";
+ private static final String AWS_TRACE_HEADER_PROP = "com.amazonaws.xray.traceHeader";
+ // lower-case map getter used for extraction
Expand All @@ -190,7 +192,13 @@ index 0000000000..e711558e05
+
+ private static String getTraceHeader(
+ com.amazonaws.services.lambda.runtime.Context lambdaContext) {
+ String traceHeader = lambdaContext.getXrayTraceId();
+ String traceHeader = null;
+ try {
+ // Use reflection to avoid muzzle issues with getXrayTraceId method
+ traceHeader = (String) lambdaContext.getClass().getMethod("getXrayTraceId").invoke(lambdaContext);
+ } catch (Exception e) {
+ logger.fine("Failed to get X-Ray trace ID via reflection: " + e.getMessage());
+ }
+ if (traceHeader != null && !traceHeader.isEmpty()) {
+ return traceHeader;
+ }
Expand Down Expand Up @@ -234,10 +242,10 @@ index cb19d1e568..12ed174bb2 100644
assertThat(spanContext.getSpanId()).isEqualTo("00f067aa0ba902b7");
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java
new file mode 100644
index 0000000000..76fc823a65
index 0000000000..edca3ce68c
--- /dev/null
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java
@@ -0,0 +1,337 @@
@@ -0,0 +1,359 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
Expand Down Expand Up @@ -574,6 +582,28 @@ index 0000000000..76fc823a65
+ assertThat(spanContext.getSpanId()).isEqualTo("0000000000000789");
+ assertThat(spanContext.getTraceId()).isEqualTo("8a3c60f7d188f8fa79d48a391a778fa7");
+ }
+
+ @Test
+ void shouldFallbackToSystemPropertyWhenReflectionFails() {
+ // given
+ Map<String, String> headers = ImmutableMap.of();
+ // Create a mock context that doesn't have getXrayTraceId method (simulates older Lambda runtime)
+ Context mockLambdaContextWithoutXrayMethod = mock(Context.class);
+ systemProperties.set(
+ "com.amazonaws.xray.traceHeader",
+ "Root=1-8a3c60f7-d188f8fa79d48a391a778fa7;Parent=0000000000000789;Sampled=1");
+
+ // when
+ io.opentelemetry.context.Context context =
+ ParentContextExtractor.extract(
+ headers, INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS, mockLambdaContextWithoutXrayMethod);
+ // then
+ Span span = Span.fromContext(context);
+ SpanContext spanContext = span.getSpanContext();
+ assertThat(spanContext.isValid()).isTrue();
+ assertThat(spanContext.getSpanId()).isEqualTo("0000000000000789");
+ assertThat(spanContext.getTraceId()).isEqualTo("8a3c60f7d188f8fa79d48a391a778fa7");
+ }
+}
diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaRequestHandlerInstrumentation.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaRequestHandlerInstrumentation.java
index e059250807..1fa80c3735 100644
Expand Down Expand Up @@ -614,7 +644,7 @@ index 4cd11fc0c4..7b7d62755c 100644
}

diff --git a/version.gradle.kts b/version.gradle.kts
index 023d04703c..b267166804 100644
index ec9690086c..b267166804 100644
--- a/version.gradle.kts
+++ b/version.gradle.kts
@@ -1,5 +1,5 @@
Expand Down
Loading