Skip to content

Commit 9fe722b

Browse files
committed
Remove AgentInstrumentationConfig usages: AWS
1 parent 92475f1 commit 9fe722b

File tree

14 files changed

+354
-79
lines changed

14 files changed

+354
-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: 41 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 AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER;
22+
private static final Duration FLUSH_TIMEOUT;
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,31 @@ 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+
this.flushTimeout =
61+
awsLambdaConfig.getLong(
62+
"flush_timeout", WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis());
63+
}
64+
}
65+
3466
private AwsLambdaSingletons() {}
3567
}

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+
this.flushTimeout =
83+
javaConfig
84+
.getStructured("aws_lambda", empty())
85+
.getLong(
86+
"flush_timeout",
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: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,19 @@
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;
1521
import java.util.Set;
1622

1723
/**
@@ -21,13 +27,14 @@
2127
public final class AwsLambdaEventsInstrumenterFactory {
2228

2329
public static AwsLambdaFunctionInstrumenter createInstrumenter(
24-
OpenTelemetry openTelemetry, String instrumentationName, Set<String> knownMethods) {
30+
OpenTelemetry openTelemetry, String instrumentationName) {
31+
Configuration config = new Configuration(openTelemetry);
2532
return new AwsLambdaFunctionInstrumenter(
2633
openTelemetry,
2734
Instrumenter.builder(
2835
openTelemetry, instrumentationName, AwsLambdaEventsInstrumenterFactory::spanName)
2936
.addAttributesExtractor(new AwsLambdaFunctionAttributesExtractor())
30-
.addAttributesExtractor(new ApiGatewayProxyAttributesExtractor(knownMethods))
37+
.addAttributesExtractor(new ApiGatewayProxyAttributesExtractor(config.knownHttpMethods))
3138
.buildInstrumenter(SpanKindExtractor.alwaysServer()));
3239
}
3340

@@ -43,5 +50,40 @@ private static String spanName(AwsLambdaRequest input) {
4350
return input.getAwsContext().getFunctionName();
4451
}
4552

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

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

Lines changed: 59 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,43 @@ 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+
private static final class Configuration {
100+
101+
private final boolean experimentalSpanAttributes;
102+
private final boolean messagingReceiveTelemetryEnabled;
103+
private final List<String> messagingCapturedHeaders;
104+
105+
Configuration(OpenTelemetry openTelemetry) {
106+
DeclarativeConfigProperties javaConfig = empty();
107+
if (openTelemetry instanceof ExtendedOpenTelemetry) {
108+
ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry;
109+
DeclarativeConfigProperties instrumentationConfig =
110+
extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig();
111+
if (instrumentationConfig != null) {
112+
javaConfig = instrumentationConfig.getStructured("java", empty());
113+
}
114+
}
115+
DeclarativeConfigProperties awsSdkConfig = javaConfig.getStructured("aws_sdk", empty());
116+
DeclarativeConfigProperties messagingConfig = javaConfig.getStructured("messaging", empty());
117+
118+
this.experimentalSpanAttributes =
119+
awsSdkConfig.getBoolean("experimental_span_attributes", false);
120+
this.messagingReceiveTelemetryEnabled =
121+
messagingConfig
122+
.getStructured("receive_telemetry/development", empty())
123+
.getBoolean("enabled", false);
124+
this.messagingCapturedHeaders =
125+
messagingConfig.getScalarList(
126+
"capture_headers/development", String.class, Collections.emptyList());
127+
}
128+
}
82129
}

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)