Class SolrMetricManager

java.lang.Object
org.apache.solr.metrics.SolrMetricManager

public class SolrMetricManager extends Object
This class maintains a repository of named MetricRegistry instances, and provides several helper methods for managing various aspects of metrics reporting:
  • registry creation, clearing and removal,
  • creation of most common metric implementations,
  • management of SolrMetricReporter-s specific to a named registry.
MetricRegistry instances are automatically created when first referenced by name. Similarly, instances of Metric implementations, such as Meter, Counter, Timer and Histogram are automatically created and registered under hierarchical names, in a specified registry, when meter(SolrMetricsContext, String, String, String...) and other similar methods are called.

This class enforces a common prefix (REGISTRY_NAME_PREFIX) in all registry names.

Solr uses several different registries for collecting metrics belonging to different groups, using SolrInfoBean.Group as the main name of the registry (plus the above-mentioned prefix). Instances of SolrMetricManager are created for each CoreContainer, and most registries are local to each instance, with the exception of two global registries: solr.jetty and solr.jvm, which are shared between all CoreContainer-s

  • Field Details

    • REGISTRY_NAME_PREFIX

      public static final String REGISTRY_NAME_PREFIX
      Common prefix for all registry names that Solr uses.
      See Also:
    • JETTY_REGISTRY

      public static final String JETTY_REGISTRY
      Registry name for Jetty-specific metrics. This name is also subject to overrides controlled by system properties. This registry is shared between instances of SolrMetricManager.
    • JVM_REGISTRY

      public static final String 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 of SolrMetricManager.
    • DEFAULT_CLOUD_REPORTER_PERIOD

      public static final int DEFAULT_CLOUD_REPORTER_PERIOD
      See Also:
  • Constructor Details

  • Method Details

    • getCounterSupplier

      public com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Counter> getCounterSupplier()
    • getMeterSupplier

      public com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Meter> getMeterSupplier()
    • getTimerSupplier

      public com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Timer> getTimerSupplier()
    • getHistogramSupplier

      public com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Histogram> getHistogramSupplier()
    • nullNumber

      public Object nullNumber()
      Return an object used for representing a null (missing) numeric value.
    • notANumber

      public Object notANumber()
      Return an object used for representing a "Not A Number" (NaN) value.
    • nullString

      public Object nullString()
      Return an object used for representing a null (missing) string value.
    • nullObject

      public Object nullObject()
      Return an object used for representing a null (missing) object value.
    • registryNames

      public Set<String> registryNames()
      Return a set of existing registry names.
    • hasRegistry

      public boolean hasRegistry(String name)
      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
    • registryNames

      public Set<String> registryNames(String... patterns) throws PatternSyntaxException
      Return set of existing registry names that match a regex pattern
      Parameters:
      patterns - regex patterns. NOTE: users need to make sure that patterns that don't start with a wildcard use the full registry name starting with REGISTRY_NAME_PREFIX
      Returns:
      set of existing registry names where at least one pattern matched.
      Throws:
      PatternSyntaxException
    • registryNames

      public Set<String> registryNames(Pattern... patterns)
    • registry

      public com.codahale.metrics.MetricRegistry registry(String registry)
      Get (or create if not present) a named registry. This method always creates and persists a new registry in case it does not already exist.
      Parameters:
      registry - name of the registry
      Returns:
      existing or newly created registry
    • registry

      public com.codahale.metrics.MetricRegistry registry(String registry, boolean create)
      Get (or create if not present) a named registry.
      Parameters:
      registry - name of the registry.
      create - When false and the registry does not exist, we return null instead of creating a new one.
    • removeRegistry

      public void removeRegistry(String registry)
      Remove a named registry.
      Parameters:
      registry - name of the registry to remove
    • swapRegistries

      public void swapRegistries(String registry1, String registry2)
      Swap registries. This is useful eg. during SolrCore rename or swap operations. NOTE: this operation is not supported for shared registries.
      Parameters:
      registry1 - source registry
      registry2 - target registry. Note: when used after core rename the target registry doesn't exist, so the swap operation will only rename the existing registry without creating an empty one under the previous name.
    • registerAll

      public void registerAll(String registry, com.codahale.metrics.MetricSet metrics, SolrMetricManager.ResolutionStrategy strategy, String... metricPath) throws Exception
      Register all metrics in the provided MetricSet, optionally skipping those that already exist.
      Parameters:
      registry - registry name
      metrics - metric set to register
      strategy - the conflict resolution strategy to use if the named metric already exists.
      metricPath - (optional) additional top-most metric name path elements
      Throws:
      Exception - if a metric with this name already exists.
    • clearRegistry

      public void clearRegistry(String registry)
      Remove all metrics from a specified registry.
      Parameters:
      registry - registry name
    • clearMetrics

      public Set<String> clearMetrics(String registry, String... metricPath)
      Remove some metrics from a named registry
      Parameters:
      registry - registry name
      metricPath - (optional) top-most metric name path elements. If empty then this is equivalent to calling clearRegistry(String), otherwise non-empty elements will be joined using dotted notation to form a fully-qualified prefix. Metrics with names that start with the prefix will be removed.
      Returns:
      set of metrics names that have been removed.
    • getMetrics

      public Map<String,com.codahale.metrics.Metric> getMetrics(String registry, com.codahale.metrics.MetricFilter metricFilter)
      Retrieve matching metrics and their names.
      Parameters:
      registry - registry name.
      metricFilter - filter (null is equivalent to MetricFilter.ALL).
      Returns:
      map of matching names and metrics
    • meter

      public com.codahale.metrics.Meter meter(SolrMetricsContext context, String registry, String metricName, String... metricPath)
      Create or get an existing named Meter
      Parameters:
      registry - registry name
      metricName - metric name, either final name or a fully-qualified name using dotted notation
      metricPath - (optional) additional top-most metric name path elements
      Returns:
      existing or a newly created Meter
    • timer

      public com.codahale.metrics.Timer timer(SolrMetricsContext context, String registry, String metricName, String... metricPath)
      Create or get an existing named Timer
      Parameters:
      registry - registry name
      metricName - metric name, either final name or a fully-qualified name using dotted notation
      metricPath - (optional) additional top-most metric name path elements
      Returns:
      existing or a newly created Timer
    • counter

      public com.codahale.metrics.Counter counter(SolrMetricsContext context, String registry, String metricName, String... metricPath)
      Create or get an existing named Counter
      Parameters:
      registry - registry name
      metricName - metric name, either final name or a fully-qualified name using dotted notation
      metricPath - (optional) additional top-most metric name path elements
      Returns:
      existing or a newly created Counter
    • histogram

      public com.codahale.metrics.Histogram histogram(SolrMetricsContext context, String registry, String metricName, String... metricPath)
      Create or get an existing named Histogram
      Parameters:
      registry - registry name
      metricName - metric name, either final name or a fully-qualified name using dotted notation
      metricPath - (optional) additional top-most metric name path elements
      Returns:
      existing or a newly created Histogram
    • registerMetric

      @Deprecated public void registerMetric(SolrMetricsContext context, String registry, com.codahale.metrics.Metric metric, boolean force, String metricName, String... metricPath)
    • registerMetric

      public void registerMetric(SolrMetricsContext context, String registry, com.codahale.metrics.Metric metric, SolrMetricManager.ResolutionStrategy strategy, String metricName, String... metricPath)
      Register an instance of Metric.
      Parameters:
      registry - registry name
      metric - metric instance
      strategy - the conflict resolution strategy to use if the named metric already exists.
      metricName - metric name, either final name or a fully-qualified name using dotted notation
      metricPath - (optional) additional top-most metric name path elements
    • registerGauge

      @Deprecated public void registerGauge(SolrMetricsContext context, String registry, com.codahale.metrics.Gauge<?> gauge, String tag, boolean force, String metricName, String... metricPath)
    • registerGauge

      public <T> void registerGauge(SolrMetricsContext context, String registry, com.codahale.metrics.Gauge<T> gauge, String tag, SolrMetricManager.ResolutionStrategy strategy, String metricName, String... metricPath)
    • unregisterGauges

      public int unregisterGauges(String registryName, String tagSegment)
    • mkName

      public static String mkName(String name, String... path)
      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

      public static String makeName(List<String> path, String name)
    • enforcePrefix

      public static String enforcePrefix(String name)
      Enforces the leading REGISTRY_NAME_PREFIX in 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.
    • getRegistryName

      public static String getRegistryName(SolrInfoBean.Group group, String... names)
      Helper method to construct a properly prefixed registry name based on the group.
      Parameters:
      group - reporting group
      names - optional child elements of the registry name. If exactly one element is provided and it already contains the required prefix and group name then this value will be used, and the group parameter will be ignored.
      Returns:
      fully-qualified and prefixed registry name, with overrides applied.
    • loadReporters

      public void loadReporters(PluginInfo[] pluginInfos, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, String tag, SolrInfoBean.Group group, String... registryNames)
      Create and register SolrMetricReporter-s specific to a SolrInfoBean.Group. Note: reporters that specify neither "group" nor "registry" attributes are treated as universal - they will always be loaded for any group. These two attributes may also contain multiple comma- or whitespace-separated values, in which case the reporter will be loaded for any matching value from the list. If both attributes are present then only "group" attribute will be processed.
      Parameters:
      pluginInfos - plugin configurations
      loader - resource loader
      coreContainer - core container
      solrCore - optional solr core
      tag - optional tag for the reporters, to distinguish reporters logically created for different parent component instances.
      group - selected group, not null
      registryNames - optional child registry name elements
    • loadReporter

      public void loadReporter(String registry, SolrCore solrCore, PluginInfo pluginInfo, String tag) throws Exception
      Throws:
      Exception
    • loadReporter

      public void loadReporter(String registry, CoreContainer coreContainer, PluginInfo pluginInfo) throws Exception
      Throws:
      Exception
    • loadReporter

      public void loadReporter(String registry, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, PluginInfo pluginInfo, String tag) throws Exception
      Create and register an instance of SolrMetricReporter.
      Parameters:
      registry - reporter is associated with this registry
      loader - loader to use when creating an instance of the reporter
      coreContainer - core container
      solrCore - optional solr core
      pluginInfo - plugin configuration. Plugin "name" and "class" attributes are required.
      tag - optional tag for the reporter, to distinguish reporters logically created for different parent component instances.
      Throws:
      Exception - if any argument is missing or invalid
    • closeReporter

      public boolean closeReporter(String registry, String name, String tag)
      Close and unregister a named SolrMetricReporter for a registry.
      Parameters:
      registry - registry name
      name - reporter name
      tag - optional tag for the reporter, to distinguish reporters logically created for different parent component instances.
      Returns:
      true if a named reporter existed and was closed.
    • closeReporters

      public Set<String> closeReporters(String registry)
      Close and unregister all SolrMetricReporter-s for a registry.
      Parameters:
      registry - registry name
      Returns:
      names of closed reporters
    • closeReporters

      public Set<String> closeReporters(String registry, String tag)
      Close and unregister all SolrMetricReporter-s for a registry.
      Parameters:
      registry - registry name
      tag - optional tag for the reporter, to distinguish reporters logically created for different parent component instances.
      Returns:
      names of closed reporters
    • getReporters

      public Map<String,SolrMetricReporter> getReporters(String registry)
      Get a map of reporters for a registry. Keys are reporter names, values are reporter instances.
      Parameters:
      registry - registry name
      Returns:
      map of reporters and their names, may be empty but never null
    • loadShardReporters

      public void loadShardReporters(PluginInfo[] pluginInfos, SolrCore core)
    • loadClusterReporters

      public void loadClusterReporters(PluginInfo[] pluginInfos, CoreContainer cc)
    • getMetricsConfig

      public MetricsConfig getMetricsConfig()