Skip to content

Commit

Permalink
Rename TracerPlugin to TelemetryPlugin (#99735)
Browse files Browse the repository at this point in the history
with the support of metrics the TracerPlugin name is no longer adequate. Renaming this to TelemetryPlugin.
Also introducing TelemetryProvider interface. While it is only used in Node.java at the moment to fetch Tracer instance, it is intended to be used in Plugin::createComponents (to be done in separate commit due to
the broad scope of this method)
This will allow for plugins to get access to both Tracer and Metric interfaces
without the need to add yet another argument to createComponents

Also adding internal subpackage in module/apm so that it is more obvious
which packages are not exported
  • Loading branch information
pgomulka authored Sep 22, 2023
1 parent 343cc80 commit 0efa678
Show file tree
Hide file tree
Showing 12 changed files with 94 additions and 35 deletions.
2 changes: 1 addition & 1 deletion TRACING.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,6 @@ explicitly opening a scope via the `Tracer`.
[otel]: https://opentelemetry.io/
[thread-context]: ./server/src/main/java/org/elasticsearch/common/util/concurrent/ThreadContext.java
[w3c]: https://www.w3.org/TR/trace-context/
[tracing]: ./server/src/main/java/org/elasticsearch/tracing
[tracing]: ./server/src/main/java/org/elasticsearch/telemetry
[agent-config]: https://www.elastic.co/guide/en/apm/agent/java/master/configuration.html
[agent]: https://www.elastic.co/guide/en/apm/agent/java/current/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import java.util.StringJoiner;

/**
* This class is responsible for working out if APM tracing is configured and if so, preparing
* This class is responsible for working out if APM telemetry is configured and if so, preparing
* a temporary config file for the APM Java agent and CLI options to the JVM to configure APM.
* APM doesn't need to be enabled, as that can be toggled at runtime, but some configuration e.g.
* server URL and secret key can only be provided when Elasticsearch starts.
Expand Down Expand Up @@ -128,7 +128,7 @@ class APMJvmOptions {
);

/**
* This method works out if APM tracing is enabled, and if so, prepares a temporary config file
* This method works out if APM telemetry is enabled, and if so, prepares a temporary config file
* for the APM Java agent and CLI options to the JVM to configure APM. The config file is temporary
* because it will be deleted once Elasticsearch starts.
*
Expand Down
24 changes: 13 additions & 11 deletions modules/apm/src/main/java/org/elasticsearch/telemetry/apm/APM.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@
import org.elasticsearch.indices.IndicesService;
import org.elasticsearch.plugins.NetworkPlugin;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.plugins.TracerPlugin;
import org.elasticsearch.plugins.TelemetryPlugin;
import org.elasticsearch.repositories.RepositoriesService;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.telemetry.apm.settings.APMAgentSettings;
import org.elasticsearch.telemetry.apm.tracing.APMTracer;
import org.elasticsearch.telemetry.TelemetryProvider;
import org.elasticsearch.telemetry.apm.internal.APMAgentSettings;
import org.elasticsearch.telemetry.apm.internal.APMTelemetryProvider;
import org.elasticsearch.telemetry.apm.internal.tracing.APMTracer;
import org.elasticsearch.telemetry.tracing.Tracer;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.ResourceWatcherService;
Expand Down Expand Up @@ -55,19 +57,19 @@
* be passed via system properties to the Java agent, which periodically checks for changes
* and applies the new settings values, provided those settings can be dynamically updated.
*/
public class APM extends Plugin implements NetworkPlugin, TracerPlugin {
private final SetOnce<APMTracer> tracer = new SetOnce<>();
public class APM extends Plugin implements NetworkPlugin, TelemetryPlugin {
private final SetOnce<APMTelemetryProvider> telemetryProvider = new SetOnce<>();
private final Settings settings;

public APM(Settings settings) {
this.settings = settings;
}

@Override
public Tracer getTracer(Settings settings) {
final APMTracer apmTracer = new APMTracer(settings);
tracer.set(apmTracer);
return apmTracer;
public TelemetryProvider getTelemetryProvider(Settings settings) {
final APMTelemetryProvider apmTelemetryProvider = new APMTelemetryProvider(settings);
telemetryProvider.set(apmTelemetryProvider);
return apmTelemetryProvider;
}

@Override
Expand All @@ -87,14 +89,14 @@ public Collection<Object> createComponents(
AllocationService allocationService,
IndicesService indicesService
) {
final APMTracer apmTracer = tracer.get();
final APMTracer apmTracer = telemetryProvider.get().getTracer();

apmTracer.setClusterName(clusterService.getClusterName().value());
apmTracer.setNodeName(clusterService.getNodeName());

final APMAgentSettings apmAgentSettings = new APMAgentSettings();
apmAgentSettings.syncAgentSystemProperties(settings);
apmAgentSettings.addClusterSettingsListeners(clusterService, apmTracer);
apmAgentSettings.addClusterSettingsListeners(clusterService, telemetryProvider.get());

return List.of(apmTracer);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Side Public License, v 1.
*/

package org.elasticsearch.telemetry.apm.settings;
package org.elasticsearch.telemetry.apm.internal;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand All @@ -17,7 +17,7 @@
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.core.SuppressForbidden;
import org.elasticsearch.telemetry.apm.tracing.APMTracer;
import org.elasticsearch.telemetry.apm.internal.tracing.APMTracer;

import java.security.AccessController;
import java.security.PrivilegedAction;
Expand All @@ -42,8 +42,10 @@ public class APMAgentSettings {
*/
static Map<String, String> APM_AGENT_DEFAULT_SETTINGS = Map.of("transaction_sample_rate", "0.2");

public void addClusterSettingsListeners(ClusterService clusterService, APMTracer apmTracer) {
public void addClusterSettingsListeners(ClusterService clusterService, APMTelemetryProvider apmTelemetryProvider) {
final ClusterSettings clusterSettings = clusterService.getClusterSettings();
final APMTracer apmTracer = apmTelemetryProvider.getTracer();

clusterSettings.addSettingsUpdateConsumer(APM_ENABLED_SETTING, enabled -> {
apmTracer.setEnabled(enabled);
// The agent records data other than spans, e.g. JVM metrics, so we toggle this setting in order to
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

package org.elasticsearch.telemetry.apm.internal;

import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.telemetry.TelemetryProvider;
import org.elasticsearch.telemetry.apm.internal.tracing.APMTracer;

public class APMTelemetryProvider implements TelemetryProvider {
private final Settings settings;
private final APMTracer apmTracer;

public APMTelemetryProvider(Settings settings) {
this.settings = settings;
apmTracer = new APMTracer(settings);
}

@Override
public APMTracer getTracer() {
return apmTracer;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Side Public License, v 1.
*/

package org.elasticsearch.telemetry.apm.tracing;
package org.elasticsearch.telemetry.apm.internal.tracing;

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
Expand Down Expand Up @@ -43,10 +43,10 @@
import java.util.Map;
import java.util.stream.Collectors;

import static org.elasticsearch.telemetry.apm.settings.APMAgentSettings.APM_ENABLED_SETTING;
import static org.elasticsearch.telemetry.apm.settings.APMAgentSettings.APM_TRACING_NAMES_EXCLUDE_SETTING;
import static org.elasticsearch.telemetry.apm.settings.APMAgentSettings.APM_TRACING_NAMES_INCLUDE_SETTING;
import static org.elasticsearch.telemetry.apm.settings.APMAgentSettings.APM_TRACING_SANITIZE_FIELD_NAMES;
import static org.elasticsearch.telemetry.apm.internal.APMAgentSettings.APM_ENABLED_SETTING;
import static org.elasticsearch.telemetry.apm.internal.APMAgentSettings.APM_TRACING_NAMES_EXCLUDE_SETTING;
import static org.elasticsearch.telemetry.apm.internal.APMAgentSettings.APM_TRACING_NAMES_INCLUDE_SETTING;
import static org.elasticsearch.telemetry.apm.internal.APMAgentSettings.APM_TRACING_SANITIZE_FIELD_NAMES;

/**
* This is an implementation of the {@link org.elasticsearch.telemetry.tracing.Tracer} interface, which uses
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Side Public License, v 1.
*/

package org.elasticsearch.telemetry.apm.settings;
package org.elasticsearch.telemetry.apm.internal;

import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.ESTestCase;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Side Public License, v 1.
*/

package org.elasticsearch.telemetry.apm.tracing;
package org.elasticsearch.telemetry.apm.internal.tracing;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
Expand All @@ -21,7 +21,7 @@
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.ThreadContext;
import org.elasticsearch.tasks.Task;
import org.elasticsearch.telemetry.apm.settings.APMAgentSettings;
import org.elasticsearch.telemetry.apm.internal.APMAgentSettings;
import org.elasticsearch.telemetry.tracing.SpanId;
import org.elasticsearch.test.ESTestCase;

Expand Down
1 change: 1 addition & 0 deletions server/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,7 @@
org.elasticsearch.serverless.constants,
org.elasticsearch.serverless.apifiltering;
exports org.elasticsearch.telemetry.tracing;
exports org.elasticsearch.telemetry;

provides java.util.spi.CalendarDataProvider with org.elasticsearch.common.time.IsoCalendarDataProvider;
provides org.elasticsearch.xcontent.ErrorOnUnknown with org.elasticsearch.common.xcontent.SuggestingErrorOnUnknown;
Expand Down
16 changes: 9 additions & 7 deletions server/src/main/java/org/elasticsearch/node/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@
import org.elasticsearch.plugins.SearchPlugin;
import org.elasticsearch.plugins.ShutdownAwarePlugin;
import org.elasticsearch.plugins.SystemIndexPlugin;
import org.elasticsearch.plugins.TracerPlugin;
import org.elasticsearch.plugins.TelemetryPlugin;
import org.elasticsearch.plugins.internal.DocumentParsingObserver;
import org.elasticsearch.plugins.internal.DocumentParsingObserverPlugin;
import org.elasticsearch.plugins.internal.ReloadAwarePlugin;
Expand Down Expand Up @@ -213,6 +213,7 @@
import org.elasticsearch.tasks.TaskCancellationService;
import org.elasticsearch.tasks.TaskManager;
import org.elasticsearch.tasks.TaskResultsService;
import org.elasticsearch.telemetry.TelemetryProvider;
import org.elasticsearch.telemetry.tracing.Tracer;
import org.elasticsearch.threadpool.ExecutorBuilder;
import org.elasticsearch.threadpool.ThreadPool;
Expand Down Expand Up @@ -456,7 +457,8 @@ protected Node(
Task.HEADERS_TO_COPY.stream()
).collect(Collectors.toSet());

final Tracer tracer = getTracer(pluginsService, settings);
final TelemetryProvider telemetryProvider = getTelemetryProvider(pluginsService, settings);
final Tracer tracer = telemetryProvider.getTracer();

final TaskManager taskManager = new TaskManager(settings, threadPool, taskHeaders, tracer);

Expand Down Expand Up @@ -1287,14 +1289,14 @@ private static ReloadablePlugin wrapPlugins(List<ReloadablePlugin> reloadablePlu
};
}

private Tracer getTracer(PluginsService pluginsService, Settings settings) {
final List<TracerPlugin> tracerPlugins = pluginsService.filterPlugins(TracerPlugin.class);
private TelemetryProvider getTelemetryProvider(PluginsService pluginsService, Settings settings) {
final List<TelemetryPlugin> telemetryPlugins = pluginsService.filterPlugins(TelemetryPlugin.class);

if (tracerPlugins.size() > 1) {
throw new IllegalStateException("A single TracerPlugin was expected but got: " + tracerPlugins);
if (telemetryPlugins.size() > 1) {
throw new IllegalStateException("A single TelemetryPlugin was expected but got: " + telemetryPlugins);
}

return tracerPlugins.isEmpty() ? Tracer.NOOP : tracerPlugins.get(0).getTracer(settings);
return telemetryPlugins.isEmpty() ? TelemetryProvider.NOOP : telemetryPlugins.get(0).getTelemetryProvider(settings);
}

private HealthService createHealthService(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
package org.elasticsearch.plugins;

import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.telemetry.tracing.Tracer;
import org.elasticsearch.telemetry.TelemetryProvider;

public interface TracerPlugin {
Tracer getTracer(Settings settings);
public interface TelemetryPlugin {
TelemetryProvider getTelemetryProvider(Settings settings);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

package org.elasticsearch.telemetry;

import org.elasticsearch.telemetry.tracing.Tracer;

public interface TelemetryProvider {
Tracer getTracer();

TelemetryProvider NOOP = new TelemetryProvider() {

@Override
public Tracer getTracer() {
return Tracer.NOOP;
}

};
}

0 comments on commit 0efa678

Please sign in to comment.