diff --git a/TRACING.md b/TRACING.md index 3935a94eff160..6221305ef455b 100644 --- a/TRACING.md +++ b/TRACING.md @@ -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 diff --git a/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/APMJvmOptions.java b/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/APMJvmOptions.java index 9dcfc1e373a93..898ea9757ec85 100644 --- a/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/APMJvmOptions.java +++ b/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/APMJvmOptions.java @@ -50,10 +50,12 @@ class APMJvmOptions { // by the agent. Don't disable writing to a log file, as the agent will then // require extra Security Manager permissions when it tries to do something // else, and it's just painful. - "log_file", "_AGENT_HOME_/../../logs/apm.log", - + "log_file", "/Users/przemyslawgomulka/workspace/pgomulka/apm.log", + "log_level", "debug", // ES does not use auto-instrumentation. - "instrument", "false" + "instrument", "false", + "experimental", "true", + "enable_experimental_instrumentations", "true" ); /** @@ -82,7 +84,7 @@ class APMJvmOptions { // is doing, leave this value alone. "log_level", "error", "application_packages", "org.elasticsearch,org.apache.lucene", - "metrics_interval", "120s", + "metrics_interval", "5s", "breakdown_metrics", "false", "central_config", "false" ); @@ -316,9 +318,7 @@ static Path findAgentJar(String installDir) throws IOException, UserException { } try (var apmStream = Files.list(apmModule)) { - final List paths = apmStream.filter( - path -> path.getFileName().toString().matches("elastic-apm-agent-\\d+\\.\\d+\\.\\d+\\.jar") - ).toList(); + final List paths = apmStream.filter(path -> path.getFileName().toString().matches("elastic-apm-agent-.*.jar")).toList(); if (paths.size() > 1) { throw new UserException( diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 6cd8d56be9530..cdb0fe45f220c 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -74,6 +74,11 @@ + + + + + diff --git a/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CommonAnalysisPlugin.java b/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CommonAnalysisPlugin.java index 6baa2ddf6c972..dd2fbe8a19bab 100644 --- a/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CommonAnalysisPlugin.java +++ b/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CommonAnalysisPlugin.java @@ -131,7 +131,7 @@ import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptService; import org.elasticsearch.synonyms.SynonymsManagementAPIService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -168,7 +168,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java b/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java index af7386ba9b629..7b60c1a64abb6 100644 --- a/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java +++ b/modules/analysis-common/src/test/java/org/elasticsearch/analysis/common/PredicateTokenScriptFilterTests.java @@ -28,7 +28,7 @@ import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESTokenStreamTestCase; import org.elasticsearch.test.IndexSettingsModule; import org.elasticsearch.threadpool.ThreadPool; @@ -68,7 +68,22 @@ public FactoryType compile(Script script, ScriptContext FactoryType compile(Script script, ScriptContext tracer = new SetOnce<>(); +public class APM extends Plugin implements NetworkPlugin, TelemetryPlugin { + private final SetOnce telemetryProvider = new SetOnce<>(); private final Settings settings; public APM(Settings settings) { @@ -64,10 +66,10 @@ public APM(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 @@ -83,20 +85,22 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer unused, + TelemetryProvider unused, 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); + final APMMetric apmMetric = telemetryProvider.get().getMetric(); + + return List.of(apmTracer, apmMetric); } @Override diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/settings/APMAgentSettings.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java similarity index 93% rename from modules/apm/src/main/java/org/elasticsearch/telemetry/apm/settings/APMAgentSettings.java rename to modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java index 49317ab36543d..4feeb2d9b9f1c 100644 --- a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/settings/APMAgentSettings.java +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java @@ -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; @@ -17,7 +17,8 @@ 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.metrics.APMMetric; +import org.elasticsearch.telemetry.apm.internal.tracing.APMTracer; import java.security.AccessController; import java.security.PrivilegedAction; @@ -40,12 +41,21 @@ public class APMAgentSettings { * Sensible defaults that Elasticsearch configures. This cannot be done via the APM agent * config file, as then their values could not be overridden dynamically via system properties. */ - static Map APM_AGENT_DEFAULT_SETTINGS = Map.of("transaction_sample_rate", "0.2"); + static Map APM_AGENT_DEFAULT_SETTINGS = Map.of( + "transaction_sample_rate", + "0.2", + "enable_experimental_instrumentations", + "true" + ); - public void addClusterSettingsListeners(ClusterService clusterService, APMTracer apmTracer) { + public void addClusterSettingsListeners(ClusterService clusterService, APMTelemetryProvider apmTelemetryProvider) { final ClusterSettings clusterSettings = clusterService.getClusterSettings(); + final APMTracer apmTracer = apmTelemetryProvider.getTracer(); + final APMMetric apmMetric = apmTelemetryProvider.getMetric(); + clusterSettings.addSettingsUpdateConsumer(APM_ENABLED_SETTING, enabled -> { apmTracer.setEnabled(enabled); + apmMetric.setEnabled(enabled); // The agent records data other than spans, e.g. JVM metrics, so we toggle this setting in order to // minimise its impact to a running Elasticsearch. this.setAgentSetting("recording", Boolean.toString(enabled)); diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMTelemetryProvider.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMTelemetryProvider.java new file mode 100644 index 0000000000000..4a70b65c74761 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMTelemetryProvider.java @@ -0,0 +1,36 @@ +/* + * 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.metrics.APMMetric; +import org.elasticsearch.telemetry.apm.internal.tracing.APMTracer; + +public class APMTelemetryProvider implements TelemetryProvider { + private final Settings settings; + private final APMTracer apmTracer; + private final APMMetric apmMetric; + + public APMTelemetryProvider(Settings settings) { + this.settings = settings; + apmTracer = new APMTracer(settings); + apmMetric = new APMMetric(settings); + } + + @Override + public APMTracer getTracer() { + return apmTracer; + } + + @Override + public APMMetric getMetric() { + return apmMetric; + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/APMMetric.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/APMMetric.java new file mode 100644 index 0000000000000..43efdef640594 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/APMMetric.java @@ -0,0 +1,197 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.component.AbstractLifecycleComponent; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.util.LazyInitializable; +import org.elasticsearch.telemetry.MetricName; +import org.elasticsearch.telemetry.metric.DoubleCounter; +import org.elasticsearch.telemetry.metric.DoubleGauge; +import org.elasticsearch.telemetry.metric.DoubleHistogram; +import org.elasticsearch.telemetry.metric.DoubleUpDownCounter; +import org.elasticsearch.telemetry.metric.LongCounter; +import org.elasticsearch.telemetry.metric.LongGauge; +import org.elasticsearch.telemetry.metric.LongHistogram; +import org.elasticsearch.telemetry.metric.LongUpDownCounter; + +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +import static org.elasticsearch.telemetry.apm.internal.APMAgentSettings.APM_ENABLED_SETTING; + +public class APMMetric extends AbstractLifecycleComponent implements org.elasticsearch.telemetry.metric.Metric { + + private final InstrumentRegistrar doubleCounters = new InstrumentRegistrar<>(); + private final InstrumentRegistrar doubleUpDownCounters = new InstrumentRegistrar<>(); + private final InstrumentRegistrar doubleGauges = new InstrumentRegistrar<>(); + private final InstrumentRegistrar doubleHistograms = new InstrumentRegistrar<>(); + private final InstrumentRegistrar longCounters = new InstrumentRegistrar<>(); + private final InstrumentRegistrar longUpDownCounters = new InstrumentRegistrar<>(); + private final InstrumentRegistrar longGauges = new InstrumentRegistrar<>(); + private final InstrumentRegistrar longHistograms = new InstrumentRegistrar<>(); + private volatile boolean enabled; + private AtomicReference services = new AtomicReference<>(); + + private final List allRegisteredInstruments = new ArrayList<>(); + + record APMServices(Meter meter, OpenTelemetry openTelemetry) {} + + // TODO remove duplication between APMTracer and APMMetric. enabled, create apm services etc + public APMMetric(Settings settings) { + this.enabled = APM_ENABLED_SETTING.get(settings); + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + if (enabled) { + createApmServices(); + allRegisteredInstruments.forEach(si -> si.setEnabled(true)); + } else { + allRegisteredInstruments.forEach(si -> si.setEnabled(false)); + destroyApmServices(); + } + + } + + @Override + protected void doStart() { + if (enabled) { + createApmServices(); + } + } + + @Override + protected void doStop() { + destroyApmServices(); + } + + @Override + protected void doClose() {} + + @Override + public DoubleCounter registerDoubleCounter(MetricName name, String description, T unit) { + var counter = OtelDoubleCounter.build(()->services.get().meter, name, description, unit); + doubleCounters.register(counter); + allRegisteredInstruments.add(counter); + return counter; + } + + @Override + public DoubleUpDownCounter registerDoubleUpDownCounter(MetricName name, String description, T unit) { + var counter = OtelDoubleUpDownCounter.build(services.get().meter, name, description, unit); + doubleUpDownCounters.register(counter); + allRegisteredInstruments.add(counter); + + return counter; + } + + @Override + public DoubleGauge registerDoubleGauge(MetricName name, String description, T unit) { + var gauge = OtelDoubleGauge.build(services.get().meter, name, description, unit); + doubleGauges.register(gauge); + allRegisteredInstruments.add(gauge); + + return gauge; + } + + @Override + public DoubleHistogram registerDoubleHistogram(MetricName name, String description, T unit) { + var histogram = OtelDoubleHistogram.build(services.get().meter, name, description, unit); + doubleHistograms.register(histogram); + allRegisteredInstruments.add(histogram); + return histogram; + } + + @Override + public LongCounter registerLongCounter(MetricName name, String description, T unit) { + var lazyCounter = new LazyInitializable<>( + () -> services.get().meter.counterBuilder(name.getRawName()).setDescription(description).setUnit(unit.toString()).build() + ); + var counter = OtelLongCounter.build(lazyCounter,services.get().meter, name, description, unit); + longCounters.register(counter); + allRegisteredInstruments.add(counter); + + return counter; + } + + @Override + public LongUpDownCounter registerLongUpDownCounter(MetricName name, String description, T unit) { + + var lazyCounter = new LazyInitializable<>( + () -> services.get().meter.upDownCounterBuilder(name.getRawName()).setDescription(description).setUnit(unit.toString()).build() + ); + var counter = OtelLongUpDownCounter.build(lazyCounter,services.get().meter, name, description, unit); + longUpDownCounters.register(counter); + allRegisteredInstruments.add(counter); + + return counter; + } + + @Override + public LongGauge registerLongGauge(MetricName name, String description, T unit) { + + var lazyGauge = new LazyInitializable<>( + () -> services.get().meter.gaugeBuilder(name.getRawName()) + .ofLongs() + .setDescription(description) + .setUnit(unit.toString()) + .buildObserver() + ); + + var gauge = OtelLongGauge.build(lazyGauge, services.get().meter, name, description, unit); + longGauges.register(gauge); + allRegisteredInstruments.add(gauge); + + return gauge; + } + + @Override + public LongHistogram registerLongHistogram(MetricName name, String description, T unit) { + + var lazyHistogram = new LazyInitializable<>( + () -> services.get().meter.histogramBuilder(name.getRawName()) + .ofLongs() + .setDescription(description) + .setUnit(unit.toString()) + .build() + ); + + var histogram = OtelLongHistogram.build(lazyHistogram,services.get().meter, name, description, unit); + longHistograms.register(histogram); + allRegisteredInstruments.add(histogram); + + return histogram; + } + + void createApmServices() { + assert this.enabled; + assert this.services.get() == null; + + AccessController.doPrivileged((PrivilegedAction) () -> { + var openTelemetry = GlobalOpenTelemetry.get(); + var meter = openTelemetry.getMeter("elasticsearch"); + + this.services.set(new APMServices(meter, openTelemetry)); + return null; + }); + } + + private void destroyApmServices() { + this.services.set(null); + } + +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/InstrumentRegistrar.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/InstrumentRegistrar.java new file mode 100644 index 0000000000000..5812ed02200b8 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/InstrumentRegistrar.java @@ -0,0 +1,35 @@ +/* + * 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.metrics; + +import org.elasticsearch.common.util.concurrent.ConcurrentCollections; +import org.elasticsearch.telemetry.MetricName; +import org.elasticsearch.telemetry.metric.Instrument; + +import java.util.Map; + +public class InstrumentRegistrar { + private final Map registered = ConcurrentCollections.newConcurrentMap(); + + void register(T instrument) { + registered.compute(instrument.getName(), (k, v) -> { + if (v != null) { + throw new IllegalStateException( + instrument.getClass().getSimpleName() + "[" + instrument.getName().getRawName() + "] already registered" + ); + } + + return instrument; + }); + } + + T get(MetricName name) { + return registered.get(name); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleCounter.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleCounter.java new file mode 100644 index 0000000000000..7a6080fd4304f --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleCounter.java @@ -0,0 +1,77 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; +import org.elasticsearch.telemetry.metric.DoubleCounter; + +import java.util.Map; +import java.util.function.Function; + +public class OtelDoubleCounter extends SwitchableInstrument implements DoubleCounter { + private final MetricName name; + private final String description; + private final T unit; + + private OtelDoubleCounter( + Function producer, + Meter meter, + MetricName name, + String description, + T unit + ) { + super(producer, meter); + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelDoubleCounter build(Meter meter, MetricName name, String description, T unit) { + return new OtelDoubleCounter<>((m) -> createInstrument(m, name, description, unit), meter, name, description, unit); + } + + private static io.opentelemetry.api.metrics.DoubleCounter createInstrument( + Meter meter, + MetricName name, + String description, + T unit + ) { + return meter.counterBuilder(name.getRawName()).ofDoubles().setDescription(description).setUnit(unit.toString()).build(); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void increment() { + getInstrument().add(1d); + } + + @Override + public void incrementBy(double inc) { + assert inc >= 0; + getInstrument().add(inc); + } + + @Override + public void incrementBy(double inc, Map attributes) { + assert inc >= 0; + getInstrument().add(inc, OtelHelper.fromMap(attributes)); + } + + @Override + public void incrementBy(double inc, Map attributes, ThreadContext threadContext) { + throw new UnsupportedOperationException("unimplemented"); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleGauge.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleGauge.java new file mode 100644 index 0000000000000..3d05a422216ae --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleGauge.java @@ -0,0 +1,60 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.Meter; +import io.opentelemetry.api.metrics.ObservableDoubleMeasurement; + +import org.elasticsearch.telemetry.MetricName; +import org.elasticsearch.telemetry.metric.DoubleGauge; + +import java.util.Map; +import java.util.function.Function; + +public class OtelDoubleGauge extends SwitchableInstrument implements DoubleGauge { + private final MetricName name; + private final String description; + private final T unit; + + private OtelDoubleGauge( + Function instrumentProducer, + Meter meter, + MetricName name, + String description, + T unit + ) { + super(instrumentProducer, meter); + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelDoubleGauge build(Meter meter, MetricName name, String description, T unit) { + return new OtelDoubleGauge<>((m) -> createInstrument(meter, name, description, unit), meter, name, description, unit); + } + + private static ObservableDoubleMeasurement createInstrument(Meter meter, MetricName name, String description, T unit) { + return meter.gaugeBuilder(name.getRawName()).setDescription(description).setUnit(unit.toString()).buildObserver(); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void record(double value) { + getInstrument().record(value); + } + + @Override + public void record(double value, Map attributes) { + getInstrument().record(value, OtelHelper.fromMap(attributes)); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleHistogram.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleHistogram.java new file mode 100644 index 0000000000000..059a302657869 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleHistogram.java @@ -0,0 +1,73 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.util.LazyInitializable; +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; +import org.elasticsearch.telemetry.metric.DoubleHistogram; + +import java.util.Map; +import java.util.function.Function; + +public class OtelDoubleHistogram extends SwitchableInstrument implements DoubleHistogram { + private final MetricName name; + private final String description; + private final T unit; + + public OtelDoubleHistogram( + Function instrumentProducer, + Meter meter, + MetricName name, + String description, + T unit + ) { + super(instrumentProducer, meter); + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelDoubleHistogram build( + Meter meter, + MetricName name, + String description, + T unit + ) { + return new OtelDoubleHistogram<>( + (m) -> createInstrument(m, name, description, unit) + , meter, name, description, unit); + } + + private static io.opentelemetry.api.metrics.DoubleHistogram createInstrument(Meter meter, MetricName name, String description, T unit) { + return meter.histogramBuilder(name.getRawName()).setDescription(description).setUnit(unit.toString()).build(); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void record(double value) { + getInstrument().record(value); + } + + @Override + public void record(double value, Map attributes) { + getInstrument().record(value, OtelHelper.fromMap(attributes)); + } + + @Override + public void record(double value, Map attributes, ThreadContext threadContext) { + throw new UnsupportedOperationException("unimplemented"); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleUpDownCounter.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleUpDownCounter.java new file mode 100644 index 0000000000000..350512b5f7180 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelDoubleUpDownCounter.java @@ -0,0 +1,67 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.DoubleUpDownCounter; +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; +import java.util.function.Function; + +public class OtelDoubleUpDownCounter extends SwitchableInstrument + implements + org.elasticsearch.telemetry.metric.DoubleUpDownCounter { + private final MetricName name; + private final String description; + private final T unit; + + private OtelDoubleUpDownCounter( + Function instanceProducer, + Meter metric, + MetricName name, + String description, + T unit + ) { + super(instanceProducer, metric); + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelDoubleUpDownCounter build(Meter meter, MetricName name, String description, T unit) { + return new OtelDoubleUpDownCounter<>((m) -> createInstrument(m, name, description, unit), meter, name, description, unit); + } + + private static DoubleUpDownCounter createInstrument(Meter meter, MetricName name, String description, T unit) { + return meter.upDownCounterBuilder(name.getRawName()).ofDoubles().setDescription(description).setUnit(unit.toString()).build(); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void add(double inc) { + getInstrument().add(inc); + } + + @Override + public void add(double inc, Map attributes) { + getInstrument().add(inc, OtelHelper.fromMap(attributes)); + } + + @Override + public void add(double inc, Map attributes, ThreadContext threadContext) { + throw new UnsupportedOperationException("unimplemented"); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelHelper.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelHelper.java new file mode 100644 index 0000000000000..673025a1a41f4 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelHelper.java @@ -0,0 +1,36 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.common.Attributes; + +import java.util.Map; + +class OtelHelper { + static Attributes fromMap(Map attributes) { + if (attributes == null || attributes.isEmpty()) { + return Attributes.empty(); + } + var builder = Attributes.builder(); + attributes.forEach((k, v) -> { + if (v instanceof String value) { + builder.put(k, value); + } else if (v instanceof Long value) { + builder.put(k, value); + } else if (v instanceof Double value) { + builder.put(k, value); + } else if (v instanceof Boolean value) { + builder.put(k, value); + } else { + throw new IllegalArgumentException("attributes do not support value type of [" + v.getClass().getCanonicalName() + "]"); + } + }); + return builder.build(); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongCounter.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongCounter.java new file mode 100644 index 0000000000000..2d47c33591652 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongCounter.java @@ -0,0 +1,71 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.LongCounter; + +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.util.LazyInitializable; +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public class OtelLongCounter extends SwitchableInstrument implements org.elasticsearch.telemetry.metric.LongCounter { + private final LazyInitializable counter; + private final MetricName name; + private final String description; + private final T unit; + + private OtelLongCounter(LazyInitializable lazyCounter, MetricName name, String description, T unit, Meter meter) { + super(null, null); + this.counter = lazyCounter; + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelLongCounter build( + LazyInitializable lazyCounter, + Meter meter, + MetricName name, + String description, + T unit + ) { + return new OtelLongCounter<>(lazyCounter, name, description, unit, meter); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void increment() { + counter.getOrCompute().add(1L); + } + + @Override + public void incrementBy(long inc) { + assert inc >= 0; + counter.getOrCompute().add(inc); + } + + @Override + public void incrementBy(long inc, Map attributes) { + assert inc >= 0; + counter.getOrCompute().add(inc, OtelHelper.fromMap(attributes)); + } + + @Override + public void incrementBy(double inc, Map attributes, ThreadContext threadContext) { + throw new UnsupportedOperationException("unimplemented"); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongGauge.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongGauge.java new file mode 100644 index 0000000000000..628837d8e166e --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongGauge.java @@ -0,0 +1,63 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.Meter; +import io.opentelemetry.api.metrics.ObservableLongMeasurement; + +import org.elasticsearch.common.util.LazyInitializable; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public class OtelLongGauge extends SwitchableInstrument implements org.elasticsearch.telemetry.metric.LongGauge { + private final LazyInitializable gauge; + private final MetricName name; + private final String description; + private final T unit; + + private OtelLongGauge( + LazyInitializable gauge, + MetricName name, + String description, + T unit + ) { + super(null, null); + + this.gauge = gauge; + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelLongGauge build( + LazyInitializable lazyGauge, + Meter meter, + MetricName name, + String description, + T unit + ) { + return new OtelLongGauge<>(lazyGauge, name, description, unit); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void record(long value) { + gauge.getOrCompute().record(value); + } + + @Override + public void record(long value, Map attributes) { + gauge.getOrCompute().record(value, OtelHelper.fromMap(attributes)); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongHistogram.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongHistogram.java new file mode 100644 index 0000000000000..ae503ea8953a0 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongHistogram.java @@ -0,0 +1,68 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.util.LazyInitializable; +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public class OtelLongHistogram extends SwitchableInstrument implements org.elasticsearch.telemetry.metric.LongHistogram { + private final LazyInitializable histogram; + private final MetricName name; + private final String description; + private final T unit; + + public OtelLongHistogram( + LazyInitializable histogram, + MetricName name, + String description, + T unit + ) { + super(null, null); + + this.histogram = histogram; + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelLongHistogram build( + LazyInitializable lazyHistogram, + Meter meter, + MetricName name, + String description, + T unit + ) { + return new OtelLongHistogram<>(lazyHistogram, name, description, unit); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void record(long value) { + histogram.getOrCompute().record(value); + } + + @Override + public void record(long value, Map attributes) { + histogram.getOrCompute().record(value, OtelHelper.fromMap(attributes)); + } + + @Override + public void record(long value, Map attributes, ThreadContext threadContext) { + throw new UnsupportedOperationException("unimplemented"); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongUpDownCounter.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongUpDownCounter.java new file mode 100644 index 0000000000000..b8e5edee58a54 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/OtelLongUpDownCounter.java @@ -0,0 +1,70 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.metrics.LongUpDownCounter; + +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.util.LazyInitializable; +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public class OtelLongUpDownCounter extends SwitchableInstrument implements org.elasticsearch.telemetry.metric.LongUpDownCounter { + private final LazyInitializable counter; + private final MetricName name; + private final String description; + private final T unit; + + private OtelLongUpDownCounter( + LazyInitializable lazyCounter, + MetricName name, + String description, + T unit + ) { + super(null, null); + + this.counter = lazyCounter; + this.name = name; + this.description = description; + this.unit = unit; + } + + public static OtelLongUpDownCounter build( + LazyInitializable lazyCounter, + Meter meter, + MetricName name, + String description, + T unit + ) { + return new OtelLongUpDownCounter<>(lazyCounter, name, description, unit); + } + + @Override + public MetricName getName() { + return name; + } + + @Override + public void add(long inc) { + counter.getOrCompute().add(inc); + } + + @Override + public void add(long inc, Map attributes) { + counter.getOrCompute().add(inc, OtelHelper.fromMap(attributes)); + } + + @Override + public void add(long inc, Map attributes, ThreadContext threadContext) { + throw new UnsupportedOperationException("unimplemented"); + } +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/SwitchableInstrument.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/SwitchableInstrument.java new file mode 100644 index 0000000000000..6822d5a070906 --- /dev/null +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/metrics/SwitchableInstrument.java @@ -0,0 +1,45 @@ +/* + * 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.metrics; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.metrics.Meter; + +import org.elasticsearch.common.util.LazyInitializable; + +import java.util.function.Function; + +public abstract class SwitchableInstrument { + private static final Meter NOOP_METER = OpenTelemetry.noop().getMeter("elasticsearch"); + private final LazyInitializable instrument; + private final T noopInstrument; + private volatile boolean enabled; + + public SwitchableInstrument(Function instrumentProducer, Meter meter) { + this.instrument = new LazyInitializable<>(() -> instrumentProducer.apply(meter)); + this.noopInstrument = instrumentProducer.apply(NOOP_METER); + } + + void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isEnabled() { + return enabled; + } + + public T getInstrument() { + if (enabled) { + return instrument.getOrCompute(); + } else { + return noopInstrument; + } + } + +} diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/tracing/APMTracer.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/tracing/APMTracer.java similarity index 97% rename from modules/apm/src/main/java/org/elasticsearch/telemetry/apm/tracing/APMTracer.java rename to modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/tracing/APMTracer.java index fc390f1c3d603..b8e3a113dcb68 100644 --- a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/tracing/APMTracer.java +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/tracing/APMTracer.java @@ -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; @@ -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 @@ -150,7 +150,6 @@ APMServices createApmServices() { return AccessController.doPrivileged((PrivilegedAction) () -> { var openTelemetry = GlobalOpenTelemetry.get(); var tracer = openTelemetry.getTracer("elasticsearch", Version.CURRENT.toString()); - return new APMServices(tracer, openTelemetry); }); } @@ -424,6 +423,11 @@ Map getSpans() { return spans; } + // TODO(stu): remove + APMServices getServices() { + return services; + } + private static CharacterRunAutomaton buildAutomaton(List includePatterns, List excludePatterns) { Automaton includeAutomaton = patternsToAutomaton(includePatterns); Automaton excludeAutomaton = patternsToAutomaton(excludePatterns); @@ -452,4 +456,5 @@ private static Automaton patternsToAutomaton(List patterns) { } return Operations.union(automata); } + } diff --git a/modules/apm/src/main/plugin-metadata/plugin-security.policy b/modules/apm/src/main/plugin-metadata/plugin-security.policy index b85d3ec05c277..450896fe151ec 100644 --- a/modules/apm/src/main/plugin-metadata/plugin-security.policy +++ b/modules/apm/src/main/plugin-metadata/plugin-security.policy @@ -10,10 +10,12 @@ grant { permission java.lang.RuntimePermission "accessSystemModules"; permission java.lang.RuntimePermission "createClassLoader"; permission java.lang.RuntimePermission "getClassLoader"; - permission java.util.PropertyPermission "elastic.apm.*", "write"; + permission java.util.PropertyPermission "*", "read,write"; + }; grant codeBase "${codebase.elastic-apm-agent}" { + permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.RuntimePermission "setContextClassLoader"; permission java.lang.RuntimePermission "setFactory"; diff --git a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/settings/APMAgentSettingsTests.java b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java similarity index 98% rename from modules/apm/src/test/java/org/elasticsearch/telemetry/apm/settings/APMAgentSettingsTests.java rename to modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java index 3d95c9f85f5e5..b22a57bb9bf0c 100644 --- a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/settings/APMAgentSettingsTests.java +++ b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java @@ -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; diff --git a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/tracing/APMTracerTests.java b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/tracing/APMTracerTests.java similarity index 99% rename from modules/apm/src/test/java/org/elasticsearch/telemetry/apm/tracing/APMTracerTests.java rename to modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/tracing/APMTracerTests.java index ffe719197c59f..8cb94b782756d 100644 --- a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/tracing/APMTracerTests.java +++ b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/tracing/APMTracerTests.java @@ -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; @@ -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; diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java index 3ec77b848d168..de128c685ae98 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java @@ -70,7 +70,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -170,7 +170,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/IngestGeoIpPlugin.java b/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/IngestGeoIpPlugin.java index fd40643281da2..afc6fa8a1c92a 100644 --- a/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/IngestGeoIpPlugin.java +++ b/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/IngestGeoIpPlugin.java @@ -48,7 +48,7 @@ import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; import org.elasticsearch.tasks.Task; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -119,7 +119,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java index 34e5ed3a5e5b7..52eccbe0dce90 100644 --- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java +++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessPlugin.java @@ -43,7 +43,7 @@ import org.elasticsearch.script.ScriptEngine; import org.elasticsearch.script.ScriptModule; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -147,7 +147,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/reindex/src/main/java/org/elasticsearch/reindex/ReindexPlugin.java b/modules/reindex/src/main/java/org/elasticsearch/reindex/ReindexPlugin.java index 569c510788b7f..e79f9bdaffee9 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/reindex/ReindexPlugin.java +++ b/modules/reindex/src/main/java/org/elasticsearch/reindex/ReindexPlugin.java @@ -35,7 +35,7 @@ import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; import org.elasticsearch.tasks.Task; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -100,7 +100,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/reindex/src/test/java/org/elasticsearch/reindex/ReindexFromRemoteWithAuthTests.java b/modules/reindex/src/test/java/org/elasticsearch/reindex/ReindexFromRemoteWithAuthTests.java index 3be475a9483bf..55b7b2cc902cc 100644 --- a/modules/reindex/src/test/java/org/elasticsearch/reindex/ReindexFromRemoteWithAuthTests.java +++ b/modules/reindex/src/test/java/org/elasticsearch/reindex/ReindexFromRemoteWithAuthTests.java @@ -45,7 +45,7 @@ import org.elasticsearch.rest.root.MainRestPlugin; import org.elasticsearch.script.ScriptService; import org.elasticsearch.tasks.Task; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESSingleNodeTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.netty4.Netty4Plugin; @@ -176,7 +176,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/repository-azure/src/main/java/org/elasticsearch/repositories/azure/AzureRepositoryPlugin.java b/modules/repository-azure/src/main/java/org/elasticsearch/repositories/azure/AzureRepositoryPlugin.java index cc57692f7ba0c..f88a96e765827 100644 --- a/modules/repository-azure/src/main/java/org/elasticsearch/repositories/azure/AzureRepositoryPlugin.java +++ b/modules/repository-azure/src/main/java/org/elasticsearch/repositories/azure/AzureRepositoryPlugin.java @@ -30,7 +30,7 @@ import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.repositories.Repository; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.ScalingExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -96,7 +96,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceTests.java b/modules/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceTests.java index fad293030cbd2..a7a10a17668bc 100644 --- a/modules/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceTests.java +++ b/modules/repository-azure/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceTests.java @@ -14,7 +14,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.SettingsException; import org.elasticsearch.common.settings.SettingsModule; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.threadpool.TestThreadPool; import org.elasticsearch.threadpool.ThreadPool; @@ -73,7 +73,7 @@ public void testReadSecuredSettings() { private AzureRepositoryPlugin pluginWithSettingsValidation(Settings settings) { final AzureRepositoryPlugin plugin = new AzureRepositoryPlugin(settings); new SettingsModule(settings, plugin.getSettings(), Collections.emptyList()); - plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, Tracer.NOOP, null, null); + plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, TelemetryProvider.NOOP, null, null); return plugin; } diff --git a/modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3RepositoryPlugin.java b/modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3RepositoryPlugin.java index 120d421fdf48c..62fe279726164 100644 --- a/modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3RepositoryPlugin.java +++ b/modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3RepositoryPlugin.java @@ -31,7 +31,7 @@ import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.repositories.Repository; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -102,7 +102,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/repository-url/src/main/java/org/elasticsearch/plugin/repository/url/URLRepositoryPlugin.java b/modules/repository-url/src/main/java/org/elasticsearch/plugin/repository/url/URLRepositoryPlugin.java index 78044ae35c5a0..8057684375d69 100644 --- a/modules/repository-url/src/main/java/org/elasticsearch/plugin/repository/url/URLRepositoryPlugin.java +++ b/modules/repository-url/src/main/java/org/elasticsearch/plugin/repository/url/URLRepositoryPlugin.java @@ -28,7 +28,7 @@ import org.elasticsearch.repositories.Repository; import org.elasticsearch.repositories.url.URLRepository; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -88,7 +88,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/runtime-fields-common/src/main/java/org/elasticsearch/runtimefields/RuntimeFieldsCommonPlugin.java b/modules/runtime-fields-common/src/main/java/org/elasticsearch/runtimefields/RuntimeFieldsCommonPlugin.java index 2dc26f665633c..6cad1e057ef74 100644 --- a/modules/runtime-fields-common/src/main/java/org/elasticsearch/runtimefields/RuntimeFieldsCommonPlugin.java +++ b/modules/runtime-fields-common/src/main/java/org/elasticsearch/runtimefields/RuntimeFieldsCommonPlugin.java @@ -22,7 +22,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -76,7 +76,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/systemd/src/main/java/org/elasticsearch/systemd/SystemdPlugin.java b/modules/systemd/src/main/java/org/elasticsearch/systemd/SystemdPlugin.java index db119761641aa..f425de279129b 100644 --- a/modules/systemd/src/main/java/org/elasticsearch/systemd/SystemdPlugin.java +++ b/modules/systemd/src/main/java/org/elasticsearch/systemd/SystemdPlugin.java @@ -26,7 +26,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.Scheduler; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -92,7 +92,7 @@ public Collection createComponents( final NamedWriteableRegistry namedWriteableRegistry, final IndexNameExpressionResolver expressionResolver, final Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/modules/systemd/src/test/java/org/elasticsearch/systemd/SystemdPluginTests.java b/modules/systemd/src/test/java/org/elasticsearch/systemd/SystemdPluginTests.java index 3b7318c8d20f2..b2bfbdb976eb9 100644 --- a/modules/systemd/src/test/java/org/elasticsearch/systemd/SystemdPluginTests.java +++ b/modules/systemd/src/test/java/org/elasticsearch/systemd/SystemdPluginTests.java @@ -12,7 +12,7 @@ import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.core.CheckedConsumer; import org.elasticsearch.core.TimeValue; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.hamcrest.OptionalMatchers; import org.elasticsearch.threadpool.Scheduler; @@ -60,28 +60,28 @@ public class SystemdPluginTests extends ESTestCase { public void testIsEnabled() { final SystemdPlugin plugin = new SystemdPlugin(false, randomPackageBuildType, Boolean.TRUE.toString()); - plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, Tracer.NOOP, null, null); + plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, TelemetryProvider.NOOP, null, null); assertTrue(plugin.isEnabled()); assertNotNull(plugin.extender()); } public void testIsNotPackageDistribution() { final SystemdPlugin plugin = new SystemdPlugin(false, randomNonPackageBuildType, Boolean.TRUE.toString()); - plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, Tracer.NOOP, null, null); + plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, TelemetryProvider.NOOP, null, null); assertFalse(plugin.isEnabled()); assertNull(plugin.extender()); } public void testIsImplicitlyNotEnabled() { final SystemdPlugin plugin = new SystemdPlugin(false, randomPackageBuildType, null); - plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, Tracer.NOOP, null, null); + plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, TelemetryProvider.NOOP, null, null); assertFalse(plugin.isEnabled()); assertNull(plugin.extender()); } public void testIsExplicitlyNotEnabled() { final SystemdPlugin plugin = new SystemdPlugin(false, randomPackageBuildType, Boolean.FALSE.toString()); - plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, Tracer.NOOP, null, null); + plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, TelemetryProvider.NOOP, null, null); assertFalse(plugin.isEnabled()); assertNull(plugin.extender()); } @@ -169,7 +169,7 @@ int sd_notify(final int unset_environment, final String state) { } }; - plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, Tracer.NOOP, null, null); + plugin.createComponents(null, null, threadPool, null, null, null, null, null, null, null, null, TelemetryProvider.NOOP, null, null); if (Boolean.TRUE.toString().equals(esSDNotify)) { assertNotNull(plugin.extender()); } else { diff --git a/server/src/internalClusterTest/java/org/elasticsearch/cluster/SimpleClusterStateIT.java b/server/src/internalClusterTest/java/org/elasticsearch/cluster/SimpleClusterStateIT.java index 58b824e4676f2..5731163def260 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/cluster/SimpleClusterStateIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/cluster/SimpleClusterStateIT.java @@ -37,7 +37,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -415,7 +415,7 @@ public Collection createComponents( final NamedWriteableRegistry namedWriteableRegistry, final IndexNameExpressionResolver expressionResolver, final Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/TemplateUpgradeServiceIT.java b/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/TemplateUpgradeServiceIT.java index 448bfdb301aeb..aff04ca521844 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/TemplateUpgradeServiceIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/cluster/metadata/TemplateUpgradeServiceIT.java @@ -22,7 +22,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -77,7 +77,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { @@ -96,7 +96,7 @@ public Collection createComponents( namedWriteableRegistry, expressionResolver, repositoriesServiceSupplier, - tracer, + telemetryProvider, allocationService, indicesService ); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/health/GetHealthActionIT.java b/server/src/internalClusterTest/java/org/elasticsearch/health/GetHealthActionIT.java index de42c95d79476..11d32bb231a01 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/health/GetHealthActionIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/health/GetHealthActionIT.java @@ -27,7 +27,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -107,7 +107,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/internalClusterTest/java/org/elasticsearch/health/HealthServiceIT.java b/server/src/internalClusterTest/java/org/elasticsearch/health/HealthServiceIT.java index a4333d51163dc..707644e28228a 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/health/HealthServiceIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/health/HealthServiceIT.java @@ -27,7 +27,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.test.InternalTestCluster; import org.elasticsearch.threadpool.ThreadPool; @@ -136,7 +136,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/internalClusterTest/java/org/elasticsearch/index/FinalPipelineIT.java b/server/src/internalClusterTest/java/org/elasticsearch/index/FinalPipelineIT.java index 60a1e7b5bddbc..165242128ca8a 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/index/FinalPipelineIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/index/FinalPipelineIT.java @@ -38,7 +38,7 @@ import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.rest.RestStatus; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -405,7 +405,7 @@ public Collection createComponents( final NamedWriteableRegistry namedWriteableRegistry, final IndexNameExpressionResolver expressionResolver, final Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/internalClusterTest/java/org/elasticsearch/index/SettingsListenerIT.java b/server/src/internalClusterTest/java/org/elasticsearch/index/SettingsListenerIT.java index bbb6ae9d16fc5..fb0e3478c2cde 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/index/SettingsListenerIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/index/SettingsListenerIT.java @@ -22,7 +22,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.test.ESIntegTestCase.ClusterScope; import org.elasticsearch.threadpool.ThreadPool; @@ -75,7 +75,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/internalClusterTest/java/org/elasticsearch/ingest/IngestAsyncProcessorIT.java b/server/src/internalClusterTest/java/org/elasticsearch/ingest/IngestAsyncProcessorIT.java index f5453c8ddf1f1..f8d2b0e464b72 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/ingest/IngestAsyncProcessorIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/ingest/IngestAsyncProcessorIT.java @@ -27,7 +27,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESSingleNodeTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -97,7 +97,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/main/java/module-info.java b/server/src/main/java/module-info.java index c6e6a207ae6c0..8a9f1f0b87d73 100644 --- a/server/src/main/java/module-info.java +++ b/server/src/main/java/module-info.java @@ -383,6 +383,8 @@ org.elasticsearch.serverless.constants, org.elasticsearch.serverless.apifiltering; exports org.elasticsearch.telemetry.tracing; + exports org.elasticsearch.telemetry; + exports org.elasticsearch.telemetry.metric; provides java.util.spi.CalendarDataProvider with org.elasticsearch.common.time.IsoCalendarDataProvider; provides org.elasticsearch.xcontent.ErrorOnUnknown with org.elasticsearch.common.xcontent.SuggestingErrorOnUnknown; diff --git a/server/src/main/java/org/elasticsearch/action/ActionModule.java b/server/src/main/java/org/elasticsearch/action/ActionModule.java index 7395d6003ec44..eb9058ba5d1bf 100644 --- a/server/src/main/java/org/elasticsearch/action/ActionModule.java +++ b/server/src/main/java/org/elasticsearch/action/ActionModule.java @@ -457,7 +457,7 @@ import org.elasticsearch.rest.action.synonyms.RestPutSynonymRuleAction; import org.elasticsearch.rest.action.synonyms.RestPutSynonymsAction; import org.elasticsearch.tasks.Task; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.usage.UsageService; @@ -522,7 +522,7 @@ public ActionModule( CircuitBreakerService circuitBreakerService, UsageService usageService, SystemIndices systemIndices, - Tracer tracer, + TelemetryProvider telemetryProvider, ClusterService clusterService, List> reservedStateHandlers, RestExtension restExtension @@ -563,12 +563,24 @@ public ActionModule( var customController = getRestServerComponent( "REST controller", actionPlugins, - restPlugin -> restPlugin.getRestController(restInterceptor, nodeClient, circuitBreakerService, usageService, tracer) + restPlugin -> restPlugin.getRestController( + restInterceptor, + nodeClient, + circuitBreakerService, + usageService, + telemetryProvider.getTracer() + ) ); if (customController != null) { restController = customController; } else { - restController = new RestController(restInterceptor, nodeClient, circuitBreakerService, usageService, tracer); + restController = new RestController( + restInterceptor, + nodeClient, + circuitBreakerService, + usageService, + telemetryProvider.getTracer() + ); } reservedClusterStateService = new ReservedClusterStateService(clusterService, reservedStateHandlers); this.restExtension = restExtension; diff --git a/server/src/main/java/org/elasticsearch/node/Node.java b/server/src/main/java/org/elasticsearch/node/Node.java index 198abe36e1452..d16968f1b3bb1 100644 --- a/server/src/main/java/org/elasticsearch/node/Node.java +++ b/server/src/main/java/org/elasticsearch/node/Node.java @@ -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; @@ -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; @@ -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); @@ -756,7 +758,7 @@ protected Node( namedWriteableRegistry, clusterModule.getIndexNameExpressionResolver(), repositoriesServiceReference::get, - tracer, + telemetryProvider, clusterModule.getAllocationService(), indicesService ) @@ -813,7 +815,7 @@ protected Node( circuitBreakerService, usageService, systemIndices, - tracer, + telemetryProvider, clusterService, reservedStateHandlers, pluginsService.loadSingletonServiceProvider(RestExtension.class, RestExtension::allowAll) @@ -1287,14 +1289,14 @@ private static ReloadablePlugin wrapPlugins(List reloadablePlu }; } - private Tracer getTracer(PluginsService pluginsService, Settings settings) { - final List tracerPlugins = pluginsService.filterPlugins(TracerPlugin.class); + private TelemetryProvider getTelemetryProvider(PluginsService pluginsService, Settings settings) { + final List 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 TracerPlugin 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( diff --git a/server/src/main/java/org/elasticsearch/plugins/Plugin.java b/server/src/main/java/org/elasticsearch/plugins/Plugin.java index 83e620aa30d12..bd5d8e9220517 100644 --- a/server/src/main/java/org/elasticsearch/plugins/Plugin.java +++ b/server/src/main/java/org/elasticsearch/plugins/Plugin.java @@ -26,7 +26,7 @@ import org.elasticsearch.indices.IndicesService; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -81,7 +81,7 @@ public abstract class Plugin implements Closeable { * @param indexNameExpressionResolver A service that resolves expression to index and alias names * @param repositoriesServiceSupplier A supplier for the service that manages snapshot repositories; will return null when this method * is called, but will return the repositories service once the node is initialized. - * @param tracer An interface for distributed tracing + * @param telemetryProvider An interface for distributed tracing * @param allocationService A service to manage shard allocation in the cluster * @param indicesService A service to manage indices in the cluster */ @@ -97,7 +97,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/main/java/org/elasticsearch/plugins/TracerPlugin.java b/server/src/main/java/org/elasticsearch/plugins/TelemetryPlugin.java similarity index 74% rename from server/src/main/java/org/elasticsearch/plugins/TracerPlugin.java rename to server/src/main/java/org/elasticsearch/plugins/TelemetryPlugin.java index eccc38cf9f5c9..4f47da99a3d5f 100644 --- a/server/src/main/java/org/elasticsearch/plugins/TracerPlugin.java +++ b/server/src/main/java/org/elasticsearch/plugins/TelemetryPlugin.java @@ -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); } diff --git a/server/src/main/java/org/elasticsearch/telemetry/MetricName.java b/server/src/main/java/org/elasticsearch/telemetry/MetricName.java new file mode 100644 index 0000000000000..c3eddce0cb49b --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/MetricName.java @@ -0,0 +1,41 @@ +/* + * 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 java.util.Objects; + +public class MetricName { + private final String rawName; + + public MetricName(String rawName) { + this.rawName = rawName; + } + + public String getRawName() { + return rawName; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MetricName metricName = (MetricName) o; + return Objects.equals(getRawName(), metricName.getRawName()); + } + + @Override + public int hashCode() { + return Objects.hash(rawName); + } + + @Override + public String toString() { + return "MetricName[" + rawName + "]"; + } +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/TelemetryProvider.java b/server/src/main/java/org/elasticsearch/telemetry/TelemetryProvider.java new file mode 100644 index 0000000000000..fc3e4aea5e77b --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/TelemetryProvider.java @@ -0,0 +1,32 @@ +/* + * 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.metric.Metric; +import org.elasticsearch.telemetry.tracing.Tracer; + +public interface TelemetryProvider { + + Tracer getTracer(); + + Metric getMetric(); + + TelemetryProvider NOOP = new TelemetryProvider() { + + @Override + public Tracer getTracer() { + return Tracer.NOOP; + } + + @Override + public Metric getMetric() { + return Metric.NOOP; + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleCounter.java b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleCounter.java new file mode 100644 index 0000000000000..692f75c0a1e8b --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleCounter.java @@ -0,0 +1,51 @@ +/* + * 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.metric; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public interface DoubleCounter extends Instrument { + void increment(); + + void incrementBy(double inc); + + void incrementBy(double inc, Map attributes); + + void incrementBy(double inc, Map attributes, ThreadContext threadContext); + + DoubleCounter NOOP = new DoubleCounter() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void increment() { + + } + + @Override + public void incrementBy(double inc) { + + } + + @Override + public void incrementBy(double inc, Map attributes) { + + } + + @Override + public void incrementBy(double inc, Map attributes, ThreadContext threadContext) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleGauge.java b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleGauge.java new file mode 100644 index 0000000000000..002d0a854e0e2 --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleGauge.java @@ -0,0 +1,39 @@ +/* + * 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.metric; + +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +/** + * Record non-additive double values + */ +public interface DoubleGauge extends Instrument { + void record(double value); + + void record(double value, Map attributes); + + DoubleGauge NOOP = new DoubleGauge() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void record(double value) { + + } + + @Override + public void record(double value, Map attributes) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleHistogram.java b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleHistogram.java new file mode 100644 index 0000000000000..88feacaffe42e --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleHistogram.java @@ -0,0 +1,44 @@ +/* + * 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.metric; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public interface DoubleHistogram extends Instrument { + void record(double value); + + void record(double value, Map attributes); + + void record(double value, Map attributes, ThreadContext threadContext); + + DoubleHistogram NOOP = new DoubleHistogram() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void record(double value) { + + } + + @Override + public void record(double value, Map attributes) { + + } + + @Override + public void record(double value, Map attributes, ThreadContext threadContext) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleUpDownCounter.java b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleUpDownCounter.java new file mode 100644 index 0000000000000..4b88d3fcc9d3b --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/DoubleUpDownCounter.java @@ -0,0 +1,45 @@ +/* + * 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.metric; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public interface DoubleUpDownCounter extends Instrument { + // inc may be negative + void add(double inc); + + void add(double inc, Map attributes); + + void add(double inc, Map attributes, ThreadContext threadContext); + + DoubleUpDownCounter NOOP = new DoubleUpDownCounter() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void add(double inc) { + + } + + @Override + public void add(double inc, Map attributes) { + + } + + @Override + public void add(double inc, Map attributes, ThreadContext threadContext) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/Instrument.java b/server/src/main/java/org/elasticsearch/telemetry/metric/Instrument.java new file mode 100644 index 0000000000000..0b479ca59c513 --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/Instrument.java @@ -0,0 +1,15 @@ +/* + * 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.metric; + +import org.elasticsearch.telemetry.MetricName; + +public interface Instrument { + MetricName getName(); +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/LongCounter.java b/server/src/main/java/org/elasticsearch/telemetry/metric/LongCounter.java new file mode 100644 index 0000000000000..02c454869f759 --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/LongCounter.java @@ -0,0 +1,51 @@ +/* + * 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.metric; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public interface LongCounter extends Instrument { + void increment(); + + void incrementBy(long inc); + + void incrementBy(long inc, Map attributes); + + void incrementBy(double inc, Map attributes, ThreadContext threadContext); + + LongCounter NOOP = new LongCounter() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void increment() { + + } + + @Override + public void incrementBy(long inc) { + + } + + @Override + public void incrementBy(long inc, Map attributes) { + + } + + @Override + public void incrementBy(double inc, Map attributes, ThreadContext threadContext) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/LongGauge.java b/server/src/main/java/org/elasticsearch/telemetry/metric/LongGauge.java new file mode 100644 index 0000000000000..79f382a3c06ce --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/LongGauge.java @@ -0,0 +1,39 @@ +/* + * 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.metric; + +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +/** + * Record non-additive double values + */ +public interface LongGauge extends Instrument { + void record(long value); + + void record(long value, Map attributes); + + LongGauge NOOP = new LongGauge() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void record(long value) { + + } + + @Override + public void record(long value, Map attributes) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/LongHistogram.java b/server/src/main/java/org/elasticsearch/telemetry/metric/LongHistogram.java new file mode 100644 index 0000000000000..844835564a574 --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/LongHistogram.java @@ -0,0 +1,44 @@ +/* + * 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.metric; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public interface LongHistogram extends Instrument { + void record(long value); + + void record(long value, Map attributes); + + void record(long value, Map attributes, ThreadContext threadContext); + + LongHistogram NOOP = new LongHistogram() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void record(long value) { + + } + + @Override + public void record(long value, Map attributes) { + + } + + @Override + public void record(long value, Map attributes, ThreadContext threadContext) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/LongUpDownCounter.java b/server/src/main/java/org/elasticsearch/telemetry/metric/LongUpDownCounter.java new file mode 100644 index 0000000000000..92fc17ec2074b --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/LongUpDownCounter.java @@ -0,0 +1,44 @@ +/* + * 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.metric; + +import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.MetricName; + +import java.util.Map; + +public interface LongUpDownCounter extends Instrument { + void add(long inc); + + void add(long inc, Map attributes); + + void add(long inc, Map attributes, ThreadContext threadContext); + + LongUpDownCounter NOOP = new LongUpDownCounter() { + @Override + public MetricName getName() { + return null; + } + + @Override + public void add(long inc) { + + } + + @Override + public void add(long inc, Map attributes) { + + } + + @Override + public void add(long inc, Map attributes, ThreadContext threadContext) { + + } + }; +} diff --git a/server/src/main/java/org/elasticsearch/telemetry/metric/Metric.java b/server/src/main/java/org/elasticsearch/telemetry/metric/Metric.java new file mode 100644 index 0000000000000..40da909c24f91 --- /dev/null +++ b/server/src/main/java/org/elasticsearch/telemetry/metric/Metric.java @@ -0,0 +1,71 @@ +/* + * 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.metric; + +import org.elasticsearch.telemetry.MetricName; + +public interface Metric { + DoubleCounter registerDoubleCounter(MetricName name, String description, T unit); + + DoubleUpDownCounter registerDoubleUpDownCounter(MetricName name, String description, T unit); + + DoubleGauge registerDoubleGauge(MetricName name, String description, T unit); + + DoubleHistogram registerDoubleHistogram(MetricName name, String description, T unit); + + LongCounter registerLongCounter(MetricName name, String description, T unit); + + LongUpDownCounter registerLongUpDownCounter(MetricName name, String description, T unit); + + LongGauge registerLongGauge(MetricName name, String description, T unit); + + LongHistogram registerLongHistogram(MetricName name, String description, T unit); + + Metric NOOP = new Metric() { + @Override + public DoubleCounter registerDoubleCounter(MetricName name, String description, T unit) { + return DoubleCounter.NOOP; + } + + public DoubleUpDownCounter registerDoubleUpDownCounter(MetricName name, String description, T unit) { + return DoubleUpDownCounter.NOOP; + } + + @Override + public DoubleGauge registerDoubleGauge(MetricName name, String description, T unit) { + return DoubleGauge.NOOP; + } + + @Override + public DoubleHistogram registerDoubleHistogram(MetricName name, String description, T unit) { + return DoubleHistogram.NOOP; + } + + @Override + public LongCounter registerLongCounter(MetricName name, String description, T unit) { + return LongCounter.NOOP; + } + + public LongUpDownCounter registerLongUpDownCounter(MetricName name, String description, T unit) { + return LongUpDownCounter.NOOP; + } + + @Override + + public LongGauge registerLongGauge(MetricName name, String description, T unit) { + return LongGauge.NOOP; + } + + @Override + + public LongHistogram registerLongHistogram(MetricName name, String description, T unit) { + return LongHistogram.NOOP; + } + }; +} diff --git a/server/src/test/java/org/elasticsearch/node/NodeTests.java b/server/src/test/java/org/elasticsearch/node/NodeTests.java index 87f5fc6e990f6..24bbca6ddf512 100644 --- a/server/src/test/java/org/elasticsearch/node/NodeTests.java +++ b/server/src/test/java/org/elasticsearch/node/NodeTests.java @@ -47,7 +47,7 @@ import org.elasticsearch.rest.RestRequest; import org.elasticsearch.script.ScriptService; import org.elasticsearch.tasks.Task; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.InternalTestCluster; import org.elasticsearch.test.MockHttpTransport; @@ -454,7 +454,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/server/src/test/java/org/elasticsearch/plugins/PluginIntrospectorTests.java b/server/src/test/java/org/elasticsearch/plugins/PluginIntrospectorTests.java index 693b7b0fb0981..c5e974c4abcfd 100644 --- a/server/src/test/java/org/elasticsearch/plugins/PluginIntrospectorTests.java +++ b/server/src/test/java/org/elasticsearch/plugins/PluginIntrospectorTests.java @@ -32,7 +32,7 @@ import org.elasticsearch.ingest.Processor; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.PrivilegedOperations; import org.elasticsearch.test.compiler.InMemoryJavaCompiler; @@ -271,7 +271,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/test/external-modules/seek-tracking-directory/src/main/java/org/elasticsearch/test/seektracker/SeekTrackerPlugin.java b/test/external-modules/seek-tracking-directory/src/main/java/org/elasticsearch/test/seektracker/SeekTrackerPlugin.java index 2ff2b655cc21a..cc68a3e3ba0cd 100644 --- a/test/external-modules/seek-tracking-directory/src/main/java/org/elasticsearch/test/seektracker/SeekTrackerPlugin.java +++ b/test/external-modules/seek-tracking-directory/src/main/java/org/elasticsearch/test/seektracker/SeekTrackerPlugin.java @@ -31,7 +31,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -75,7 +75,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/test/framework/src/main/java/org/elasticsearch/test/MockIndexEventListener.java b/test/framework/src/main/java/org/elasticsearch/test/MockIndexEventListener.java index 385778abdbc5c..9b9f464d8dff3 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/MockIndexEventListener.java +++ b/test/framework/src/main/java/org/elasticsearch/test/MockIndexEventListener.java @@ -32,7 +32,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -88,7 +88,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/AnalyticsPlugin.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/AnalyticsPlugin.java index 595dd48aaf32b..9360f97990c82 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/AnalyticsPlugin.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/AnalyticsPlugin.java @@ -25,7 +25,7 @@ import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -187,7 +187,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/async/src/main/java/org/elasticsearch/xpack/async/AsyncResultsIndexPlugin.java b/x-pack/plugin/async/src/main/java/org/elasticsearch/xpack/async/AsyncResultsIndexPlugin.java index 9d402eef3b55e..a0e6d0daac322 100644 --- a/x-pack/plugin/async/src/main/java/org/elasticsearch/xpack/async/AsyncResultsIndexPlugin.java +++ b/x-pack/plugin/async/src/main/java/org/elasticsearch/xpack/async/AsyncResultsIndexPlugin.java @@ -23,7 +23,7 @@ import org.elasticsearch.plugins.SystemIndexPlugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -73,7 +73,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/Autoscaling.java b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/Autoscaling.java index cd95958e31b3e..e2fc1707c0499 100644 --- a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/Autoscaling.java +++ b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/Autoscaling.java @@ -36,7 +36,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -119,7 +119,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/Ccr.java b/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/Ccr.java index 63fcabb98672a..a139b9a55f1be 100644 --- a/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/Ccr.java +++ b/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/Ccr.java @@ -50,7 +50,7 @@ import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; import org.elasticsearch.tasks.Task; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.FixedExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -189,7 +189,7 @@ public Collection createComponents( final NamedWriteableRegistry namedWriteableRegistry, final IndexNameExpressionResolver expressionResolver, final Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackPlugin.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackPlugin.java index 721b909e1d3c7..1c8881637d4c6 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackPlugin.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackPlugin.java @@ -89,7 +89,7 @@ import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; import org.elasticsearch.snapshots.sourceonly.SourceOnlySnapshotRepository; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -333,7 +333,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/LocalStateCompositeXPackPlugin.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/LocalStateCompositeXPackPlugin.java index d9495afebcab8..afc64140004c7 100644 --- a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/LocalStateCompositeXPackPlugin.java +++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/LocalStateCompositeXPackPlugin.java @@ -90,6 +90,7 @@ import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.internal.ShardSearchRequest; import org.elasticsearch.snapshots.Snapshot; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.telemetry.tracing.Tracer; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -204,7 +205,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { @@ -221,7 +222,7 @@ public Collection createComponents( namedWriteableRegistry, expressionResolver, repositoriesServiceSupplier, - tracer, + telemetryProvider, allocationService, indicesService ) @@ -241,7 +242,7 @@ public Collection createComponents( namedWriteableRegistry, expressionResolver, repositoriesServiceSupplier, - tracer, + telemetryProvider, allocationService, indicesService ) diff --git a/x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/Deprecation.java b/x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/Deprecation.java index 117c7d1265234..349ff1042d3a9 100644 --- a/x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/Deprecation.java +++ b/x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/Deprecation.java @@ -29,7 +29,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -100,7 +100,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichPlugin.java b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichPlugin.java index dcb9e53f1a671..5fb20a883560f 100644 --- a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichPlugin.java +++ b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichPlugin.java @@ -35,7 +35,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -201,7 +201,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/EnterpriseSearch.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/EnterpriseSearch.java index 19ad17d517cc9..ad2c033b0ee0c 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/EnterpriseSearch.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/EnterpriseSearch.java @@ -35,7 +35,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -209,7 +209,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/LocalStateEnterpriseSearch.java b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/LocalStateEnterpriseSearch.java index d137f6e719ee3..f10480e9f64a7 100644 --- a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/LocalStateEnterpriseSearch.java +++ b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/LocalStateEnterpriseSearch.java @@ -30,7 +30,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -114,7 +114,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { @@ -130,7 +130,7 @@ public Collection createComponents( namedWriteableRegistry, indexNameExpressionResolver, repositoriesServiceSupplier, - tracer, + telemetryProvider, allocationService, indicesService ); diff --git a/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/plugin/EqlPlugin.java b/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/plugin/EqlPlugin.java index 3a18983c8d5a5..d65a81db11266 100644 --- a/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/plugin/EqlPlugin.java +++ b/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/plugin/EqlPlugin.java @@ -34,7 +34,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -83,7 +83,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java index 3eec19961d597..783f5550a00af 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlPlugin.java @@ -39,7 +39,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.FixedExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -89,7 +89,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/Fleet.java b/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/Fleet.java index 1a088f9aa1de7..0cfa3c43b6b5a 100644 --- a/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/Fleet.java +++ b/x-pack/plugin/fleet/src/main/java/org/elasticsearch/xpack/fleet/Fleet.java @@ -43,7 +43,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -112,7 +112,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/identity-provider/src/main/java/org/elasticsearch/xpack/idp/IdentityProviderPlugin.java b/x-pack/plugin/identity-provider/src/main/java/org/elasticsearch/xpack/idp/IdentityProviderPlugin.java index 3261ac9d9bdb5..943394f326653 100644 --- a/x-pack/plugin/identity-provider/src/main/java/org/elasticsearch/xpack/idp/IdentityProviderPlugin.java +++ b/x-pack/plugin/identity-provider/src/main/java/org/elasticsearch/xpack/idp/IdentityProviderPlugin.java @@ -32,7 +32,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -98,7 +98,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/ilm/src/internalClusterTest/java/org/elasticsearch/xpack/ilm/UpdateSettingsStepTests.java b/x-pack/plugin/ilm/src/internalClusterTest/java/org/elasticsearch/xpack/ilm/UpdateSettingsStepTests.java index 18bf02fdfd8a1..06ac4673264f3 100644 --- a/x-pack/plugin/ilm/src/internalClusterTest/java/org/elasticsearch/xpack/ilm/UpdateSettingsStepTests.java +++ b/x-pack/plugin/ilm/src/internalClusterTest/java/org/elasticsearch/xpack/ilm/UpdateSettingsStepTests.java @@ -26,7 +26,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESSingleNodeTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -74,7 +74,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java b/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java index 6cd807db27566..6409c2b72e1f1 100644 --- a/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java +++ b/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java @@ -38,7 +38,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -166,7 +166,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferencePlugin.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferencePlugin.java index aa3f6e6634678..a5b0754a7f178 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferencePlugin.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferencePlugin.java @@ -33,7 +33,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -116,7 +116,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/MachineLearning.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/MachineLearning.java index 9b8009e234911..d527f998a1ee8 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/MachineLearning.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/MachineLearning.java @@ -77,7 +77,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.ScalingExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -907,7 +907,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/Monitoring.java b/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/Monitoring.java index 2189d759842f4..47e24b60896da 100644 --- a/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/Monitoring.java +++ b/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/Monitoring.java @@ -34,7 +34,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -130,7 +130,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/old-lucene-versions/src/main/java/org/elasticsearch/xpack/lucene/bwc/OldLuceneVersions.java b/x-pack/plugin/old-lucene-versions/src/main/java/org/elasticsearch/xpack/lucene/bwc/OldLuceneVersions.java index 43d7bbdec4178..8808482d2256f 100644 --- a/x-pack/plugin/old-lucene-versions/src/main/java/org/elasticsearch/xpack/lucene/bwc/OldLuceneVersions.java +++ b/x-pack/plugin/old-lucene-versions/src/main/java/org/elasticsearch/xpack/lucene/bwc/OldLuceneVersions.java @@ -57,7 +57,7 @@ import org.elasticsearch.snapshots.Snapshot; import org.elasticsearch.snapshots.SnapshotRestoreException; import org.elasticsearch.snapshots.sourceonly.SourceOnlySnapshotRepository; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -102,7 +102,7 @@ public Collection createComponents( final NamedWriteableRegistry registry, final IndexNameExpressionResolver resolver, final Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/profiling/src/main/java/org/elasticsearch/xpack/profiling/ProfilingPlugin.java b/x-pack/plugin/profiling/src/main/java/org/elasticsearch/xpack/profiling/ProfilingPlugin.java index 037f57b36d547..9ef887ecf5639 100644 --- a/x-pack/plugin/profiling/src/main/java/org/elasticsearch/xpack/profiling/ProfilingPlugin.java +++ b/x-pack/plugin/profiling/src/main/java/org/elasticsearch/xpack/profiling/ProfilingPlugin.java @@ -33,7 +33,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.ScalingExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -90,7 +90,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/SearchableSnapshots.java b/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/SearchableSnapshots.java index fd28dd9048275..acd9ad9e85f50 100644 --- a/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/SearchableSnapshots.java +++ b/x-pack/plugin/searchable-snapshots/src/main/java/org/elasticsearch/xpack/searchablesnapshots/SearchableSnapshots.java @@ -70,7 +70,7 @@ import org.elasticsearch.script.ScriptService; import org.elasticsearch.snapshots.SearchableSnapshotsSettings; import org.elasticsearch.snapshots.sourceonly.SourceOnlySnapshotRepository; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.ScalingExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -331,7 +331,7 @@ public Collection createComponents( final NamedWriteableRegistry registry, final IndexNameExpressionResolver resolver, final Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/security/src/internalClusterTest/java/org/elasticsearch/xpack/security/audit/logfile/AuditTrailSettingsUpdateTests.java b/x-pack/plugin/security/src/internalClusterTest/java/org/elasticsearch/xpack/security/audit/logfile/AuditTrailSettingsUpdateTests.java index 84a7f752d56a4..1036ebc000915 100644 --- a/x-pack/plugin/security/src/internalClusterTest/java/org/elasticsearch/xpack/security/audit/logfile/AuditTrailSettingsUpdateTests.java +++ b/x-pack/plugin/security/src/internalClusterTest/java/org/elasticsearch/xpack/security/audit/logfile/AuditTrailSettingsUpdateTests.java @@ -12,6 +12,7 @@ import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.ThreadContext; +import org.elasticsearch.telemetry.metric.Metric; import org.elasticsearch.test.ESIntegTestCase.ClusterScope; import org.elasticsearch.test.SecurityIntegTestCase; import org.elasticsearch.xpack.security.audit.AuditLevel; @@ -80,7 +81,13 @@ public void testDynamicFilterSettings() throws Exception { settingsBuilder.put(startupFilterSettings); settingsBuilder.put(updateFilterSettings); // reference audit trail containing all filters - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); final String expected = auditTrail.eventFilterPolicyRegistry.toString(); // update settings on internal cluster updateClusterSettings(Settings.builder().put(updateFilterSettings)); diff --git a/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/Security.java b/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/Security.java index 9a16785c39dfc..679032d7cdc80 100644 --- a/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/Security.java +++ b/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/Security.java @@ -90,6 +90,7 @@ import org.elasticsearch.rest.RestStatus; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.internal.ShardSearchRequest; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.telemetry.tracing.Tracer; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.FixedExecutorBuilder; @@ -635,7 +636,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { @@ -649,7 +650,8 @@ public Collection createComponents( xContentRegistry, environment, nodeEnvironment.nodeMetadata(), - expressionResolver + expressionResolver, + telemetryProvider ); } catch (final Exception e) { throw new IllegalStateException("security initialization failed", e); @@ -666,7 +668,8 @@ Collection createComponents( NamedXContentRegistry xContentRegistry, Environment environment, NodeMetadata nodeMetadata, - IndexNameExpressionResolver expressionResolver + IndexNameExpressionResolver expressionResolver, + TelemetryProvider telemetryProvider ) throws Exception { logger.info("Security is {}", enabled ? "enabled" : "disabled"); if (enabled == false) { @@ -705,7 +708,7 @@ Collection createComponents( // audit trail service construction final AuditTrail auditTrail = XPackSettings.AUDIT_ENABLED.get(settings) - ? new LoggingAuditTrail(settings, clusterService, threadPool) + ? new LoggingAuditTrail(settings, clusterService, threadPool, telemetryProvider.getMetric()) : null; final AuditTrailService auditTrailService = new AuditTrailService(auditTrail, getLicenseState()); components.add(auditTrailService); diff --git a/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrail.java b/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrail.java index 1b4f4b891c7ea..7e3f9ac932580 100644 --- a/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrail.java +++ b/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrail.java @@ -35,6 +35,9 @@ import org.elasticsearch.node.Node; import org.elasticsearch.rest.RestRequest; import org.elasticsearch.tasks.Task; +import org.elasticsearch.telemetry.MetricName; +import org.elasticsearch.telemetry.metric.LongCounter; +import org.elasticsearch.telemetry.metric.Metric; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.TransportRequest; import org.elasticsearch.transport.TransportResponse; @@ -381,6 +384,7 @@ public class LoggingAuditTrail implements AuditTrail, ClusterStateListener { private final ThreadContext threadContext; private final SecurityContext securityContext; final EventFilterPolicyRegistry eventFilterPolicyRegistry; + private final LongCounter authenticationFailedCounter; // package for testing volatile EnumSet events; boolean includeRequestBody; @@ -392,11 +396,16 @@ public String name() { return NAME; } - public LoggingAuditTrail(Settings settings, ClusterService clusterService, ThreadPool threadPool) { - this(settings, clusterService, LogManager.getLogger(LoggingAuditTrail.class), threadPool.getThreadContext()); + public LoggingAuditTrail(Settings settings, ClusterService clusterService, ThreadPool threadPool, Metric metric) { + this(settings, clusterService, LogManager.getLogger(LoggingAuditTrail.class), threadPool.getThreadContext(), metric); } - LoggingAuditTrail(Settings settings, ClusterService clusterService, Logger logger, ThreadContext threadContext) { + LoggingAuditTrail(Settings settings, ClusterService clusterService, Logger logger, ThreadContext threadContext, Metric metric) { + this.authenticationFailedCounter = metric.registerLongCounter( + new MetricName("authenticationFailed"), + "authenticationFailed", + new Object() + ); this.logger = logger; this.events = parse(INCLUDE_EVENT_SETTINGS.get(settings), EXCLUDE_EVENT_SETTINGS.get(settings)); this.includeRequestBody = INCLUDE_REQUEST_BODY.get(settings); @@ -532,6 +541,8 @@ public void authenticationSuccess(String requestId, Authentication authenticatio @Override public void anonymousAccessDenied(String requestId, String action, TransportRequest transportRequest) { if (events.contains(ANONYMOUS_ACCESS_DENIED)) { + authenticationFailedCounter.increment(); + final Optional indices = Optional.ofNullable(indices(transportRequest)); if (eventFilterPolicyRegistry.ignorePredicate() .test(new AuditEventMetaInfo(Optional.empty(), Optional.empty(), indices, Optional.of(action))) == false) { @@ -552,6 +563,8 @@ public void anonymousAccessDenied(String requestId, String action, TransportRequ public void anonymousAccessDenied(String requestId, HttpPreRequest request) { if (events.contains(ANONYMOUS_ACCESS_DENIED) && eventFilterPolicyRegistry.ignorePredicate().test(AuditEventMetaInfo.EMPTY) == false) { + authenticationFailedCounter.increment(); + new LogEntryBuilder().with(EVENT_TYPE_FIELD_NAME, REST_ORIGIN_FIELD_VALUE) .with(EVENT_ACTION_FIELD_NAME, "anonymous_access_denied") .withRestUriAndMethod(request) @@ -564,7 +577,10 @@ public void anonymousAccessDenied(String requestId, HttpPreRequest request) { @Override public void authenticationFailed(String requestId, AuthenticationToken token, String action, TransportRequest transportRequest) { + if (events.contains(AUTHENTICATION_FAILED)) { + authenticationFailedCounter.increment(); + final Optional indices = Optional.ofNullable(indices(transportRequest)); if (eventFilterPolicyRegistry.ignorePredicate() .test(new AuditEventMetaInfo(Optional.of(token), Optional.empty(), indices, Optional.of(action))) == false) { @@ -587,7 +603,10 @@ public void authenticationFailed(String requestId, AuthenticationToken token, St @Override public void authenticationFailed(String requestId, HttpPreRequest request) { + if (events.contains(AUTHENTICATION_FAILED) && eventFilterPolicyRegistry.ignorePredicate().test(AuditEventMetaInfo.EMPTY) == false) { + authenticationFailedCounter.increment(); + new LogEntryBuilder().with(EVENT_TYPE_FIELD_NAME, REST_ORIGIN_FIELD_VALUE) .with(EVENT_ACTION_FIELD_NAME, "authentication_failed") .withRestUriAndMethod(request) @@ -600,7 +619,10 @@ public void authenticationFailed(String requestId, HttpPreRequest request) { @Override public void authenticationFailed(String requestId, String action, TransportRequest transportRequest) { + if (events.contains(AUTHENTICATION_FAILED)) { + authenticationFailedCounter.increment(); + final Optional indices = Optional.ofNullable(indices(transportRequest)); if (eventFilterPolicyRegistry.ignorePredicate() .test(new AuditEventMetaInfo(Optional.empty(), Optional.empty(), indices, Optional.of(action))) == false) { @@ -619,9 +641,12 @@ public void authenticationFailed(String requestId, String action, TransportReque @Override public void authenticationFailed(String requestId, AuthenticationToken token, HttpPreRequest request) { + if (events.contains(AUTHENTICATION_FAILED) && eventFilterPolicyRegistry.ignorePredicate() .test(new AuditEventMetaInfo(Optional.of(token), Optional.empty(), Optional.empty(), Optional.empty())) == false) { + authenticationFailedCounter.increment(); + final LogEntryBuilder logEntryBuilder = new LogEntryBuilder().with(EVENT_TYPE_FIELD_NAME, REST_ORIGIN_FIELD_VALUE) .with(EVENT_ACTION_FIELD_NAME, "authentication_failed") .with(PRINCIPAL_FIELD_NAME, token.principal()) @@ -645,6 +670,8 @@ public void authenticationFailed( TransportRequest transportRequest ) { if (events.contains(REALM_AUTHENTICATION_FAILED)) { + authenticationFailedCounter.increment(); + final Optional indices = Optional.ofNullable(indices(transportRequest)); if (eventFilterPolicyRegistry.ignorePredicate() .test(new AuditEventMetaInfo(Optional.of(token), Optional.of(realm), indices, Optional.of(action))) == false) { @@ -669,6 +696,8 @@ public void authenticationFailed(String requestId, String realm, AuthenticationT if (events.contains(REALM_AUTHENTICATION_FAILED) && eventFilterPolicyRegistry.ignorePredicate() .test(new AuditEventMetaInfo(Optional.of(token), Optional.of(realm), Optional.empty(), Optional.empty())) == false) { + authenticationFailedCounter.increment(); + new LogEntryBuilder().with(EVENT_TYPE_FIELD_NAME, REST_ORIGIN_FIELD_VALUE) .with(EVENT_ACTION_FIELD_NAME, "realm_authentication_failed") .with(REALM_FIELD_NAME, realm) diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java index 88725e015e511..f082cfa443acb 100644 --- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java +++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java @@ -53,7 +53,7 @@ import org.elasticsearch.rest.RestHandler; import org.elasticsearch.rest.RestRequest; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.IndexSettingsModule; import org.elasticsearch.test.MockLogAppender; @@ -202,6 +202,8 @@ private Collection createComponentsUtil(Settings settings) throws Except Client client = mock(Client.class); when(client.threadPool()).thenReturn(threadPool); when(client.settings()).thenReturn(settings); + TelemetryProvider telemetryProvider = mock(TelemetryProvider.class); + when(telemetryProvider.getMetric()).thenReturn(null); return security.createComponents( client, threadPool, @@ -211,7 +213,8 @@ private Collection createComponentsUtil(Settings settings) throws Except xContentRegistry(), env, nodeMetadata, - TestIndexNameExpressionResolver.newInstance(threadContext) + TestIndexNameExpressionResolver.newInstance(threadContext), + telemetryProvider ); } @@ -774,7 +777,7 @@ public void testSecurityRestHandlerInterceptorCanBeInstalled() throws IllegalAcc null, usageService, null, - Tracer.NOOP, + TelemetryProvider.NOOP, mock(ClusterService.class), List.of(), RestExtension.allowAll() diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailFilterTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailFilterTests.java index 9da5de1a5dd9b..14748c47b5bf2 100644 --- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailFilterTests.java +++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailFilterTests.java @@ -27,6 +27,7 @@ import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.http.HttpRequest; import org.elasticsearch.rest.RestRequest; +import org.elasticsearch.telemetry.metric.Metric; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.rest.FakeRestRequest; import org.elasticsearch.test.rest.FakeRestRequest.Builder; @@ -149,7 +150,13 @@ public void testPolicyDoesNotMatchNullValuesInEvent() throws Exception { final List filteredActions = randomNonEmptyListOfFilteredActions(); settingsBuilder.putList("xpack.security.audit.logfile.events.ignore_filters.actionsPolicy.actions", filteredActions); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); // user field matches assertTrue( @@ -325,7 +332,13 @@ public void testSingleCompletePolicyPredicate() throws Exception { final List filteredActions = randomNonEmptyListOfFilteredActions(); settingsBuilder.putList("xpack.security.audit.logfile.events.ignore_filters.completeFilterPolicy.actions", filteredActions); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); // all fields match Random random = random(); @@ -521,7 +534,13 @@ public void testSingleCompleteWithEmptyFieldPolicyPredicate() throws Exception { final List filteredActions = randomNonEmptyListOfFilteredActions(); settingsBuilder.putList("xpack.security.audit.logfile.events.ignore_filters.completeFilterPolicy.actions", filteredActions); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); // all fields match Random random = random(); @@ -734,7 +753,13 @@ public void testTwoPolicyPredicatesWithMissingFields() throws Exception { final List filteredIndices = randomNonEmptyListOfFilteredNames(); settingsBuilder.putList("xpack.security.audit.logfile.events.ignore_filters.secondPolicy.indices", filteredIndices); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); final User unfilteredUser; unfilteredUser = new User(UNFILTER_MARKER + randomAlphaOfLengthBetween(1, 8)); @@ -870,7 +895,13 @@ public void testUsersFilter() throws Exception { final MockToken filteredToken = new MockToken(randomFrom(allFilteredUsers)); final MockToken unfilteredToken = new MockToken(UNFILTER_MARKER + randomAlphaOfLengthBetween(1, 4)); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); final List logOutput = CapturingLogger.output(logger.getName(), Level.INFO); // anonymous accessDenied auditTrail.anonymousAccessDenied(randomAlphaOfLength(8), "_action", request); @@ -1223,7 +1254,13 @@ public void testRealmsFilter() throws Exception { : new MockIndicesRequest(threadContext, new String[] { "idx1", "idx2" }); final MockToken authToken = new MockToken("token1"); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); final List logOutput = CapturingLogger.output(logger.getName(), Level.INFO); // anonymous accessDenied auditTrail.anonymousAccessDenied(randomAlphaOfLength(8), "_action", request); @@ -1730,7 +1767,13 @@ public void testRolesFilter() throws Exception { : new MockIndicesRequest(threadContext, new String[] { "idx1", "idx2" }); final MockToken authToken = new MockToken("token1"); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); final List logOutput = CapturingLogger.output(logger.getName(), Level.INFO); // anonymous accessDenied auditTrail.anonymousAccessDenied(randomAlphaOfLength(8), "_action", request); @@ -2047,7 +2090,13 @@ public void testIndicesFilter() throws Exception { final MockToken authToken = new MockToken("token1"); final TransportRequest noIndexRequest = new MockRequest(threadContext); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); final List logOutput = CapturingLogger.output(logger.getName(), Level.INFO); // anonymous accessDenied auditTrail.anonymousAccessDenied(randomAlphaOfLength(8), "_action", noIndexRequest); @@ -2517,7 +2566,13 @@ public void testActionsFilter() throws Exception { ? new MockRequest(threadContext) : new MockIndicesRequest(threadContext, new String[] { "idx1", "idx2" }); final MockToken authToken = new MockToken("token1"); - final LoggingAuditTrail auditTrail = new LoggingAuditTrail(settingsBuilder.build(), clusterService, logger, threadContext); + final LoggingAuditTrail auditTrail = new LoggingAuditTrail( + settingsBuilder.build(), + clusterService, + logger, + threadContext, + Metric.NOOP + ); final List logOutput = CapturingLogger.output(logger.getName(), Level.INFO); // anonymous accessDenied @@ -2752,7 +2807,8 @@ public void testRemoveIgnoreFilter() throws IllegalAccessException, IOException Settings.builder().put(settings).build(), clusterService, logger, - threadContext + threadContext, + Metric.NOOP ); final List logOutput = CapturingLogger.output(logger.getName(), Level.INFO); diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailTests.java index 9ec2e8be383b6..0b108217d6ec6 100644 --- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailTests.java +++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailTests.java @@ -38,6 +38,7 @@ import org.elasticsearch.core.Tuple; import org.elasticsearch.rest.RestRequest; import org.elasticsearch.tasks.Task; +import org.elasticsearch.telemetry.metric.Metric; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.rest.FakeRestRequest; import org.elasticsearch.test.rest.FakeRestRequest.Builder; @@ -353,7 +354,7 @@ public void init() throws Exception { ); } logger = CapturingLogger.newCapturingLogger(randomFrom(Level.OFF, Level.FATAL, Level.ERROR, Level.WARN, Level.INFO), patternLayout); - auditTrail = new LoggingAuditTrail(settings, clusterService, logger, threadContext); + auditTrail = new LoggingAuditTrail(settings, clusterService, logger, threadContext, Metric.NOOP); apiKeyService = new ApiKeyService( settings, Clock.systemUTC(), @@ -2708,7 +2709,7 @@ public void testCrossClusterAccessAuthenticationSuccessTransport() throws Except public void testRequestsWithoutIndices() throws Exception { settings = Settings.builder().put(settings).put("xpack.security.audit.logfile.events.include", "_all").build(); - auditTrail = new LoggingAuditTrail(settings, clusterService, logger, threadContext); + auditTrail = new LoggingAuditTrail(settings, clusterService, logger, threadContext, Metric.NOOP); final AuthorizationInfo authorizationInfo = () -> Collections.singletonMap( PRINCIPAL_ROLES_FIELD_NAME, new String[] { randomAlphaOfLengthBetween(1, 6) } @@ -2796,7 +2797,7 @@ private void updateLoggerSettings(Settings settings) { this.settings = settings; // either create a new audit trail or update the settings on the existing one if (randomBoolean()) { - this.auditTrail = new LoggingAuditTrail(settings, clusterService, logger, threadContext); + this.auditTrail = new LoggingAuditTrail(settings, clusterService, logger, threadContext, Metric.NOOP); } else { this.clusterService.getClusterSettings().applySettings(settings); } diff --git a/x-pack/plugin/shutdown/src/internalClusterTest/java/org/elasticsearch/xpack/shutdown/NodeShutdownTasksIT.java b/x-pack/plugin/shutdown/src/internalClusterTest/java/org/elasticsearch/xpack/shutdown/NodeShutdownTasksIT.java index c8838194f461d..6c5e1e6af69ce 100644 --- a/x-pack/plugin/shutdown/src/internalClusterTest/java/org/elasticsearch/xpack/shutdown/NodeShutdownTasksIT.java +++ b/x-pack/plugin/shutdown/src/internalClusterTest/java/org/elasticsearch/xpack/shutdown/NodeShutdownTasksIT.java @@ -40,7 +40,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; @@ -146,7 +146,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/shutdown/src/main/java/org/elasticsearch/xpack/shutdown/ShutdownPlugin.java b/x-pack/plugin/shutdown/src/main/java/org/elasticsearch/xpack/shutdown/ShutdownPlugin.java index 55af966b4d7e1..754ba7970eaa2 100644 --- a/x-pack/plugin/shutdown/src/main/java/org/elasticsearch/xpack/shutdown/ShutdownPlugin.java +++ b/x-pack/plugin/shutdown/src/main/java/org/elasticsearch/xpack/shutdown/ShutdownPlugin.java @@ -28,7 +28,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -53,7 +53,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/slm/src/main/java/org/elasticsearch/xpack/slm/SnapshotLifecycle.java b/x-pack/plugin/slm/src/main/java/org/elasticsearch/xpack/slm/SnapshotLifecycle.java index aa39ec1968ff0..ba743005bf2df 100644 --- a/x-pack/plugin/slm/src/main/java/org/elasticsearch/xpack/slm/SnapshotLifecycle.java +++ b/x-pack/plugin/slm/src/main/java/org/elasticsearch/xpack/slm/SnapshotLifecycle.java @@ -37,7 +37,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -135,7 +135,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plugin/SqlPlugin.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plugin/SqlPlugin.java index 6b0500162b567..8f39ce939a51c 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plugin/SqlPlugin.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plugin/SqlPlugin.java @@ -31,7 +31,7 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestHandler; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -99,7 +99,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/stack/src/main/java/org/elasticsearch/xpack/stack/StackPlugin.java b/x-pack/plugin/stack/src/main/java/org/elasticsearch/xpack/stack/StackPlugin.java index 8c16ad6057706..de0858e59900c 100644 --- a/x-pack/plugin/stack/src/main/java/org/elasticsearch/xpack/stack/StackPlugin.java +++ b/x-pack/plugin/stack/src/main/java/org/elasticsearch/xpack/stack/StackPlugin.java @@ -20,7 +20,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -55,7 +55,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver indexNameExpressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/Transform.java b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/Transform.java index 05546d9b1345b..c1964448c2662 100644 --- a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/Transform.java +++ b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/Transform.java @@ -49,7 +49,7 @@ import org.elasticsearch.rest.RestHandler; import org.elasticsearch.rest.RestStatus; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xcontent.NamedXContentRegistry; @@ -241,7 +241,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/voting-only-node/src/main/java/org/elasticsearch/cluster/coordination/votingonly/VotingOnlyNodePlugin.java b/x-pack/plugin/voting-only-node/src/main/java/org/elasticsearch/cluster/coordination/votingonly/VotingOnlyNodePlugin.java index b6b3a709924aa..1fee6eda5ad6d 100644 --- a/x-pack/plugin/voting-only-node/src/main/java/org/elasticsearch/cluster/coordination/votingonly/VotingOnlyNodePlugin.java +++ b/x-pack/plugin/voting-only-node/src/main/java/org/elasticsearch/cluster/coordination/votingonly/VotingOnlyNodePlugin.java @@ -36,7 +36,7 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.script.ScriptService; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.Transport; import org.elasticsearch.transport.TransportException; @@ -96,7 +96,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/Watcher.java b/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/Watcher.java index e9a8e04b57c73..0c8690cc62e5f 100644 --- a/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/Watcher.java +++ b/x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/Watcher.java @@ -54,7 +54,7 @@ import org.elasticsearch.script.ScriptContext; import org.elasticsearch.script.ScriptService; import org.elasticsearch.script.TemplateScript; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.threadpool.ExecutorBuilder; import org.elasticsearch.threadpool.FixedExecutorBuilder; import org.elasticsearch.threadpool.ThreadPool; @@ -317,7 +317,7 @@ public Collection createComponents( NamedWriteableRegistry namedWriteableRegistry, IndexNameExpressionResolver expressionResolver, Supplier repositoriesServiceSupplier, - Tracer tracer, + TelemetryProvider telemetryProvider, AllocationService allocationService, IndicesService indicesService ) { diff --git a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/WatcherPluginTests.java b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/WatcherPluginTests.java index a427b8bfcfee2..e1f1933242414 100644 --- a/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/WatcherPluginTests.java +++ b/x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/WatcherPluginTests.java @@ -15,7 +15,7 @@ import org.elasticsearch.indices.SystemIndexDescriptor; import org.elasticsearch.indices.TestIndexNameExpressionResolver; import org.elasticsearch.plugins.internal.DocumentParsingObserver; -import org.elasticsearch.telemetry.tracing.Tracer; +import org.elasticsearch.telemetry.TelemetryProvider; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.IndexSettingsModule; import org.elasticsearch.threadpool.ExecutorBuilder; @@ -75,7 +75,7 @@ public void testWatcherDisabledTests() throws Exception { // also no component creation if not enabled assertThat( - watcher.createComponents(null, null, null, null, null, null, null, null, null, null, null, Tracer.NOOP, null, null), + watcher.createComponents(null, null, null, null, null, null, null, null, null, null, null, TelemetryProvider.NOOP, null, null), hasSize(0) );