Skip to content

Commit 98ed4ce

Browse files
committed
Add exception event names to AWS Lambda instrumenters
1 parent 24bf7c1 commit 98ed4ce

11 files changed

Lines changed: 77 additions & 24 deletions

File tree

instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaStreamHandlerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
910
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOCATION_ID;
1011
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -86,7 +87,7 @@ void handlerTracedWithException() {
8687
span.hasName("my_function")
8788
.hasKind(SpanKind.SERVER)
8889
.hasStatus(StatusData.error())
89-
.hasException(thrown)
90+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
9091
.hasAttributesSatisfyingExactly(equalTo(FAAS_INVOCATION_ID, "1-22-333"))));
9192
}
9293

instrumentation/aws-lambda/aws-lambda-core-1.0/library/build.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,15 @@ tasks.withType<Test>().configureEach {
3434
jvmArgs("--add-opens=java.base/java.util=ALL-UNNAMED")
3535
jvmArgs("-XX:+IgnoreUnrecognizedVMOptions")
3636
}
37+
38+
tasks {
39+
val testExceptionSignalLogs by registering(Test::class) {
40+
testClassesDirs = sourceSets.test.get().output.classesDirs
41+
classpath = sourceSets.test.get().runtimeClasspath
42+
jvmArgs("-Dotel.semconv.exception.signal.opt-in=logs")
43+
}
44+
45+
check {
46+
dependsOn(testExceptionSignalLogs)
47+
}
48+
}

instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenterFactory.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55

66
package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal;
77

8+
import static io.opentelemetry.api.logs.Severity.ERROR;
9+
810
import io.opentelemetry.api.OpenTelemetry;
11+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
912
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
13+
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
1014
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
15+
import io.opentelemetry.instrumentation.api.internal.Experimental;
1116
import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest;
1217

1318
/**
@@ -17,14 +22,16 @@
1722
public final class AwsLambdaFunctionInstrumenterFactory {
1823

1924
public static AwsLambdaFunctionInstrumenter createInstrumenter(OpenTelemetry openTelemetry) {
20-
return new AwsLambdaFunctionInstrumenter(
21-
openTelemetry,
25+
InstrumenterBuilder<AwsLambdaRequest, Object> builder =
2226
Instrumenter.builder(
2327
openTelemetry,
2428
"io.opentelemetry.aws-lambda-core-1.0",
2529
AwsLambdaFunctionInstrumenterFactory::spanName)
26-
.addAttributesExtractor(new AwsLambdaFunctionAttributesExtractor())
27-
.buildInstrumenter(SpanKindExtractor.alwaysServer()));
30+
.addAttributesExtractor(new AwsLambdaFunctionAttributesExtractor());
31+
Experimental.setExceptionEventExtractor(
32+
builder, ExceptionEventExtractor.create("faas.invocation.exception", ERROR));
33+
return new AwsLambdaFunctionInstrumenter(
34+
openTelemetry, builder.buildInstrumenter(SpanKindExtractor.alwaysServer()));
2835
}
2936

3037
private static String spanName(AwsLambdaRequest input) {

instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperHttpPropagationTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.awslambdacore.v1_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
910
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
1011
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
@@ -126,7 +127,7 @@ void handlerTracedWithException() {
126127
.hasTraceId("4fd0b6131f19f39af59518d127b0cafe")
127128
.hasParentSpanId("0000000000000456")
128129
.hasStatus(StatusData.error())
129-
.hasException(thrown)
130+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
130131
.hasAttributesSatisfyingExactly(
131132
equalTo(
132133
CLOUD_RESOURCE_ID,

instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AwsLambdaStreamWrapperTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.awslambdacore.v1_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
910
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
1011
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
@@ -107,7 +108,7 @@ void handlerTracedWithException() {
107108
span.hasName("my_function")
108109
.hasKind(SpanKind.SERVER)
109110
.hasStatus(StatusData.error())
110-
.hasException(thrown)
111+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
111112
.hasAttributesSatisfyingExactly(
112113
equalTo(
113114
CLOUD_RESOURCE_ID,

instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.awslambdacore.v1_0;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
910
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1011
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOCATION_ID;
@@ -84,7 +85,7 @@ void handlerTracedWithException() {
8485
span.hasName("my_function")
8586
.hasKind(SpanKind.SERVER)
8687
.hasStatus(StatusData.error())
87-
.hasException(thrown)
88+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
8889
.hasAttributesSatisfyingExactly(
8990
equalTo(FAAS_INVOCATION_ID, "1-22-333"))));
9091
}

instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaStreamHandlerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.javaagent.instrumentation.awslambdaevents.v2_2;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
910
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOCATION_ID;
1011
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -86,7 +87,7 @@ void handlerTracedWithException() {
8687
span.hasName("my_function")
8788
.hasKind(SpanKind.SERVER)
8889
.hasStatus(StatusData.error())
89-
.hasException(thrown)
90+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
9091
.hasAttributesSatisfyingExactly(equalTo(FAAS_INVOCATION_ID, "1-22-333"))));
9192
}
9293

instrumentation/aws-lambda/aws-lambda-events-3.11/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v3_11/AwsLambdaWrapperTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.awslambdaevents.v3_11;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
910
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
1011
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
@@ -94,7 +95,7 @@ void handlerTracedWithException() {
9495
span.hasName("my_function")
9596
.hasKind(SpanKind.SERVER)
9697
.hasStatus(StatusData.error())
97-
.hasException(thrown)
98+
.hasException(emitExceptionAsSpanEvents() ? thrown : null)
9899
.hasAttributesSatisfyingExactly(
99100
equalTo(
100101
CLOUD_RESOURCE_ID,

instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/build.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,15 @@ tasks.withType<Test>().configureEach {
3939
jvmArgs("--add-opens=java.base/java.util=ALL-UNNAMED")
4040
jvmArgs("-XX:+IgnoreUnrecognizedVMOptions")
4141
}
42+
43+
tasks {
44+
val testExceptionSignalLogs by registering(Test::class) {
45+
testClassesDirs = sourceSets.test.get().output.classesDirs
46+
classpath = sourceSets.test.get().runtimeClasspath
47+
jvmArgs("-Dotel.semconv.exception.signal.opt-in=logs")
48+
}
49+
50+
check {
51+
dependsOn(testExceptionSignalLogs)
52+
}
53+
}

instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@
55

66
package io.opentelemetry.instrumentation.awslambdaevents.common.v2_2.internal;
77

8+
import static io.opentelemetry.api.logs.Severity.ERROR;
9+
810
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
911
import io.opentelemetry.api.OpenTelemetry;
12+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.ExceptionEventExtractor;
1013
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
14+
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
1115
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
16+
import io.opentelemetry.instrumentation.api.internal.Experimental;
1217
import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest;
1318
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionAttributesExtractor;
1419
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter;
@@ -22,13 +27,15 @@ public final class AwsLambdaEventsInstrumenterFactory {
2227

2328
public static AwsLambdaFunctionInstrumenter createInstrumenter(
2429
OpenTelemetry openTelemetry, String instrumentationName, Set<String> knownMethods) {
25-
return new AwsLambdaFunctionInstrumenter(
26-
openTelemetry,
30+
InstrumenterBuilder<AwsLambdaRequest, Object> builder =
2731
Instrumenter.builder(
2832
openTelemetry, instrumentationName, AwsLambdaEventsInstrumenterFactory::spanName)
2933
.addAttributesExtractor(new AwsLambdaFunctionAttributesExtractor())
30-
.addAttributesExtractor(new ApiGatewayProxyAttributesExtractor(knownMethods))
31-
.buildInstrumenter(SpanKindExtractor.alwaysServer()));
34+
.addAttributesExtractor(new ApiGatewayProxyAttributesExtractor(knownMethods));
35+
Experimental.setExceptionEventExtractor(
36+
builder, ExceptionEventExtractor.create("faas.invocation.exception", ERROR));
37+
return new AwsLambdaFunctionInstrumenter(
38+
openTelemetry, builder.buildInstrumenter(SpanKindExtractor.alwaysServer()));
3239
}
3340

3441
private static String spanName(AwsLambdaRequest input) {

0 commit comments

Comments
 (0)