Skip to content

Commit 4efb7be

Browse files
committed
Remove AgentInstrumentationConfig usages: AWS
1 parent 92475f1 commit 4efb7be

File tree

14 files changed

+363
-79
lines changed

14 files changed

+363
-79
lines changed

instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,29 @@
55

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

8+
import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty;
9+
810
import io.opentelemetry.api.GlobalOpenTelemetry;
11+
import io.opentelemetry.api.OpenTelemetry;
12+
import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
13+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
914
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter;
1015
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenterFactory;
1116
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrapperConfiguration;
12-
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
1317
import java.time.Duration;
1418

1519
public final class AwsLambdaSingletons {
1620

17-
private static final AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER =
18-
AwsLambdaFunctionInstrumenterFactory.createInstrumenter(GlobalOpenTelemetry.get());
19-
private static final Duration FLUSH_TIMEOUT =
20-
Duration.ofMillis(
21-
AgentInstrumentationConfig.get()
22-
.getLong(
23-
"otel.instrumentation.aws-lambda.flush-timeout",
24-
WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis()));
21+
private static final Duration FLUSH_TIMEOUT;
22+
private static final AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER;
23+
24+
static {
25+
Configuration config = new Configuration(GlobalOpenTelemetry.get());
26+
27+
FLUSH_TIMEOUT = Duration.ofMillis(config.flushTimeout);
28+
FUNCTION_INSTRUMENTER =
29+
AwsLambdaFunctionInstrumenterFactory.createInstrumenter(GlobalOpenTelemetry.get());
30+
}
2531

2632
public static AwsLambdaFunctionInstrumenter functionInstrumenter() {
2733
return FUNCTION_INSTRUMENTER;
@@ -31,5 +37,33 @@ public static Duration flushTimeout() {
3137
return FLUSH_TIMEOUT;
3238
}
3339

40+
// instrumentation/development:
41+
// java:
42+
// aws_lambda:
43+
// flush_timeout: 10000
44+
private static final class Configuration {
45+
46+
private final long flushTimeout;
47+
48+
Configuration(OpenTelemetry openTelemetry) {
49+
DeclarativeConfigProperties javaConfig = empty();
50+
if (openTelemetry instanceof ExtendedOpenTelemetry) {
51+
ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry;
52+
DeclarativeConfigProperties instrumentationConfig =
53+
extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig();
54+
if (instrumentationConfig != null) {
55+
javaConfig = instrumentationConfig.getStructured("java", empty());
56+
}
57+
}
58+
DeclarativeConfigProperties awsLambdaConfig = javaConfig.getStructured("aws_lambda", empty());
59+
60+
Long flushTimeoutValue = awsLambdaConfig.getLong("flush_timeout");
61+
this.flushTimeout =
62+
flushTimeoutValue != null
63+
? flushTimeoutValue
64+
: WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis();
65+
}
66+
}
67+
3468
private AwsLambdaSingletons() {}
3569
}

instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java

Lines changed: 59 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,37 @@
55

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

8+
import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty;
9+
810
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
911
import io.opentelemetry.api.GlobalOpenTelemetry;
12+
import io.opentelemetry.api.OpenTelemetry;
13+
import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
14+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1015
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1116
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter;
1217
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrapperConfiguration;
1318
import io.opentelemetry.instrumentation.awslambdaevents.common.v2_2.internal.AwsLambdaEventsInstrumenterFactory;
1419
import io.opentelemetry.instrumentation.awslambdaevents.common.v2_2.internal.AwsLambdaSqsInstrumenterFactory;
15-
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
16-
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
1720
import java.time.Duration;
1821

1922
public final class AwsLambdaSingletons {
2023
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.aws-lambda-events-2.2";
21-
private static final AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER =
22-
AwsLambdaEventsInstrumenterFactory.createInstrumenter(
23-
GlobalOpenTelemetry.get(),
24-
INSTRUMENTATION_NAME,
25-
AgentCommonConfig.get().getKnownHttpRequestMethods());
26-
private static final Instrumenter<SQSEvent, Void> MESSAGE_TRACER =
27-
AwsLambdaSqsInstrumenterFactory.forEvent(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME);
28-
private static final Duration FLUSH_TIMEOUT =
29-
Duration.ofMillis(
30-
AgentInstrumentationConfig.get()
31-
.getLong(
32-
"otel.instrumentation.aws-lambda.flush-timeout",
33-
WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis()));
24+
25+
private static final AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER;
26+
private static final Instrumenter<SQSEvent, Void> MESSAGE_TRACER;
27+
private static final Duration FLUSH_TIMEOUT;
28+
29+
static {
30+
Configuration config = new Configuration(GlobalOpenTelemetry.get());
31+
32+
FUNCTION_INSTRUMENTER =
33+
AwsLambdaEventsInstrumenterFactory.createInstrumenter(
34+
GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME);
35+
MESSAGE_TRACER =
36+
AwsLambdaSqsInstrumenterFactory.forEvent(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME);
37+
FLUSH_TIMEOUT = Duration.ofMillis(config.flushTimeout);
38+
}
3439

3540
public static AwsLambdaFunctionInstrumenter functionInstrumenter() {
3641
return FUNCTION_INSTRUMENTER;
@@ -44,5 +49,44 @@ public static Duration flushTimeout() {
4449
return FLUSH_TIMEOUT;
4550
}
4651

52+
// instrumentation/development:
53+
// java:
54+
// aws_lambda:
55+
// flush_timeout: 10000
56+
// http:
57+
// known_methods:
58+
// - CONNECT
59+
// - DELETE
60+
// - GET
61+
// - HEAD
62+
// - OPTIONS
63+
// - PATCH
64+
// - POST
65+
// - PUT
66+
// - TRACE
67+
private static final class Configuration {
68+
69+
private final long flushTimeout;
70+
71+
Configuration(OpenTelemetry openTelemetry) {
72+
DeclarativeConfigProperties javaConfig = empty();
73+
if (openTelemetry instanceof ExtendedOpenTelemetry) {
74+
ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry;
75+
DeclarativeConfigProperties instrumentationConfig =
76+
extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig();
77+
if (instrumentationConfig != null) {
78+
javaConfig = instrumentationConfig.getStructured("java", empty());
79+
}
80+
}
81+
82+
Long flushTimeoutValue =
83+
javaConfig.getStructured("aws_lambda", empty()).getLong("flush_timeout");
84+
this.flushTimeout =
85+
flushTimeoutValue != null
86+
? flushTimeoutValue
87+
: WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis();
88+
}
89+
}
90+
4791
private AwsLambdaSingletons() {}
4892
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import com.amazonaws.services.lambda.runtime.Context;
99
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
10-
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
1110
import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler;
1211
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils;
1312
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda;
@@ -49,7 +48,7 @@ protected TracingRequestWrapperBase(BiFunction<I, Class<?>, Object> parameterMap
4948
openTelemetrySdk,
5049
WrapperConfiguration.flushTimeout(),
5150
AwsLambdaEventsInstrumenterFactory.createInstrumenter(
52-
openTelemetrySdk, INSTRUMENTATION_NAME, HttpConstants.KNOWN_METHODS));
51+
openTelemetrySdk, INSTRUMENTATION_NAME));
5352
this.wrappedLambda = wrappedLambda;
5453
this.targetMethod = wrappedLambda.getRequestTargetMethod();
5554
this.parameterMapper = parameterMapper;

instrumentation/aws-lambda/aws-lambda-events-3.11/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v3_11/TracingRequestWrapperBase.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import com.amazonaws.services.lambda.runtime.Context;
99
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
10-
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
1110
import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler;
1211
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils;
1312
import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda;
@@ -49,7 +48,7 @@ protected TracingRequestWrapperBase(BiFunction<I, Class<?>, Object> parameterMap
4948
openTelemetrySdk,
5049
WrapperConfiguration.flushTimeout(),
5150
AwsLambdaEventsInstrumenterFactory.createInstrumenter(
52-
openTelemetrySdk, INSTRUMENTATION_NAME, HttpConstants.KNOWN_METHODS));
51+
openTelemetrySdk, INSTRUMENTATION_NAME));
5352
this.wrappedLambda = wrappedLambda;
5453
this.targetMethod = wrappedLambda.getRequestTargetMethod();
5554
this.parameterMapper = parameterMapper;

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: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,20 @@
55

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

8+
import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty;
9+
810
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
911
import io.opentelemetry.api.OpenTelemetry;
12+
import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
13+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1014
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1115
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
16+
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
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;
20+
import java.util.HashSet;
21+
import java.util.List;
1522
import java.util.Set;
1623

1724
/**
@@ -21,13 +28,14 @@
2128
public final class AwsLambdaEventsInstrumenterFactory {
2229

2330
public static AwsLambdaFunctionInstrumenter createInstrumenter(
24-
OpenTelemetry openTelemetry, String instrumentationName, Set<String> knownMethods) {
31+
OpenTelemetry openTelemetry, String instrumentationName) {
32+
Configuration config = new Configuration(openTelemetry);
2533
return new AwsLambdaFunctionInstrumenter(
2634
openTelemetry,
2735
Instrumenter.builder(
2836
openTelemetry, instrumentationName, AwsLambdaEventsInstrumenterFactory::spanName)
2937
.addAttributesExtractor(new AwsLambdaFunctionAttributesExtractor())
30-
.addAttributesExtractor(new ApiGatewayProxyAttributesExtractor(knownMethods))
38+
.addAttributesExtractor(new ApiGatewayProxyAttributesExtractor(config.knownHttpMethods))
3139
.buildInstrumenter(SpanKindExtractor.alwaysServer()));
3240
}
3341

@@ -43,5 +51,42 @@ private static String spanName(AwsLambdaRequest input) {
4351
return input.getAwsContext().getFunctionName();
4452
}
4553

54+
// instrumentation/development:
55+
// java:
56+
// http:
57+
// known_methods:
58+
// - CONNECT
59+
// - DELETE
60+
// - GET
61+
// - HEAD
62+
// - OPTIONS
63+
// - PATCH
64+
// - POST
65+
// - PUT
66+
// - TRACE
67+
private static final class Configuration {
68+
69+
private final Set<String> knownHttpMethods;
70+
71+
Configuration(OpenTelemetry openTelemetry) {
72+
DeclarativeConfigProperties javaConfig = empty();
73+
if (openTelemetry instanceof ExtendedOpenTelemetry) {
74+
ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry;
75+
DeclarativeConfigProperties instrumentationConfig =
76+
extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig();
77+
if (instrumentationConfig != null) {
78+
javaConfig = instrumentationConfig.getStructured("java", empty());
79+
}
80+
}
81+
DeclarativeConfigProperties httpConfig = javaConfig.getStructured("http", empty());
82+
83+
List<String> knownHttpMethodsList = httpConfig.getScalarList("known_methods", String.class);
84+
this.knownHttpMethods =
85+
knownHttpMethodsList != null
86+
? new HashSet<>(knownHttpMethodsList)
87+
: new HashSet<>(HttpConstants.KNOWN_METHODS);
88+
}
89+
}
90+
4691
private AwsLambdaEventsInstrumenterFactory() {}
4792
}

instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,22 @@
55

66
package io.opentelemetry.javaagent.instrumentation.awssdk.v1_11;
77

8+
import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty;
9+
810
import com.amazonaws.AmazonWebServiceRequest;
911
import com.amazonaws.Request;
1012
import com.amazonaws.Response;
1113
import com.amazonaws.handlers.HandlerContextKey;
1214
import com.amazonaws.handlers.RequestHandler2;
1315
import io.opentelemetry.api.GlobalOpenTelemetry;
16+
import io.opentelemetry.api.OpenTelemetry;
17+
import io.opentelemetry.api.incubator.ExtendedOpenTelemetry;
18+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1419
import io.opentelemetry.context.Context;
1520
import io.opentelemetry.context.Scope;
1621
import io.opentelemetry.instrumentation.awssdk.v1_11.AwsSdkTelemetry;
17-
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
18-
import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig;
22+
import java.util.Collections;
23+
import java.util.List;
1924

2025
/**
2126
* A {@link RequestHandler2} for use in the agent. Unlike library instrumentation, the agent will
@@ -33,16 +38,19 @@ public class TracingRequestHandler extends RequestHandler2 {
3338
public static final HandlerContextKey<Scope> SCOPE =
3439
new HandlerContextKey<>(Scope.class.getName());
3540

36-
public static final RequestHandler2 tracingHandler =
37-
AwsSdkTelemetry.builder(GlobalOpenTelemetry.get())
38-
.setCaptureExperimentalSpanAttributes(
39-
AgentInstrumentationConfig.get()
40-
.getBoolean("otel.instrumentation.aws-sdk.experimental-span-attributes", false))
41-
.setMessagingReceiveInstrumentationEnabled(
42-
ExperimentalConfig.get().messagingReceiveInstrumentationEnabled())
43-
.setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders())
44-
.build()
45-
.newRequestHandler();
41+
public static final RequestHandler2 tracingHandler;
42+
43+
static {
44+
Configuration config = new Configuration(GlobalOpenTelemetry.get());
45+
46+
tracingHandler =
47+
AwsSdkTelemetry.builder(GlobalOpenTelemetry.get())
48+
.setCaptureExperimentalSpanAttributes(config.experimentalSpanAttributes)
49+
.setMessagingReceiveTelemetryEnabled(config.messagingReceiveTelemetryEnabled)
50+
.setCapturedHeaders(config.messagingCapturedHeaders)
51+
.build()
52+
.newRequestHandler();
53+
}
4654

4755
@Override
4856
public void beforeRequest(Request<?> request) {
@@ -79,4 +87,45 @@ private static void finish(Request<?> request) {
7987
scope.close();
8088
request.addHandlerContext(SCOPE, null);
8189
}
90+
91+
// instrumentation/development:
92+
// java:
93+
// aws_sdk:
94+
// experimental_span_attributes: false
95+
// messaging:
96+
// receive_telemetry/development:
97+
// enabled: false
98+
// capture_headers/development:
99+
// - []
100+
private static final class Configuration {
101+
102+
private final boolean experimentalSpanAttributes;
103+
private final boolean messagingReceiveTelemetryEnabled;
104+
private final List<String> messagingCapturedHeaders;
105+
106+
Configuration(OpenTelemetry openTelemetry) {
107+
DeclarativeConfigProperties javaConfig = empty();
108+
if (openTelemetry instanceof ExtendedOpenTelemetry) {
109+
ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry;
110+
DeclarativeConfigProperties instrumentationConfig =
111+
extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig();
112+
if (instrumentationConfig != null) {
113+
javaConfig = instrumentationConfig.getStructured("java", empty());
114+
}
115+
}
116+
DeclarativeConfigProperties awsSdkConfig = javaConfig.getStructured("aws_sdk", empty());
117+
DeclarativeConfigProperties messagingConfig = javaConfig.getStructured("messaging", empty());
118+
119+
this.experimentalSpanAttributes =
120+
awsSdkConfig.getBoolean("experimental_span_attributes", false);
121+
this.messagingReceiveTelemetryEnabled =
122+
messagingConfig
123+
.getStructured("receive_telemetry/development", empty())
124+
.getBoolean("enabled", false);
125+
List<String> capturedHeadersList =
126+
messagingConfig.getScalarList("capture_headers/development", String.class);
127+
this.messagingCapturedHeaders =
128+
capturedHeadersList != null ? capturedHeadersList : Collections.emptyList();
129+
}
130+
}
82131
}

instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class TracingRequestHandler extends RequestHandler2 {
2525
.setCaptureExperimentalSpanAttributes(
2626
ConfigPropertiesUtil.getBoolean(
2727
"otel.instrumentation.aws-sdk.experimental-span-attributes", false))
28-
.setMessagingReceiveInstrumentationEnabled(
28+
.setMessagingReceiveTelemetryEnabled(
2929
ConfigPropertiesUtil.getBoolean(
3030
"otel.instrumentation.messaging.experimental.receive-telemetry.enabled", false))
3131
.setCapturedHeaders(

0 commit comments

Comments
 (0)