Skip to content

Commit b690a79

Browse files
authored
Switches that directly control which instrumentations are applied belong in InstrumenterConfig (#10082)
Having such switches in Config can lead to odd errors in GraalVM and cause certain JDK classes to load before instrumentations are installed, which means we lose the chance to field-inject context.
1 parent 29408ce commit b690a79

File tree

6 files changed

+47
-29
lines changed

6 files changed

+47
-29
lines changed

dd-java-agent/instrumentation/log4j/log4j-2.0/src/main/java/datadog/trace/instrumentation/log4j2/LoggerConfigInstrumentation.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import datadog.trace.agent.tooling.Instrumenter;
77
import datadog.trace.agent.tooling.InstrumenterModule;
88
import datadog.trace.api.Config;
9+
import datadog.trace.api.InstrumenterConfig;
910
import java.util.Map;
1011
import java.util.Set;
1112
import net.bytebuddy.asm.Advice;
@@ -23,7 +24,8 @@ public LoggerConfigInstrumentation() {
2324

2425
@Override
2526
public boolean isApplicable(Set<TargetSystem> enabledSystems) {
26-
return super.isApplicable(enabledSystems) && Config.get().isAgentlessLogSubmissionEnabled();
27+
return super.isApplicable(enabledSystems)
28+
&& InstrumenterConfig.get().isAgentlessLogSubmissionEnabled();
2729
}
2830

2931
@Override

dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/SparkExitInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import com.google.auto.service.AutoService;
77
import datadog.trace.agent.tooling.Instrumenter;
88
import datadog.trace.agent.tooling.InstrumenterModule;
9-
import datadog.trace.api.Config;
9+
import datadog.trace.api.InstrumenterConfig;
1010

1111
@AutoService(InstrumenterModule.class)
1212
public class SparkExitInstrumentation extends InstrumenterModule.Tracing
@@ -18,7 +18,7 @@ public SparkExitInstrumentation() {
1818

1919
@Override
2020
protected boolean defaultEnabled() {
21-
return Config.get().isDataJobsEnabled();
21+
return InstrumenterConfig.get().isDataJobsEnabled();
2222
}
2323

2424
@Override

dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import com.google.auto.service.AutoService;
1212
import datadog.trace.agent.tooling.Instrumenter;
1313
import datadog.trace.agent.tooling.InstrumenterModule;
14-
import datadog.trace.api.Config;
14+
import datadog.trace.api.InstrumenterConfig;
1515
import datadog.trace.api.telemetry.EndpointCollector;
1616
import java.util.HashMap;
1717
import java.util.Map;
@@ -65,7 +65,7 @@ public void methodAdvice(MethodTransformer transformer) {
6565

6666
@Override
6767
public boolean isEnabled() {
68-
return super.isEnabled() && Config.get().isApiSecurityEndpointCollectionEnabled();
68+
return super.isEnabled() && InstrumenterConfig.get().isApiSecurityEndpointCollectionEnabled();
6969
}
7070

7171
public static class AppSecHandlerMappingAdvice {

dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletWithPathPatternsInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.google.auto.service.AutoService;
1111
import datadog.trace.agent.tooling.Instrumenter;
1212
import datadog.trace.agent.tooling.InstrumenterModule;
13-
import datadog.trace.api.Config;
13+
import datadog.trace.api.InstrumenterConfig;
1414
import datadog.trace.api.telemetry.EndpointCollector;
1515
import java.util.HashMap;
1616
import java.util.Map;
@@ -60,7 +60,7 @@ public void methodAdvice(MethodTransformer transformer) {
6060

6161
@Override
6262
public boolean isEnabled() {
63-
return super.isEnabled() && Config.get().isApiSecurityEndpointCollectionEnabled();
63+
return super.isEnabled() && InstrumenterConfig.get().isApiSecurityEndpointCollectionEnabled();
6464
}
6565

6666
public static class AppSecHandlerMappingAdvice {

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import static datadog.trace.api.ConfigDefaults.DEFAULT_ANALYTICS_SAMPLE_RATE;
1010
import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_DOWNSTREAM_REQUEST_BODY_ANALYSIS_SAMPLE_RATE;
1111
import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENABLED;
12-
import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED;
1312
import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT;
1413
import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS;
1514
import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_SAMPLE_DELAY;
@@ -47,7 +46,6 @@
4746
import static datadog.trace.api.ConfigDefaults.DEFAULT_COUCHBASE_INTERNAL_SPANS_ENABLED;
4847
import static datadog.trace.api.ConfigDefaults.DEFAULT_CWS_ENABLED;
4948
import static datadog.trace.api.ConfigDefaults.DEFAULT_CWS_TLS_REFRESH;
50-
import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_ENABLED;
5149
import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_EXPERIMENTAL_FEATURES_ENABLED;
5250
import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_OPENLINEAGE_ENABLED;
5351
import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_OPENLINEAGE_TIMEOUT_ENABLED;
@@ -209,7 +207,6 @@
209207
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_DOWNSTREAM_REQUEST_BODY_ANALYSIS_SAMPLE_RATE;
210208
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_ENABLED;
211209
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_ENABLED_EXPERIMENTAL;
212-
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_ENDPOINT_COLLECTION_ENABLED;
213210
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT;
214211
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS;
215212
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_SAMPLE_DELAY;
@@ -345,7 +342,6 @@
345342
import static datadog.trace.api.config.DebuggerConfig.THIRD_PARTY_EXCLUDES;
346343
import static datadog.trace.api.config.DebuggerConfig.THIRD_PARTY_INCLUDES;
347344
import static datadog.trace.api.config.DebuggerConfig.THIRD_PARTY_SHADING_IDENTIFIERS;
348-
import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_ENABLED;
349345
import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_LEVEL;
350346
import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE;
351347
import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_URL;
@@ -355,7 +351,6 @@
355351
import static datadog.trace.api.config.GeneralConfig.APPLICATION_KEY_FILE;
356352
import static datadog.trace.api.config.GeneralConfig.APP_KEY;
357353
import static datadog.trace.api.config.GeneralConfig.AZURE_APP_SERVICES;
358-
import static datadog.trace.api.config.GeneralConfig.DATA_JOBS_ENABLED;
359354
import static datadog.trace.api.config.GeneralConfig.DATA_JOBS_EXPERIMENTAL_FEATURES_ENABLED;
360355
import static datadog.trace.api.config.GeneralConfig.DATA_JOBS_OPENLINEAGE_ENABLED;
361356
import static datadog.trace.api.config.GeneralConfig.DATA_JOBS_OPENLINEAGE_TIMEOUT_ENABLED;
@@ -1004,7 +999,6 @@ public static String getHostName() {
1004999
private final int appSecBodyParsingSizeLimit;
10051000
private final boolean apiSecurityEnabled;
10061001
private final float apiSecuritySampleDelay;
1007-
private final boolean apiSecurityEndpointCollectionEnabled;
10081002
private final int apiSecurityEndpointCollectionMessageLimit;
10091003
private final int apiSecurityMaxDownstreamRequestBodyAnalysis;
10101004
private final double apiSecurityDownstreamRequestBodyAnalysisSampleRate;
@@ -1227,7 +1221,6 @@ public static String getHostName() {
12271221
private final boolean cwsEnabled;
12281222
private final int cwsTlsRefresh;
12291223

1230-
private final boolean dataJobsEnabled;
12311224
private final boolean dataJobsOpenLineageEnabled;
12321225
private final boolean dataJobsOpenLineageTimeoutEnabled;
12331226
private final boolean dataJobsParseSparkPlanEnabled;
@@ -1288,7 +1281,6 @@ public static String getHostName() {
12881281

12891282
private final boolean telemetryDebugRequestsEnabled;
12901283

1291-
private final boolean agentlessLogSubmissionEnabled;
12921284
private final int agentlessLogSubmissionQueueSize;
12931285
private final String agentlessLogSubmissionLevel;
12941286
private final String agentlessLogSubmissionUrl;
@@ -2245,10 +2237,6 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
22452237
API_SECURITY_ENABLED, DEFAULT_API_SECURITY_ENABLED, API_SECURITY_ENABLED_EXPERIMENTAL);
22462238
apiSecuritySampleDelay =
22472239
configProvider.getFloat(API_SECURITY_SAMPLE_DELAY, DEFAULT_API_SECURITY_SAMPLE_DELAY);
2248-
apiSecurityEndpointCollectionEnabled =
2249-
configProvider.getBoolean(
2250-
API_SECURITY_ENDPOINT_COLLECTION_ENABLED,
2251-
DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED);
22522240
apiSecurityEndpointCollectionMessageLimit =
22532241
configProvider.getInteger(
22542242
API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT,
@@ -2742,7 +2730,6 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
27422730
cwsEnabled = configProvider.getBoolean(CWS_ENABLED, DEFAULT_CWS_ENABLED);
27432731
cwsTlsRefresh = configProvider.getInteger(CWS_TLS_REFRESH, DEFAULT_CWS_TLS_REFRESH);
27442732

2745-
dataJobsEnabled = configProvider.getBoolean(DATA_JOBS_ENABLED, DEFAULT_DATA_JOBS_ENABLED);
27462733
dataJobsOpenLineageEnabled =
27472734
configProvider.getBoolean(
27482735
DATA_JOBS_OPENLINEAGE_ENABLED, DEFAULT_DATA_JOBS_OPENLINEAGE_ENABLED);
@@ -2887,8 +2874,6 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
28872874
configProvider.getBoolean(
28882875
TELEMETRY_DEBUG_REQUESTS_ENABLED, DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED);
28892876

2890-
this.agentlessLogSubmissionEnabled =
2891-
configProvider.getBoolean(AGENTLESS_LOG_SUBMISSION_ENABLED, false);
28922877
this.agentlessLogSubmissionQueueSize =
28932878
configProvider.getInteger(AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE, 1024);
28942879
this.agentlessLogSubmissionLevel =
@@ -3835,7 +3820,7 @@ public double getApiSecurityDownstreamRequestBodyAnalysisSampleRate() {
38353820
}
38363821

38373822
public boolean isApiSecurityEndpointCollectionEnabled() {
3838-
return apiSecurityEndpointCollectionEnabled;
3823+
return instrumenterConfig.isApiSecurityEndpointCollectionEnabled();
38393824
}
38403825

38413826
public ProductActivation getIastActivation() {
@@ -4720,7 +4705,7 @@ public boolean isWebsocketTagSessionId() {
47204705
}
47214706

47224707
public boolean isDataJobsEnabled() {
4723-
return dataJobsEnabled;
4708+
return instrumenterConfig.isDataJobsEnabled();
47244709
}
47254710

47264711
public boolean isDataJobsOpenLineageEnabled() {
@@ -5383,7 +5368,7 @@ public boolean isTelemetryDebugRequestsEnabled() {
53835368
}
53845369

53855370
public boolean isAgentlessLogSubmissionEnabled() {
5386-
return agentlessLogSubmissionEnabled;
5371+
return instrumenterConfig.isAgentlessLogSubmissionEnabled();
53875372
}
53885373

53895374
public int getAgentlessLogSubmissionQueueSize() {
@@ -6111,8 +6096,6 @@ public String toString() {
61116096
+ appSecHttpBlockedTemplateJson
61126097
+ ", apiSecurityEnabled="
61136098
+ apiSecurityEnabled
6114-
+ ", apiSecurityEndpointCollectionEnabled="
6115-
+ apiSecurityEndpointCollectionEnabled
61166099
+ ", apiSecurityEndpointCollectionMessageLimit="
61176100
+ apiSecurityEndpointCollectionMessageLimit
61186101
+ ", cwsEnabled="
@@ -6167,8 +6150,6 @@ public String toString() {
61676150
+ appSecScaEnabled
61686151
+ ", appSecRaspEnabled="
61696152
+ appSecRaspEnabled
6170-
+ ", dataJobsEnabled="
6171-
+ dataJobsEnabled
61726153
+ ", dataJobsOpenLineageEnabled="
61736154
+ dataJobsOpenLineageEnabled
61746155
+ ", dataJobsOpenLineageTimeoutEnabled="

internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package datadog.trace.api;
22

3+
import static datadog.trace.api.ConfigDefaults.DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED;
34
import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_ENABLED;
45
import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_ENABLED;
56
import static datadog.trace.api.ConfigDefaults.DEFAULT_CODE_ORIGIN_FOR_SPANS_ENABLED;
7+
import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_ENABLED;
68
import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_ENABLED;
79
import static datadog.trace.api.ConfigDefaults.DEFAULT_INTEGRATIONS_ENABLED;
810
import static datadog.trace.api.ConfigDefaults.DEFAULT_LLM_OBS_ENABLED;
@@ -20,8 +22,11 @@
2022
import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_OTEL_ENABLED;
2123
import static datadog.trace.api.ConfigDefaults.DEFAULT_USM_ENABLED;
2224
import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_ENABLED;
25+
import static datadog.trace.api.config.AppSecConfig.API_SECURITY_ENDPOINT_COLLECTION_ENABLED;
2326
import static datadog.trace.api.config.AppSecConfig.APPSEC_ENABLED;
2427
import static datadog.trace.api.config.CiVisibilityConfig.CIVISIBILITY_ENABLED;
28+
import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_ENABLED;
29+
import static datadog.trace.api.config.GeneralConfig.DATA_JOBS_ENABLED;
2530
import static datadog.trace.api.config.GeneralConfig.INTERNAL_EXIT_ON_FAILURE;
2631
import static datadog.trace.api.config.GeneralConfig.TELEMETRY_ENABLED;
2732
import static datadog.trace.api.config.GeneralConfig.TRACE_DEBUG;
@@ -193,6 +198,10 @@ public class InstrumenterConfig {
193198
private final Collection<String> additionalJaxRsAnnotations;
194199

195200
private final boolean rumEnabled;
201+
private final boolean dataJobsEnabled;
202+
203+
private final boolean agentlessLogSubmissionEnabled;
204+
private final boolean apiSecurityEndpointCollectionEnabled;
196205

197206
static {
198207
// Bind telemetry collector to config module before initializing ConfigProvider
@@ -227,6 +236,8 @@ private InstrumenterConfig() {
227236
ProfilingEnablement.of(
228237
configProvider.getString(PROFILING_ENABLED, String.valueOf(PROFILING_ENABLED_DEFAULT)));
229238
rumEnabled = configProvider.getBoolean(RUM_ENABLED, DEFAULT_RUM_ENABLED);
239+
dataJobsEnabled = configProvider.getBoolean(DATA_JOBS_ENABLED, DEFAULT_DATA_JOBS_ENABLED);
240+
230241
if (!Platform.isNativeImageBuilder()) {
231242
ciVisibilityEnabled =
232243
configProvider.getBoolean(CIVISIBILITY_ENABLED, DEFAULT_CIVISIBILITY_ENABLED);
@@ -327,6 +338,14 @@ private InstrumenterConfig() {
327338
configProvider.getBoolean(
328339
TRACE_WEBSOCKET_MESSAGES_ENABLED, DEFAULT_WEBSOCKET_MESSAGES_ENABLED);
329340
this.pekkoSchedulerEnabled = configProvider.getBoolean(TRACE_PEKKO_SCHEDULER_ENABLED, false);
341+
342+
agentlessLogSubmissionEnabled =
343+
configProvider.getBoolean(AGENTLESS_LOG_SUBMISSION_ENABLED, false);
344+
345+
apiSecurityEndpointCollectionEnabled =
346+
configProvider.getBoolean(
347+
API_SECURITY_ENDPOINT_COLLECTION_ENABLED,
348+
DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED);
330349
}
331350

332351
public boolean isCodeOriginEnabled() {
@@ -618,6 +637,18 @@ public boolean isRumEnabled() {
618637
return rumEnabled;
619638
}
620639

640+
public boolean isDataJobsEnabled() {
641+
return dataJobsEnabled;
642+
}
643+
644+
public boolean isAgentlessLogSubmissionEnabled() {
645+
return agentlessLogSubmissionEnabled;
646+
}
647+
648+
public boolean isApiSecurityEndpointCollectionEnabled() {
649+
return apiSecurityEndpointCollectionEnabled;
650+
}
651+
621652
// This has to be placed after all other static fields to give them a chance to initialize
622653
private static final InstrumenterConfig INSTANCE =
623654
new InstrumenterConfig(
@@ -723,6 +754,10 @@ public String toString() {
723754
+ pekkoSchedulerEnabled
724755
+ ", rumEnabled="
725756
+ rumEnabled
757+
+ ", dataJobsEnabled="
758+
+ dataJobsEnabled
759+
+ ", apiSecurityEndpointCollectionEnabled="
760+
+ apiSecurityEndpointCollectionEnabled
726761
+ '}';
727762
}
728763
}

0 commit comments

Comments
 (0)