diff --git a/instrumentation/aws-lambda-1.0/library/README.md b/instrumentation/aws-lambda-1.0/library/README.md index a3d0da1650..9147aa2975 100644 --- a/instrumentation/aws-lambda-1.0/library/README.md +++ b/instrumentation/aws-lambda-1.0/library/README.md @@ -3,9 +3,11 @@ This package contains libraries to help instrument AWS lambda functions in your code. ## Using wrappers -To use the instrumentation, configure `OTEL_LAMBDA_HANDLER` env property to your lambda handler method in following format `package.ClassName::methodName` +To use the instrumentation, configure `OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER` env property to your lambda handler method in following format `package.ClassName::methodName` and use one of wrappers as your lambda `Handler`. +In order to configure a span flush timeout (default is set to 1 second), please configure `OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT` env property. The value is in seconds. + Available wrappers: - `io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestWrapper` - for wrapping regular handlers (implementing `RequestHandler`) - `io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestApiGatewayWrapper` - for wrapping regular handlers (implementing `RequestHandler`) proxied through API Gateway, enabling HTTP context propagation diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestHandler.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestHandler.java index 8fe2f55638..d54426b645 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestHandler.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestHandler.java @@ -24,11 +24,21 @@ import java.util.concurrent.TimeUnit; */ public abstract class TracingRequestHandler implements RequestHandler { + private static final long DEFAULT_FLUSH_TIMEOUT_SECONDS = 1; + private final AwsLambdaTracer tracer; + private final long flushTimeout; + + /** Creates a new {@link TracingRequestHandler} which traces using the default {@link Tracer}. */ + protected TracingRequestHandler(long flushTimeout) { + this.tracer = new AwsLambdaTracer(); + this.flushTimeout = flushTimeout; + } /** Creates a new {@link TracingRequestHandler} which traces using the default {@link Tracer}. */ protected TracingRequestHandler() { this.tracer = new AwsLambdaTracer(); + this.flushTimeout = DEFAULT_FLUSH_TIMEOUT_SECONDS; } /** @@ -36,6 +46,7 @@ public abstract class TracingRequestHandler implements RequestHandler implements RequestHandler getHeaders(I input) { @@ -71,7 +83,9 @@ public abstract class TracingRequestHandler implements RequestHandler extends TracingRequestHandler { + protected TracingRequestWrapperBase() { + super(WrapperConfiguration.flushTimeout()); + } + // visible for testing static WrappedLambda WRAPPED_LAMBDA = WrappedLambda.fromConfiguration(); diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrappedLambda.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrappedLambda.java index 902942dc53..5655cecc87 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrappedLambda.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrappedLambda.java @@ -17,7 +17,8 @@ import java.util.Optional; /** Model for wrapped lambda function (object, class, method). */ class WrappedLambda { - public static final String OTEL_LAMBDA_HANDLER_ENV_KEY = "OTEL_LAMBDA_HANDLER"; + public static final String OTEL_LAMBDA_HANDLER_ENV_KEY = + "OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER"; private final Object targetObject; private final Class targetClass; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrapperConfiguration.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrapperConfiguration.java new file mode 100644 index 0000000000..79a075057c --- /dev/null +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/WrapperConfiguration.java @@ -0,0 +1,27 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awslambda.v1_0; + +public final class WrapperConfiguration { + + private WrapperConfiguration() {} + + public static final String OTEL_LAMBDA_FLUSH_TIMEOUT_ENV_KEY = + "OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT"; + public static final long OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT = 1; + + public static final long flushTimeout() { + String lambdaFlushTimeout = System.getenv(OTEL_LAMBDA_FLUSH_TIMEOUT_ENV_KEY); + if (lambdaFlushTimeout != null && !lambdaFlushTimeout.isEmpty()) { + try { + return Long.parseLong(lambdaFlushTimeout); + } catch (NumberFormatException nfe) { + // ignored - default used + } + } + return OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT; + } +}