指标报告

Solr 包含一个开发者 API 和工具,用于在 Solr 服务及其各种组件的整个生命周期中收集详细的面向性能的指标。

在内部,此功能使用 Dropwizard Metrics API,它使用以下几类计量器来测量事件

  • 计数器 - 简单地计数事件。它们提供一个单一的 long 值,例如,请求的数量。

  • 计量器 - 另外计算事件的速率。提供一个计数(如上所述)和 1 分钟、5 分钟和 15 分钟的指数衰减速率,类似于 Unix 系统负载平均值。

  • 直方图 - 根据事件的值计算事件的近似分布。提供以下近似统计信息,具有与上述类似的指数衰减:平均值(算术平均值)、中位数、最大值、最小值、标准差以及 75th、95th、98th、99th 和 999th 百分位数。

  • 计时器 - 测量事件的数量和持续时间。它们提供计数和定时直方图。

  • 仪表 - 提供当前值的瞬时读数,例如,当前队列深度、当前活动连接数、可用堆大小。

由于许多有效的原因,这些计量器中的某些可能会缺失或为空。在这些情况下,默认情况下,任何类型的缺失值都将作为 null 返回,因此空值不会影响平均值或直方图。这对于几种类型的缺失值是可配置的;请参阅下面的 “<metrics> <missingValues>”元素 部分。

每个具有唯一名称的相关指标组都在一个指标注册表中进行管理。Solr 维护着几个这样的注册表,每个注册表对应于一个高级组,例如:jvmjettynodecore(请参阅下面的 指标注册表)。

对于每个组(和/或每个注册表),可以有几个报告器,它们是负责将所选注册表的指标通信到外部系统的组件。当前实现的报告器支持通过 JMX、Ganglia、Graphite 和 SLF4J 发射指标。

还有一个专用的 /admin/metrics 处理程序,可以查询该处理程序以报告来自多个注册表的所有或部分当前指标。

指标注册表

Solr 包括多个指标注册表,它们对相关指标进行分组。

指标的维护和累积贯穿组件的所有生命周期,从进程开始到关闭 - 例如,特定 SolrCore 的指标会跟踪可能发生的几次加载、卸载和/或重命名操作,并且只有在显式删除核心时才会被删除。但是,指标不会在进程重启时持久化;重启 Solr 将会丢弃所有收集到的指标。

以下是收集的主要指标组

JVM 注册表

此注册表在 solr.jvm 中返回,包含以下信息。当使用 指标 API 发出请求时,您可以指定 &group=jvm 来仅限制为这些指标。

  • 直接和映射的缓冲区池

  • 类加载/卸载

  • 操作系统内存、CPU 时间(纳秒)、文件描述符、交换空间、系统负载

  • GC 计数和时间

  • 堆、非堆内存和 GC 池

  • 线程数、线程状态和死锁

  • 系统属性,如 Java 信息、各种安装目录路径、端口和类似信息。您可以通过修改 solr.xml 来控制此处显示的内容。

Overseer 注册表

此注册表在 SolrCloud 模式下运行时在 solr.overseer 中返回,包含以下信息。当使用 指标 API 发出请求时,您可以指定 &group=overseer 来仅限制为这些指标。

  • Overseer 队列的大小(集合工作队列和集群状态更新队列)

节点/CoreContainer 注册表

此注册表在 solr.node 中返回,包含以下信息。当使用 指标 API 发出请求时,您可以指定 &group=node 来仅限制为这些指标。

  • 处理程序请求(计数、计时):集合、信息、管理、配置集等。

  • 核心数量(已加载、延迟、已卸载)

核心 (SolrCore) 注册表

核心 (SolrCore) 注册表包括 solr.core.<collection>,每个核心一个。当使用 指标 API 发出请求时,您可以指定 &group=core 来仅限制为这些指标。

  • 所有常见的 RequestHandler 都报告:请求计时器/计数器、超时、错误。支持处理分布式分片请求的处理程序还会为每种类型的分布式请求报告 shardRequests 子计数器。

  • 索引级别事件:用于小合并/大合并的计量器、合并的文档数量、删除的文档数量、当前正在运行的合并及其大小的仪表盘。

  • 分片复制和副本上的事务日志重播,

  • 分片处理程序和更新处理程序的打开/可用/挂起连接。

可以配置 RequestHandler 将核心级别指标汇总到节点级别,并按核心报告它们。如果您每个节点有大量核心,并且对每个节点的聚合指标感兴趣,这将非常有用。这可以通过在您的 solrconfig.xml 中的 RequestHandler 配置中添加 <bool name="aggregateNodeLevelMetricsEnabled">true</bool> 来配置,例如

<requestHandler name="/select" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
         will be overridden by parameters in the request
      -->
    <lst name="defaults">
        <str name="echoParams">explicit</str>
        <int name="rows">10</int>
    </lst>

    <bool name="aggregateNodeLevelMetricsEnabled">true</bool>
</requestHandler>

Jetty 注册表

此注册表在 solr.jetty 中返回,包含以下信息。当使用 指标 API 发出请求时,您可以指定 &group=jetty 来仅限制为这些指标。

  • 线程和池,

  • 连接和请求计时器,

  • 按 HTTP 类(1xx、2xx 等)响应的计量器

指标配置

您可以通过修改 solr.xml 中的 <metrics> 元素来自定义系统中可用的指标。

另请参阅配置 solr.xml部分,以获取有关 solr.xml 文件、其位置以及如何编辑的更多信息。

禁用指标收集

solr.xml 中的 <metrics> 元素支持一个属性 enabled,它接受一个布尔值,例如 <metrics enabled="true">

此属性的默认值为 true,这意味着 Solr 会根据配置的指标报告器收集、处理和报告指标。它们也可以从指标 API 中获得。

此属性的 false 值(<metrics enabled="false">)会关闭指标收集和处理。在内部,所有指标供应商都由单例无操作实现代替,这实际上消除了与指标收集相关的几乎所有开销。所有报告器配置都将被跳过,并且指标 API 将停止报告任何指标,并且仅在其响应中返回一个 <error> 元素。

<metrics> <hiddenSysProps> 元素

solr.xml 的此部分允许您定义被认为是系统敏感且不应通过指标 API 公开的系统属性。

如果未定义此部分,则使用以下默认配置,该配置会隐藏密码和身份验证信息

<metrics>
  <hiddenSysProps>
    <str>javax.net.ssl.keyStorePassword</str>
    <str>javax.net.ssl.trustStorePassword</str>
    <str>basicauth</str>
    <str>zkDigestPassword</str>
    <str>zkDigestReadonlyPassword</str>
  </hiddenSysProps>
</metrics>

<metrics> <reporters> 元素

报告器会消耗 Solr 生成的指标数据。有关如何配置自定义报告器的更多详细信息,请参见下面的报告器部分。

<metrics> <suppliers> 元素

供应商帮助 Solr 生成指标数据。solr.xml<metrics><suppliers> 部分允许您定义自己的指标实现并为其配置参数。

自定义指标供应商的实现超出了本指南的范围,但是通过以下描述的元素,可以使用默认实现进行其他自定义。

<counter>

此元素定义 Counter 供应商的实现和配置。默认实现不支持任何配置。

<meter>

此元素定义 Meter 供应商的实现。默认实现支持一个附加参数

<str name="clock">

可选

默认值:user

用于计算 EWMA 速率的时钟类型。支持的值为:* user,使用 System.nanoTime() * cpu,使用当前线程的 CPU 时间

<histogram>

此元素定义 Histogram 供应商的实现。此元素还支持上面带有 meter 元素的 clock 参数,以及

<str name="reservoir">

可选

默认值:com.codahale.metrics.ExponentiallyDecayingReservoir

要使用的 Reservoir 实现的完全限定类名。默认值为 com.codahale.metrics.ExponentiallyDecayingReservoir,但是 Solr 使用的 Codahale Metrics 库还提供了其他选项。

<int name="size">

可选

默认值:1028

蓄水池大小。

<double name="alpha">

可选

默认值:0.015

衰减参数。这仅对 ExponentiallyDecayingReservoir 有效。

<long name="window">

可选

默认值:300

窗口大小,以秒为单位,并且仅对 SlidingTimeWindowReservoir 有效。

<timer>

此元素定义 Timer 供应商的实现。默认实现支持上面描述的 clockreservoir 参数。

作为定义这些自定义参数的 solr.xml 部分的示例,以下定义了具有非默认 clock 的默认 Meter 供应商,并且默认的 Timer 与非默认的蓄水池一起使用

<metrics>
  <suppliers>
    <meter>
      <str name="clock">cpu</str>
    </meter>
    <timer>
      <str name="reservoir">com.codahale.metrics.SlidingTimeWindowReservoir</str>
      <long name="window">600</long>
    </timer>
  </suppliers>
</metrics>

<metrics> <missingValues> 元素

当基础值不可用时,仍会报告长期指标值(例如,当 IndexReader 关闭时,“INDEX.sizeInBytes”)。短期的瞬态指标(如缓存条目)是复杂仪表盘(内部表示为 MetricsMap)的属性,当不可用时会被简单地跳过,并且它们的名称和值都不会显示在注册表(或 /admin/metrics 报告)中。

默认情况下,当遇到缺少的值时,无论指标类型如何,都将其报告为 null 值。这可以在 solr.xml:/solr/metrics/missingValues 元素中配置,该元素可识别以下子元素(对于字符串元素,支持 JSON 有效负载)

nullNumber

可选

默认值:无

遇到缺失(null)数值指标值时要使用的值。

notANumber

可选

默认值:无

遇到无效数值时要使用的值。

nullString

可选

默认值:无

遇到缺失(null)字符串指标时要使用的值。

nullObject

可选

默认值:无

遇到缺失(null)复杂对象时要使用的值。

返回缺失数字的 null、无效数值的 -1、缺失字符串的空字符串以及缺失复杂对象的 Map 的示例配置

<metrics>
  <missingValues>
    <null name="nullNumber"/>
    <int name="notANumber">-1</int>
    <str name="nullString"></str>
    <str name="nullObject">{"value":"missing"}</str>
  </missingValues>
</metrics>

缓存线程指标

JVM 组中的线程指标可能计算起来很昂贵,因为它需要遍历所有线程。通过设置较高的缓存过期间隔(以秒为单位),可以避免每次调用指标 API(group=jvm)时都发生这种情况。例如,要缓存线程指标 5 秒钟

<solr>
 <metrics>
  <caching>
   <int name="threadsIntervalSeconds">5</int>
  </caching>
  ...
 </metrics>
...
</solr>

报告器

报告器配置在 solr.xml 文件中的 <metrics><reporter> 部分中指定,例如

<solr>
 <metrics>
  <reporter name="graphite" group="node, jvm" class="org.apache.solr.metrics.reporters.SolrGraphiteReporter">
    <str name="host">graphite-server</str>
    <int name="port">9999</int>
    <int name="period">60</int>
  </reporter>
    <reporter name="log_metrics" group="core" class="org.apache.solr.metrics.reporters.SolrSlf4jReporter">
      <int name="period">60</int>
      <str name="filter">QUERY./select.requestTimes</str>
      <str name="filter">QUERY./get.requestTimes</str>
      <str name="filter">UPDATE./update.requestTimes</str>
      <str name="filter">UPDATE./update.clientErrors</str>
      <str name="filter">UPDATE./update.errors</str>
      <str name="filter">SEARCHER.new.time</str>
      <str name="filter">SEARCHER.new.warmup</str>
      <str name="logger">org.apache.solr.metrics.reporters.SolrSlf4jReporter</str>
    </reporter>
  </metrics>
...
</solr>

此示例配置了两个报告器:GraphiteSLF4J。有关如何配置报告器的更多详细信息,请参见下文。

报告器参数

报告器插件使用以下参数

name

必需

默认值:无

报告器插件的唯一名称。

class

必需

默认值:无

插件的完全限定实现类,必须扩展 SolrMetricReporter

group

可选

默认值:无

一个或多个预定义组(请参见上文)。

registry

可选

默认值:无

一个或多个有效的完全限定注册表名称。

如果同时指定了 groupregistry 属性,则仅考虑 group 属性。如果未指定任何属性,则该插件将用于所有组和注册表。可以指定多个组或注册表名称,并用逗号和/或空格分隔。

此外,可以在嵌套元素中指定几个特定于实现的初始化参数。有一些参数在 SLF4J、Ganglia 和 Graphite 报告器中是通用的

period

可选

默认值:60

报告之间的周期,以秒为单位。

prefix

可选

默认值:空字符串

要添加到指标名称的前缀,这可能有助于对相关 Solr 实例进行逻辑分组,例如,机器名称或群集名称。默认为空字符串,即仅使用注册表名称和指标名称来形成完全限定的指标名称。

filter

可选

默认值:无

如果非空,则只报告以该值开头的指标名称。默认情况下不进行过滤,即报告所选注册表中的所有指标。

在各个组件初始化时(例如,在 JVM 启动或 SolrCore 加载时),会为每个组和已配置的注册表实例化报告器。

创建报告器时,会验证其配置(例如,建立必要的连接)。在此初始化阶段的未捕获错误会导致从运行配置中丢弃该报告器。

当相应的组件正在关闭时(例如,在 SolrCore 关闭或 JVM 关闭时),报告器会关闭,但它们报告的指标仍然保留在各自的注册表中,如上一节所述。

以下部分提供了有关特定于实现的参数的信息。Solr 提供的所有实现类都可以在 org.apache.solr.metrics.reporters 下找到。

JMX 报告器

JMX 报告器使用 org.apache.solr.metrics.reporters.SolrJmxReporter 类。

它接受以下参数:

domain

可选

默认值:无

JMX 域名。如果未指定,则将使用注册表名称。

serviceUrl

可选

默认值:无

JMX 服务器的服务 URL。如果未指定,Solr 将尝试发现 JVM 是否具有 MBean 服务器,并将使用该地址。有关此方面的更多信息,请参见下文。

agentId

可选

默认值:无

JMX 服务器的代理 ID。请注意,可以指定 serviceUrlagentId,但不能同时指定两者。如果同时指定两者,则将使用默认的 MBean 服务器。

此报告器创建的对象名称是分层的、点分隔的,但也经过适当的结构化,以便在例如 JConsole 中形成相应的层次结构。此层次结构按自上而下的顺序包含以下元素:

  • 注册表名称(例如,solr.core.collection1.shard1.replica1)。点分隔的注册表名称也会拆分为 ObjectName 层次结构级别,因此此注册表的指标将在 JConsole 的 /solr/core/collection1/shard1/replica1 下显示,每个域部分都分配给 dom1, dom2, … domN 属性。

  • 报告器名称(报告器的 name 属性的值)

  • 请求处理程序的类别、范围和名称

  • 或其他组件的指标的附加 name1, name2, … nameN 元素。

JMX 报告器取代了 Solr 7.0 之前版本中可用的 JMX 功能。如果您是从早期版本升级的,并且在 Solr 启动时有 MBean 服务器正在运行,则 Solr 将自动发现本地 MBean 服务器的位置,并为 SolrJmxReporter 使用默认配置。

您可以通过在启动命令中添加 -Dcom.sun.management.jmxremote,使用系统属性在启动时启动本地 MBean 服务器。这不会将报告器配置添加到 solr.xml,因此,如果您使用系统属性启用它,则必须始终使用系统属性启动 Solr,否则 JMX 将在后续启动中不会启用。

SLF4J 报告器

SLF4J 报告器使用 org.apache.solr.metrics.reporters.SolrSlf4jReporter 类。

除了 上面 描述的通用参数外,它还接受以下参数。

logger

可选

默认值:无

要使用的记录器名称。默认值为空,在这种情况下,如果插件配置中指定了组(或标识指标组的注册表名称的初始部分),则将使用该组。

用户可以指定记录器名称(以及例如,Log4j 配置中相应的记录器配置),以将与指标相关的日志输出到单独的文件中,然后这些文件可以由外部应用程序处理。以下是一个配置 Solr 中附带的默认 log4j2.xml 的示例。这可以与本页前面提供的 solr.xml 示例结合使用来配置 SolrSlf4jReporter。

<Configuration>
  <Appenders>
  ...
    <RollingFile
        name="MetricsFile"
        fileName="${sys:solr.log.dir}/solr_metrics.log"
        filePattern="${sys:solr.log.dir}/solr_metrics.log.%i" >
      <PatternLayout>
        <Pattern>
          %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{node_name} %X{collection} %X{shard} %X{replica} %X{core} %X{trace_id}] %m%n
        </Pattern>
      </PatternLayout>
      <Policies>
        <OnStartupTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="32 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="10"/>
    </RollingFile>
  ...
  </Appenders>

  <Loggers>
  ...
    <Logger name="org.apache.solr.metrics.reporters.SolrSlf4jReporter" level="info" additivity="false">
      <AppenderRef ref="MetricsFile"/>
    </Logger>
  ...
  </Loggers>
</Configuration>

此报告器生成的每行日志都由特定于配置的字段和以下格式的消息组成

type=COUNTER, name={}, count={}

type=GAUGE, name={}, value={}

type=TIMER, name={}, count={}, min={}, max={}, mean={}, stddev={}, median={}, p75={}, p95={}, p98={}, p99={}, p999={}, mean_rate={}, m1={}, m5={}, m15={}, rate_unit={}, duration_unit={}

type=METER, name={}, count={}, mean_rate={}, m1={}, m5={}, m15={}, rate_unit={}

type=HISTOGRAM, name={}, count={}, min={}, max={}, mean={}, stddev={}, median={}, p75={}, p95={}, p98={}, p99={}, p999={}

(此处添加的花括号仅作为实际值的占位符)。

此外,以下 MDC 上下文属性会传递给记录器,并且可以在日志格式中使用:

node_name

Solr 节点名称(对于 SolrCloud 部署,否则为 null),前缀为 n:

registry

指标注册表名称,前缀为 m:

对于特定于 SolrCore 的报告器,还可以使用以下属性:

collection

集合名称,前缀为 c:

shard

分片名称,前缀为 s:

replica

副本名称(核心节点名称),前缀为 r:

core

SolrCore 名称,前缀为 x:

tag

报告器实例标签,前缀为 t:

Graphite 报告器

Graphite 报告器使用 org.apache.solr.metrics.reporters.SolrGraphiteReporter 类。

除了 上面 的通用属性外,它还接受以下属性。

host

必需

默认值:无

运行 Graphite 服务器的主机名。

port

必需

默认值:无

服务器的端口号。

pickled

必需

默认值:false

如果为 true,则使用“腌制”的 Graphite 协议,这可能更高效。

当使用纯文本协议(pickled==false)时,如果它们可以接受以下格式的、通过网络传输的空格分隔且面向行的输入,则可以使用此报告器与其他系统(而非 Graphite)集成:

dot.separated.metric.name[.and.attribute] value epochTimestamp

例如:

example.solr.node.cores.lazy 0 1482932097
example.solr.node.cores.loaded 1 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.count 21 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.m1_rate 2.5474287707930614 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.m5_rate 3.8003171557510305 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.m15_rate 4.0623076220244245 1482932097
example.solr.jetty.org.eclipse.jetty.server.handler.DefaultHandler.2xx-responses.mean_rate 0.5698031798408144 1482932097

核心级别指标

这些指标仅在每个核心的基础上可用。可以使用分片和集群报告器聚合跨核心的指标。

索引合并指标

这些指标在每个核心的各自注册表中(例如,solr.core.collection1…​)下的 INDEX 类别中收集。

指标收集由 solrconfig.xml<metrics> 部分中的布尔参数控制:

基本指标

<config>
  ...
  <indexConfig>
    <metrics>
      <long name="majorMergeDocs">524288</long>
      <bool name="merge">true</bool>
    </metrics>
    ...
  </indexConfig>
...
</config>

详细指标

<config>
  ...
  <indexConfig>
    <metrics>
      <long name="majorMergeDocs">524288</long>
      <bool name="mergeDetails">true</bool>
    </metrics>
    ...
  </indexConfig>
...
</config>

收集以下指标:

  • INDEX.merge.major - 用于合并操作的计时器,包括至少 "majorMergeDocs"(此参数的默认值为 512k 文档)。

  • INDEX.merge.minor - 用于合并操作的计时器,包括少于 "majorMergeDocs" 的文档。

  • INDEX.merge.errors - 合并错误的计数器。

  • INDEX.flush - 用于索引刷新操作的计量器。

此外,还会报告以下量具,这有助于监视索引合并操作的瞬时状态:

  • INDEX.merge.major.running - 正在运行的主要合并操作的数量(根据所使用的 MergeScheduler 的实现,可以同时运行多个合并操作)。

  • INDEX.merge.minor.running - 与上述相同,用于次要合并操作。

  • INDEX.merge.major.running.docs - 在主要合并操作中当前正在合并的段中的文档总数。

  • INDEX.merge.minor.running.docs - 与上述相同,用于次要合并操作。

  • INDEX.merge.major.running.segments - 在主要合并操作中当前正在合并的段的数量。

  • INDEX.merge.minor.running.segments - 与上述相同,用于次要合并操作。

如果布尔标志 mergeDetails 为 true,则会收集以下其他指标:

  • INDEX.merge.major.docs - 用于主要合并操作中合并的文档数量的计量器

  • INDEX.merge.major.deletedDocs - 用于在主要合并操作中删除的文档数量的计量器

指标 API

admin/metrics 端点提供对所有指标组的所有指标的访问权限。

可以使用一些查询参数来限制您的请求,仅获取某些指标:

group

可选

默认值:all

要检索的指标组。值 all 检索所有组的所有指标。其他可能的值为:jvmjettynodecore。可以在一个请求中指定多个组;多个组名称应以逗号分隔。

type

可选

默认值:all

要检索的指标类型。值 all 检索所有指标类型。其他可能的值为 countergaugehistogrammetertimer。可以在一个请求中指定多个类型;多个类型应以逗号分隔。

prefix

可选

默认值:无

将返回的指标过滤为以提供的字符串开头的指标的指标名称的第一个字符。它可以与 group 和/或 type 参数组合使用。可以在一个请求中指定多个前缀;多个前缀应以逗号分隔。前缀匹配也区分大小写。

regex

可选

默认值:无

与指标名称匹配的正则表达式。注意:指标名称中的点分隔符必须转义,例如,QUERY\./select\..* 是一个有效的正则表达式,它匹配所有以 QUERY./select. 前缀开头的指标。

property

可选

默认值:无

允许仅从任何复合指标请求此指标。可以组合多个 property 参数以充当 OR 请求。例如,要仅从所有指标类型和组获取第 99 个和第 999 个百分位数的值,您可以将 &property=p99_ms&property=p999_ms 添加到您的请求中。这可以根据需要与 grouptypeprefix 组合使用。

key

可选

默认值:无

完全限定的指标名称,用于指定一个具体的指标实例(可以多次指定参数以检索多个具体的指标)。

完全限定的名称由注册表名称、冒号和指标名称组成,带有可选的冒号和指标属性。名称中的冒号可以使用反斜杠 (\) 字符转义。示例:

  • key=solr.node:CONTAINER.fs.totalSpace

  • key=solr.core.collection1:QUERY./select.requestTimes:max_ms

  • key=solr.jvm:system.properties:user.name

注意:当使用此参数时,将忽略任何其他选择方法。

expr

可选

默认值:无

key 选择条件的扩展表示法,它支持对 key 选择器支持的每个部分使用正则表达式。可以多次指定此参数以检索与任何表达式匹配的指标。API 保证输出将仅包含唯一的指标名称,即使多个表达式匹配同一指标名称也是如此。注意:此处多个 expr 参数的顺序很重要 - 仅会记录第一个匹配表达式的第一个值,将跳过匹配其他表达式产生的同一指标名称的后续值。

完全限定的表达式由至少两个和最多三个由冒号分隔的正则表达式模式组成:注册表模式、冒号、指标模式,然后是可选的冒号和指标属性模式。名称和正则表达式中的冒号和其他正则表达式元字符必须使用反斜杠 (\) 字符转义。

示例:

  • expr=solr\.core\..:QUERY\..\.requestTimes:max_ms

  • expr=solr\.jvm:system\.properties:user\..*

注意:当使用此参数时,将忽略任何其他选择方法。

compact

可选

默认值:true

false 时,将返回更详细的响应格式。而不是像这样的响应:

{"metrics": [
    "solr.core.gettingstarted",
    {
      "CORE.aliases": {
        "value": ["gettingstarted"]
      },
      "CORE.coreName": {
        "value": "gettingstarted"
      },
      "CORE.indexDir": {
        "value": "/solr/example/schemaless/solr/gettingstarted/data/index/"
      },
      "CORE.instanceDir": {
        "value": "/solr/example/schemaless/solr/gettingstarted"
      },
      "CORE.refCount": {
        "value": 1
      },
      "CORE.startTime": {
        "value": "2017-03-14T11:43:23.822Z"
      }
    }
  ]}

响应将如下所示:

{"metrics": [
    "solr.core.gettingstarted",
    {
      "CORE.aliases": [
        "gettingstarted"
      ],
      "CORE.coreName": "gettingstarted",
      "CORE.indexDir": "/solr/example/schemaless/solr/gettingstarted/data/index/",
      "CORE.instanceDir": "/solr/example/schemaless/solr/gettingstarted",
      "CORE.refCount": 1,
      "CORE.startTime": "2017-03-14T11:43:23.822Z"
    }
  ]}

与其他请求处理程序一样,Metrics API 也可以使用 wt 参数来定义输出格式。此外,Metrics API 还提供了一个特殊的 wt 参数 prometheus,它将以 Prometheus 格式输出指标。这可以用于使用 Prometheus 和 Grafana 进行监控

注意: grouptypeprefix 查询参数仍然可以用来过滤 Prometheus 指标,但是不支持 regexpropertykeycompact 参数。

示例

请求 "core" 组中类型为 "counter" 的指标,以 JSON 格式返回。

https://127.0.0.1:8983/solr/admin/metrics?type=counter&group=core

请求以 "INDEX" 开头的 "core" 组指标,以 XML 格式返回。

https://127.0.0.1:8983/solr/admin/metrics?wt=xml&prefix=INDEX&group=core

请求以 ".requests" 结尾的 "core" 组指标。

https://127.0.0.1:8983/solr/admin/metrics?regex=.*\.requests&group=core

请求注册表 "solr.jvm" 中 "system.properties" 指标的 "user.name" 属性。

https://127.0.0.1:8983/solr/admin/metrics?wt=xml&key=solr.jvm:system.properties:user.name

请求任何 QUERY 处理程序中,任何集合中任何核心的查询速率(但不包括直方图)。

https://127.0.0.1:8983/solr/admin/metrics?expr=solr\.core\..*:QUERY\..*\.requestTimes:.*Rate