Package org.apache.solr.metrics
Class SolrMetricManager
java.lang.Object
org.apache.solr.metrics.SolrMetricManager
This class maintains a repository of named
SdkMeterProvider instances. It provides
utility to create, manage, record and export metrics through OpenTelemetry's APIs as well as
managing the lifecycle of these MeterProviders.
Solr creates 2 main SdkMeterProvider's (solr.jvm, solr.node) as well as an additional
provider for every SolrCore JVM metrics and registry are collected from RuntimeMetrics
The SolrMetricManager acts as a bridge between Solr and OpenTelemetry SDK providing the following:
- MeterProvider creation and removal.
- Access to metric instruments such as
LongCounter,LongUpDownCounter,LongGauge,LongHistogramand observable instruments to a specific MeterProvider instances FilterablePrometheusMetricReaderfor reading and fitlering OpenTelemetry metrics in Prometheus Format from all MeterProviders- Enablement of optional OTLP exporter
Instances of SolrMetricManager are intended to be owned per CoreContainer and automatically manage JVM-wide MeterProviders.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionSolrMetricManager(io.opentelemetry.sdk.metrics.export.MetricExporter exporter) SolrMetricManager(SolrResourceLoader loader, MetricsConfig metricsConfig) -
Method Summary
Modifier and TypeMethodDescriptionvoidClose all meter providers and their associated metric readers.io.opentelemetry.api.metrics.DoubleCounterdoubleCounter(String registry, String counterName, String description, OtelUnit unit) io.opentelemetry.api.metrics.DoubleGaugedoubleGauge(String registry, String gaugeName, String description, OtelUnit unit) io.opentelemetry.api.metrics.DoubleHistogramdoubleHistogram(String registry, String histogramName, String description, OtelUnit unit) io.opentelemetry.api.metrics.DoubleUpDownCounterdoubleUpDownCounter(String registry, String counterName, String description, OtelUnit unit) static StringenforcePrefix(String name) Enforces the leadingREGISTRY_NAME_PREFIXin a name.io.opentelemetry.sdk.metrics.export.MetricExportergetPrometheusMetricReader(String providerName) Get a shallow copied map ofFilterablePrometheusMetricReader.booleanhasRegistry(String name) Check whether a registry with a given name already exists.io.opentelemetry.api.metrics.LongCounterlongCounter(String registry, String counterName, String description, OtelUnit unit) io.opentelemetry.api.metrics.LongGaugeio.opentelemetry.api.metrics.LongHistogramlongHistogram(String registry, String histogramName, String description, OtelUnit unit) io.opentelemetry.api.metrics.LongUpDownCounterlongUpDownCounter(String registry, String counterName, String description, OtelUnit unit) static Stringio.opentelemetry.sdk.metrics.SdkMeterProvidermeterProvider(String providerName) Get (or create if not present) a namedSdkMeterProvider.static StringThis method creates a hierarchical name with arbitrary levels of hierarchyio.opentelemetry.api.metrics.ObservableDoubleCounterobservableDoubleCounter(String registry, String counterName, String description, Consumer<io.opentelemetry.api.metrics.ObservableDoubleMeasurement> callback, OtelUnit unit) io.opentelemetry.api.metrics.ObservableDoubleGaugeobservableDoubleGauge(String registry, String gaugeName, String description, Consumer<io.opentelemetry.api.metrics.ObservableDoubleMeasurement> callback, OtelUnit unit) io.opentelemetry.api.metrics.ObservableDoubleUpDownCounterobservableDoubleUpDownCounter(String registry, String counterName, String description, Consumer<io.opentelemetry.api.metrics.ObservableDoubleMeasurement> callback, String unit) io.opentelemetry.api.metrics.ObservableLongCounterobservableLongCounter(String registry, String counterName, String description, Consumer<io.opentelemetry.api.metrics.ObservableLongMeasurement> callback, OtelUnit unit) io.opentelemetry.api.metrics.ObservableLongGaugeobservableLongGauge(String registry, String gaugeName, String description, Consumer<io.opentelemetry.api.metrics.ObservableLongMeasurement> callback, OtelUnit unit) io.opentelemetry.api.metrics.ObservableLongUpDownCounterobservableLongUpDownCounter(String registry, String counterName, String description, Consumer<io.opentelemetry.api.metrics.ObservableLongMeasurement> callback, String unit) Return a set of existing registry names.voidremoveRegistry(String registry) Remove a named registry and close an existingSdkMeterProvider.
-
Field Details
-
OTEL_SCOPE_NAME
- See Also:
-
REGISTRY_NAME_PREFIX
Common prefix for all registry names that Solr uses.- See Also:
-
JVM_REGISTRY
Registry name for JVM-specific metrics. This name is also subject to overrides controlled by system properties. This registry is shared between instances ofSolrMetricManager. -
NODE_REGISTRY
-
DEFAULT_CLOUD_REPORTER_PERIOD
public static final int DEFAULT_CLOUD_REPORTER_PERIOD- See Also:
-
-
Constructor Details
-
SolrMetricManager
public SolrMetricManager(io.opentelemetry.sdk.metrics.export.MetricExporter exporter) -
SolrMetricManager
-
-
Method Details
-
longCounter
-
longUpDownCounter
-
doubleUpDownCounter
-
doubleCounter
-
doubleHistogram
-
longHistogram
-
doubleGauge
-
longGauge
-
observableLongCounter
-
observableDoubleCounter
-
observableLongGauge
-
observableDoubleGauge
-
observableLongUpDownCounter
-
observableDoubleUpDownCounter
-
hasRegistry
Check whether a registry with a given name already exists.- Parameters:
name- registry name- Returns:
- true if this name points to a registry that already exists, false otherwise
-
meterProvider
Get (or create if not present) a namedSdkMeterProvider.- Parameters:
providerName- name of the meter provider and prometheus metric reader- Returns:
- existing or newly created meter provider
-
registryNames
Return a set of existing registry names. -
removeRegistry
Remove a named registry and close an existingSdkMeterProvider. Upon closing of provider, all metric readers registered to it are closed.- Parameters:
registry- name of the registry to remove
-
closeAllRegistries
public void closeAllRegistries()Close all meter providers and their associated metric readers. -
mkName
This method creates a hierarchical name with arbitrary levels of hierarchy- Parameters:
name- the final segment of the name, must not be null or empty.path- optional path segments, starting from the top level. Empty or null segments will be skipped.- Returns:
- fully-qualified name using dotted notation, with all valid hierarchy segments prepended to the name.
-
makeName
-
enforcePrefix
Enforces the leadingREGISTRY_NAME_PREFIXin a name.- Parameters:
name- input name, possibly without the prefix- Returns:
- original name if it contained the prefix, or the input name with the prefix prepended.
-
getPrometheusMetricReaders
Get a shallow copied map ofFilterablePrometheusMetricReader. -
getPrometheusMetricReader
-
getMetricExporter
public io.opentelemetry.sdk.metrics.export.MetricExporter getMetricExporter()
-