Package org.apache.solr.metrics
Class SolrMetricManager
- java.lang.Object
- 
- org.apache.solr.metrics.SolrMetricManager
 
- 
 public class SolrMetricManager extends Object This class maintains a repository of namedMetricRegistryinstances, 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.
 MetricRegistryinstances are automatically created when first referenced by name. Similarly, instances ofMetricimplementations, such asMeter,Counter,TimerandHistogramare automatically created and registered under hierarchical names, in a specified registry, whenmeter(SolrInfoBean, 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.Groupas the main name of the registry (plus the above-mentioned prefix). Instances ofSolrMetricManagerare created for eachCoreContainer, and most registries are local to each instance, with the exception of two global registries:solr.jettyandsolr.jvm, which are shared between allCoreContainer-s
- 
- 
Nested Class SummaryNested Classes Modifier and Type Class Description static classSolrMetricManager.AndFilterstatic classSolrMetricManager.GaugeWrapper<T>This is a wrapper forGaugemetrics, which are usually implemented as lambdas that often keep a reference to their parent instance.static classSolrMetricManager.OrFilterstatic classSolrMetricManager.PrefixFilterAn implementation ofMetricFilterthat selects metrics with names that start with one of prefixes.static classSolrMetricManager.RegexFilterAn implementation ofMetricFilterthat selects metrics with names that match regular expression patterns.
 - 
Field SummaryFields Modifier and Type Field Description static intDEFAULT_CLOUD_REPORTER_PERIODstatic StringJETTY_REGISTRYRegistry name for Jetty-specific metrics.static StringJVM_REGISTRYRegistry name for JVM-specific metrics.static StringREGISTRY_NAME_PREFIXCommon prefix for all registry names that Solr uses.
 - 
Constructor SummaryConstructors Constructor Description SolrMetricManager()SolrMetricManager(SolrResourceLoader loader, MetricsConfig metricsConfig)
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Set<String>clearMetrics(String registry, String... metricPath)Remove some metrics from a named registryvoidclearRegistry(String registry)Remove all metrics from a specified registry.booleancloseReporter(String registry, String name, String tag)Close and unregister a namedSolrMetricReporterfor a registry.Set<String>closeReporters(String registry)Close and unregister allSolrMetricReporter-s for a registry.Set<String>closeReporters(String registry, String tag)Close and unregister allSolrMetricReporter-s for a registry.com.codahale.metrics.Countercounter(SolrInfoBean info, String registry, String metricName, String... metricPath)Create or get an existing namedCounterstatic StringenforcePrefix(String name)Enforces the leadingREGISTRY_NAME_PREFIXin a name.com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Counter>getCounterSupplier()com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Histogram>getHistogramSupplier()com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Meter>getMeterSupplier()Map<String,com.codahale.metrics.Metric>getMetrics(String registry, com.codahale.metrics.MetricFilter metricFilter)Retrieve matching metrics and their names.static StringgetRegistryName(SolrInfoBean.Group group, String... names)Helper method to construct a properly prefixed registry name based on the group.Map<String,SolrMetricReporter>getReporters(String registry)Get a map of reporters for a registry.com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Timer>getTimerSupplier()booleanhasRegistry(String name)Check whether a registry with a given name already exists.com.codahale.metrics.Histogramhistogram(SolrInfoBean info, String registry, String metricName, String... metricPath)Create or get an existing namedHistogramvoidloadClusterReporters(PluginInfo[] pluginInfos, CoreContainer cc)voidloadReporter(String registry, CoreContainer coreContainer, PluginInfo pluginInfo)Convenience wrapper forloadReporter(String, SolrResourceLoader, CoreContainer, SolrCore, PluginInfo, String)passingCoreContainer.getResourceLoader()and null solrCore and tag.voidloadReporter(String registry, SolrCore solrCore, PluginInfo pluginInfo, String tag)Convenience wrapper forloadReporter(String, SolrResourceLoader, CoreContainer, SolrCore, PluginInfo, String)passingSolrCore.getResourceLoader()andSolrCore.getCoreContainer()as the extra parameters.voidloadReporter(String registry, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, PluginInfo pluginInfo, String tag)Create and register an instance ofSolrMetricReporter.voidloadReporters(PluginInfo[] pluginInfos, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, String tag, SolrInfoBean.Group group, String... registryNames)Create and registerSolrMetricReporter-s specific to aSolrInfoBean.Group.voidloadShardReporters(PluginInfo[] pluginInfos, SolrCore core)com.codahale.metrics.Metermeter(SolrInfoBean info, String registry, String metricName, String... metricPath)Create or get an existing namedMeterstatic StringmkName(String name, String... path)This method creates a hierarchical name with arbitrary levels of hierarchyvoidregisterAll(String registry, com.codahale.metrics.MetricSet metrics, boolean force, String... metricPath)Register all metrics in the providedMetricSet, optionally skipping those that already exist.voidregisterGauge(SolrInfoBean info, String registry, com.codahale.metrics.Gauge<?> gauge, String tag, boolean force, String metricName, String... metricPath)voidregisterMetric(SolrInfoBean info, String registry, com.codahale.metrics.Metric metric, boolean force, String metricName, String... metricPath)Register an instance ofMetric.com.codahale.metrics.MetricRegistryregistry(String registry)Get (or create if not present) a named registrySet<String>registryNames()Return a set of existing registry names.Set<String>registryNames(String... patterns)Return set of existing registry names that match a regex patternSet<String>registryNames(Pattern... patterns)voidremoveRegistry(String registry)Remove a named registry.voidswapRegistries(String registry1, String registry2)Swap registries.com.codahale.metrics.Timertimer(SolrInfoBean info, String registry, String metricName, String... metricPath)Create or get an existing namedTimerintunregisterGauges(String registryName, String tag)
 
- 
- 
- 
Field Detail- 
REGISTRY_NAME_PREFIXpublic static final String REGISTRY_NAME_PREFIX Common prefix for all registry names that Solr uses.- See Also:
- Constant Field Values
 
 - 
JETTY_REGISTRYpublic 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 ofSolrMetricManager.
 - 
JVM_REGISTRYpublic 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 ofSolrMetricManager.
 - 
DEFAULT_CLOUD_REPORTER_PERIODpublic static final int DEFAULT_CLOUD_REPORTER_PERIOD - See Also:
- Constant Field Values
 
 
- 
 - 
Constructor Detail- 
SolrMetricManagerpublic SolrMetricManager() 
 - 
SolrMetricManagerpublic SolrMetricManager(SolrResourceLoader loader, MetricsConfig metricsConfig) 
 
- 
 - 
Method Detail- 
getCounterSupplierpublic com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Counter> getCounterSupplier() 
 - 
getMeterSupplierpublic com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Meter> getMeterSupplier() 
 - 
getTimerSupplierpublic com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Timer> getTimerSupplier() 
 - 
getHistogramSupplierpublic com.codahale.metrics.MetricRegistry.MetricSupplier<com.codahale.metrics.Histogram> getHistogramSupplier() 
 - 
hasRegistrypublic 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
 
 - 
registryNamespublic 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
 
 - 
registrypublic com.codahale.metrics.MetricRegistry registry(String registry) Get (or create if not present) a named registry- Parameters:
- registry- name of the registry
- Returns:
- existing or newly created registry
 
 - 
removeRegistrypublic void removeRegistry(String registry) Remove a named registry.- Parameters:
- registry- name of the registry to remove
 
 - 
swapRegistriespublic void swapRegistries(String registry1, String registry2) Swap registries. This is useful eg. duringSolrCorerename 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.
 
 - 
registerAllpublic void registerAll(String registry, com.codahale.metrics.MetricSet metrics, boolean force, String... metricPath) throws Exception Register all metrics in the providedMetricSet, optionally skipping those that already exist.- Parameters:
- registry- registry name
- metrics- metric set to register
- force- if true then already existing metrics with the same name will be replaced. When false and a metric with the same name already exists an exception will be thrown.
- metricPath- (optional) additional top-most metric name path elements
- Throws:
- Exception- if a metric with this name already exists.
 
 - 
clearRegistrypublic void clearRegistry(String registry) Remove all metrics from a specified registry.- Parameters:
- registry- registry name
 
 - 
clearMetricspublic 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.
 
 - 
getMetricspublic 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
 
 - 
meterpublic com.codahale.metrics.Meter meter(SolrInfoBean info, String registry, String metricName, String... metricPath) Create or get an existing namedMeter- 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
 
 - 
timerpublic com.codahale.metrics.Timer timer(SolrInfoBean info, String registry, String metricName, String... metricPath) Create or get an existing namedTimer- 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
 
 - 
counterpublic com.codahale.metrics.Counter counter(SolrInfoBean info, String registry, String metricName, String... metricPath) Create or get an existing namedCounter- 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
 
 - 
histogrampublic com.codahale.metrics.Histogram histogram(SolrInfoBean info, String registry, String metricName, String... metricPath) Create or get an existing namedHistogram- 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
 
 - 
registerMetricpublic void registerMetric(SolrInfoBean info, String registry, com.codahale.metrics.Metric metric, boolean force, String metricName, String... metricPath) Register an instance ofMetric.- Parameters:
- registry- registry name
- metric- metric instance
- force- if true then an already existing metric with the same name will be replaced. When false and a metric with the same name already exists an exception will be thrown.
- metricName- metric name, either final name or a fully-qualified name using dotted notation
- metricPath- (optional) additional top-most metric name path elements
 
 - 
registerGaugepublic void registerGauge(SolrInfoBean info, String registry, com.codahale.metrics.Gauge<?> gauge, String tag, boolean force, String metricName, String... metricPath) 
 - 
mkNamepublic 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.
 
 - 
enforcePrefixpublic static String enforcePrefix(String name) 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.
 
 - 
getRegistryNamepublic 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.
 
 - 
loadReporterspublic void loadReporters(PluginInfo[] pluginInfos, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, String tag, SolrInfoBean.Group group, String... registryNames) Create and registerSolrMetricReporter-s specific to aSolrInfoBean.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
 
 - 
loadReporterpublic void loadReporter(String registry, SolrCore solrCore, PluginInfo pluginInfo, String tag) throws Exception Convenience wrapper forloadReporter(String, SolrResourceLoader, CoreContainer, SolrCore, PluginInfo, String)passingSolrCore.getResourceLoader()andSolrCore.getCoreContainer()as the extra parameters.- Throws:
- Exception
 
 - 
loadReporterpublic void loadReporter(String registry, CoreContainer coreContainer, PluginInfo pluginInfo) throws Exception Convenience wrapper forloadReporter(String, SolrResourceLoader, CoreContainer, SolrCore, PluginInfo, String)passingCoreContainer.getResourceLoader()and null solrCore and tag.- Throws:
- Exception
 
 - 
loadReporterpublic void loadReporter(String registry, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, PluginInfo pluginInfo, String tag) throws Exception Create and register an instance ofSolrMetricReporter.- 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
 
 - 
closeReporterpublic boolean closeReporter(String registry, String name, String tag) Close and unregister a namedSolrMetricReporterfor 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.
 
 - 
closeReporterspublic Set<String> closeReporters(String registry) Close and unregister allSolrMetricReporter-s for a registry.- Parameters:
- registry- registry name
- Returns:
- names of closed reporters
 
 - 
closeReporterspublic Set<String> closeReporters(String registry, String tag) Close and unregister allSolrMetricReporter-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
 
 - 
getReporterspublic 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
 
 - 
loadShardReporterspublic void loadShardReporters(PluginInfo[] pluginInfos, SolrCore core) 
 - 
loadClusterReporterspublic void loadClusterReporters(PluginInfo[] pluginInfos, CoreContainer cc) 
 
- 
 
-