Skip to content

Commit 9ea187d

Browse files
authored
Fix enabling / disabling of APM agent "recording" in APMAgentSettings (#104324)
1 parent e74a79f commit 9ea187d

File tree

3 files changed

+173
-48
lines changed

3 files changed

+173
-48
lines changed

modules/apm/src/main/java/org/elasticsearch/telemetry/apm/APM.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ public Collection<?> createComponents(PluginServices services) {
7070
apmTracer.setNodeName(services.clusterService().getNodeName());
7171

7272
final APMAgentSettings apmAgentSettings = new APMAgentSettings();
73-
apmAgentSettings.syncAgentSystemProperties(settings);
74-
73+
apmAgentSettings.initAgentSystemProperties(settings);
7574
apmAgentSettings.addClusterSettingsListeners(services.clusterService(), telemetryProvider.get());
7675
logger.info("Sending apm metrics is {}", APMAgentSettings.TELEMETRY_METRICS_ENABLED_SETTING.get(settings) ? "enabled" : "disabled");
7776
logger.info("Sending apm tracing is {}", APMAgentSettings.TELEMETRY_TRACING_ENABLED_SETTING.get(settings) ? "enabled" : "disabled");

modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,17 @@ public void addClusterSettingsListeners(ClusterService clusterService, APMTeleme
4545
clusterSettings.addSettingsUpdateConsumer(TELEMETRY_TRACING_ENABLED_SETTING, enabled -> {
4646
apmTracer.setEnabled(enabled);
4747
this.setAgentSetting("instrument", Boolean.toString(enabled));
48+
// The agent records data other than spans, e.g. JVM metrics, so we toggle this setting in order to
49+
// minimise its impact to a running Elasticsearch.
50+
boolean recording = enabled || clusterSettings.get(TELEMETRY_METRICS_ENABLED_SETTING);
51+
this.setAgentSetting("recording", Boolean.toString(recording));
4852
});
4953
clusterSettings.addSettingsUpdateConsumer(TELEMETRY_METRICS_ENABLED_SETTING, enabled -> {
5054
apmMeterService.setEnabled(enabled);
5155
// The agent records data other than spans, e.g. JVM metrics, so we toggle this setting in order to
5256
// minimise its impact to a running Elasticsearch.
53-
this.setAgentSetting("recording", Boolean.toString(enabled));
57+
boolean recording = enabled || clusterSettings.get(TELEMETRY_TRACING_ENABLED_SETTING);
58+
this.setAgentSetting("recording", Boolean.toString(recording));
5459
});
5560
clusterSettings.addSettingsUpdateConsumer(TELEMETRY_TRACING_NAMES_INCLUDE_SETTING, apmTracer::setIncludeNames);
5661
clusterSettings.addSettingsUpdateConsumer(TELEMETRY_TRACING_NAMES_EXCLUDE_SETTING, apmTracer::setExcludeNames);
@@ -59,11 +64,16 @@ public void addClusterSettingsListeners(ClusterService clusterService, APMTeleme
5964
}
6065

6166
/**
62-
* Copies APM settings from the provided settings object into the corresponding system properties.
67+
* Initialize APM settings from the provided settings object into the corresponding system properties.
68+
* Later updates to these settings are synchronized using update consumers.
6369
* @param settings the settings to apply
6470
*/
65-
public void syncAgentSystemProperties(Settings settings) {
66-
this.setAgentSetting("recording", Boolean.toString(TELEMETRY_TRACING_ENABLED_SETTING.get(settings)));
71+
public void initAgentSystemProperties(Settings settings) {
72+
boolean tracing = TELEMETRY_TRACING_ENABLED_SETTING.get(settings);
73+
boolean metrics = TELEMETRY_METRICS_ENABLED_SETTING.get(settings);
74+
75+
this.setAgentSetting("recording", Boolean.toString(tracing || metrics));
76+
this.setAgentSetting("instrument", Boolean.toString(tracing));
6777
// Apply values from the settings in the cluster state
6878
APM_AGENT_SETTINGS.getAsMap(settings).forEach(this::setAgentSetting);
6979
}

0 commit comments

Comments
 (0)