Metrics

Spring Boot Actuator 为 Micrometer提供依赖管理和自动配置,这是一个应用程序度量门面,支持 {url-micrometer-docs}[许多监视系统],包括:

如需详细了解 Micrometer 的功能,请参阅其 {url-micrometer-docs}[参考文档],尤其是 {url-micrometer-docs-concepts}[概念部分]。

Getting started

Spring Boot 会自动配置一个复合 MeterRegistry,并在复合中为在类路径中找到的每个受支持的实现添加一个注册表。在你的运行时类路径中对 `micrometer-registry-{system}`有依赖就足以让 Spring Boot 配置注册表。

大多数注册表共享通用特性。例如,即使 Micrometer 注册表实现位于类路径中,您也可以禁用特定注册表。下列示例禁用 Datadog:

management:
  datadog:
    metrics:
      export:
        enabled: false

您还可以禁用所有注册表,除非注册表特定属性另有规定,如下例所示:

management:
  defaults:
    metrics:
      export:
        enabled: false

Spring Boot 还会将所有自动配置的注册表添加到 Metrics 类上的全局静态复合注册表中,除非您明确指示不这样做:

management:
  metrics:
    use-global-registry: false

在用注册表注册任何仪表之前,您可以注册任意数量的 MeterRegistryCustomizer Bean 以进一步配置注册表,例如应用通用标记:

通过指定泛型类型,您可以将自定义应用于特定注册表实现:

Spring Boot 也会 configures built-in instrumentation ,您可以通过配置或专用注释标记来控制。

Supported Monitoring Systems

本节简要介绍每个受支持的监控系统。

AppOptics

默认情况下,AppOptics 注册表会定期将指标推送到 https://api.appoptics.com/v1/measurements。要将指标导出到 SaaS {url-micrometer-docs-implementations}/appOptics[AppOptics],您必须提供 API 令牌:

management:
  appoptics:
    metrics:
      export:
        api-token: "YOUR_TOKEN"

Atlas

默认情况下,指标会导出到本地机器上运行的 {url-micrometer-docs-implementations}/atlas[Atlas]。您可以提供 Atlas server 的位置:

management:
  atlas:
    metrics:
      export:
        uri: "https://atlas.example.com:7101/api/v1/publish"

Datadog

Datadog 注册表会定期将指标推送到 datadoghq。要将指标导出到 {url-micrometer-docs-implementations}/datadog[Datadog],您必须提供 API 密钥:

management:
  datadog:
    metrics:
      export:
        api-key: "YOUR_KEY"

如果您还提供了应用程序密钥(可选),诸如仪表描述、类型和基本单位等元数据也会被导出:

management:
  datadog:
    metrics:
      export:
        api-key: "YOUR_API_KEY"
        application-key: "YOUR_APPLICATION_KEY"

默认情况下,指标会发送到 Datadog US site (https://api.datadoghq.com)。如果您的 Datadog 项目托管在其他站点之一,或者您需要通过代理发送指标,请相应地配置 URI:

management:
  datadog:
    metrics:
      export:
        uri: "https://api.datadoghq.eu"

您还可以更改发送指标到 Datadog 的间隔:

management:
  datadog:
    metrics:
      export:
        step: "30s"

Dynatrace

Dynatrace 提供了两个指标摄取 API,这两者都已为 {url-micrometer-docs-implementations}/dynatrace[Micrometer] 实现。您可以在 {url-dynatrace-docs-shortlink}/micrometer-metrics-ingest[此处] 找到 Dynatrace 关于 Micrometer 指标摄取的文档。v1 命名空间中的配置属性仅在导出到 {url-dynatrace-docs-shortlink}/api-metrics[时序 v1 API] 时适用。v2 命名空间中的配置属性仅在导出到 {url-dynatrace-docs-shortlink}/api-metrics-v2-post-datapoints[指标 v2 API] 时适用。请注意,此集成每次只能导出到 API 的 v1v2 版本,且首选 v2。如果在 v1 命名空间中设置了 device-id(v1 所需,但 v2 中未使用),指标将导出到 v1 端点。否则,假定为 v2

v2 API

您可以通过两种方式使用 v2 API。

Auto-configuration

对于由 OneAgent 或 Dynatrace Operator for Kubernetes 监控的主机,可以使用 Dynatrace 自动配置。

Local OneAgent: 如果主机上正在运行 OneAgent,指标会自动导出到 {url-dynatrace-docs-shortlink}/local-api[本地 OneAgent 摄取端点]。摄取端点将指标转发到 Dynatrace 后端。

Dynatrace Kubernetes Operator: 当在已安装 Dynatrace 运算符的 Kubernetes 中运行时,注册表会自动从该运算符处获取你的端点 URI 和 API 令牌。

这是默认行为,除了依赖于 `io.micrometer:micrometer-registry-dynatrace`之外,无需执行特殊设置。

Manual configuration

如果无法自动配置,则需要 {url-dynatrace-docs-shortlink}/api-metrics-v2-post-datapoints[Metrics v2 API] 的端点和一个 API 令牌。{url-dynatrace-docs-shortlink}/api-authentication[API 令牌] 必须设置有 “Ingest metrics” (metrics.ingest) 权限。我们建议将令牌的范围仅限于此权限。你必须确保端点 URI 包含路径(例如,/api/v2/metrics/ingest):

Metrics API v2 注入端点的 URL 根据你的部署选项而有所不同:

以下示例使用 example 环境 ID 配置指标导出:

management:
  dynatrace:
    metrics:
      export:
        uri: "https://example.live.dynatrace.com/api/v2/metrics/ingest"
        api-token: "YOUR_TOKEN"

在使用 Dynatrace v2 API 时,可以获得以下可选功能(更多详细信息,请参见 {url-dynatrace-docs-shortlink}/micrometer-metrics-ingest#dt-configuration-properties[Dynatrace 文档]):

  • 指标键前缀:设置一个前缀,在它前面添加所有导出指标键。

  • 用 Dynatrace 元数据丰富:如果 OneAgent 或 Dynatrace 运算符正在运行,请用附加元数据(例如,关于主机、进程或 pod)丰富指标。

  • 默认维度:指定添加到所有导出指标的键值对。如果使用 Micrometer 指定具有相同键的标签,它们将覆盖默认维度。

  • 使用 Dynatrace 汇总仪表:在某些情况下,Micrometer Dynatrace 注册表创建了许多被拒绝的指标。在 Micrometer 1.9.x 中,通过引入特定于 Dynatrace 的汇总仪表,修复了此问题。将此切换设置到 false 会强制 Micrometer 回归 1.9.x 版本之前默认的行为。仅在将 Micrometer 从 1.8.x 迁移到 1.9.x 时遇到问题时才应使用此选项。

  • 导出仪表元数据:从 Micrometer 1.12.0 开始,Dynatrace 导出器还将开始导出仪表元数据,例如,默认单位和描述。使用 export-meter-metadata 切换关闭此功能。

可以不指定 URI 和 API 令牌,如下例所示。在此场景中,使用自动配置的端点:

management:
  dynatrace:
    metrics:
      export:
        # Specify uri and api-token here if not using the local OneAgent endpoint.
        v2:
          metric-key-prefix: "your.key.prefix"
          enrich-with-dynatrace-metadata: true
          default-dimensions:
            key1: "value1"
            key2: "value2"
          use-dynatrace-summary-instruments: true # (default: true)
          export-meter-metadata: true             # (default: true)

v1 API (Legacy)

Dynatrace v1 API 指标注册表通过使用 {url-dynatrace-docs-shortlink}/api-metrics[Timeseries v1 API] 定期将指标推送至已配置的 URI。为了向后兼容现有设置,当设置 device-id 时(v1 所需,但在 v2 中不用),指标会被导出到 Timeseries v1 端点。若要将指标导出到 {url-micrometer-docs-implementations}/dynatrace[Dynatrace],必须提供 API 令牌、设备 ID 和 URI:

management:
  dynatrace:
    metrics:
      export:
        uri: "https://{your-environment-id}.live.dynatrace.com"
        api-token: "YOUR_TOKEN"
        v1:
          device-id: "YOUR_DEVICE_ID"

对于 v1 API,你必须指定没有路径的基本环境 URI,因为 v1 端点路径会自动添加。

Version-independent Settings

除了 API 端点和令牌以外,你还可以更改向 Dynatrace 发送指标的间隔。默认导出间隔为 60s。以下示例设置导出间隔为 30 秒:

management:
  dynatrace:
    metrics:
      export:
        step: "30s"

你可以在 {url-micrometer-docs-implementations}/dynatrace[Micrometer 文档] 和 {url-dynatrace-docs-shortlink}/micrometer-metrics-ingest[Dynatrace 文档] 中找到更多有关如何为 Micrometer 设置 Dynatrace 导出器的信息。

Elastic

默认情况下,指标会导出到本地计算机上运行的 {url-micrometer-docs-implementations}/elastic[Elastic]。你可以使用以下属性提供要使用的 Elastic 服务器的位置:

management:
  elastic:
    metrics:
      export:
        host: "https://elastic.example.com:8086"

Ganglia

默认情况下,指标会导出到本地计算机上运行的 {url-micrometer-docs-implementations}/ganglia[Ganglia]。你可以提供 Ganglia server 主机和端口,如下例所示:

management:
  ganglia:
    metrics:
      export:
        host: "ganglia.example.com"
        port: 9649

Graphite

默认情况下,指标会导出到本地计算机上运行的 {url-micrometer-docs-implementations}/graphite[Graphite]。你可以提供 Graphite server 主机和端口,如下例所示:

management:
  graphite:
    metrics:
      export:
         host: "graphite.example.com"
         port: 9004

Micrometer 提供一个默认的 HierarchicalNameMapper,它控制如何将一种维数计量器 ID {url-micrometer-docs-implementations}/graphite#_hierarchical_name_mapping[映射到平面层次结构名称]。

要控制这种行为,请定义您的 GraphiteMeterRegistry`并提供自己的 `HierarchicalNameMapper。除非您定义自己的 `GraphiteConfig`和 `Clock`bean,否则会提供自动配置的 `GraphiteConfig`和 `Clock`bean: include-code::MyGraphiteConfiguration[]

Humio

默认情况下,Humio 注册表会定期将指标推送到 [role="bare"][role="bare"]https://cloud.humio.com.要将指标导出到 SaaS {url-micrometer-docs-implementations}/humio[Humio],您必须提供您的 API 令牌:

management:
  humio:
    metrics:
      export:
        api-token: "YOUR_TOKEN"

您还应配置一个或多个标签,以识别要将指标推送到其上的数据源:

management:
  humio:
    metrics:
      export:
        tags:
          alpha: "a"
          bravo: "b"

Influx

默认情况下,指标将被导出到本地计算机上具有默认配置的 {url-micrometer-docs-implementations}/influx[Influx] v1 实例。要将指标导出到 InfluxDB v2,请为写入指标配置 orgbucket,以及进行身份验证的 token。您可以使用以下方法提供要使用的 Influx server的位置:

management:
  influx:
    metrics:
      export:
        uri: "https://influx.example.com:8086"

JMX

Micrometer 提供到 {url-micrometer-docs-implementations}/jmx[JMX] 的一个层次结构映射,主要是作为一种低成本且可移植的方式在本地查看指标。默认情况下,指标会导出到 `metrics`JMX 域。您可以使用以下方法提供要使用的域:

management:
  jmx:
    metrics:
      export:
        domain: "com.example.app.metrics"

Micrometer 提供一个默认的 HierarchicalNameMapper,它控制如何将一种维数计量器 ID {url-micrometer-docs-implementations}/jmx#_hierarchical_name_mapping[映射到平面层次结构名称]。

要控制这种行为,请定义您的 JmxMeterRegistry`并提供自己的 `HierarchicalNameMapper。除非您定义自己的 `JmxConfig`和 `Clock`bean,否则会提供自动配置的 `JmxConfig`和 `Clock`bean: include-code::MyJmxConfiguration[]

KairosDB

默认情况下,指标会导出到本地计算机上运行的 {url-micrometer-docs-implementations}/kairos[KairosDB]。您可以使用以下方法提供要使用的 KairosDB server的位置:

management:
  kairos:
    metrics:
      export:
        uri: "https://kairosdb.example.com:8080/api/v1/datapoints"

New Relic

New Relic 注册表会定期将指标推送到 {url-micrometer-docs-implementations}/new-relic[New Relic]。要将指标添加到 New Relic,您必须提供您的 API 密钥和帐户 ID:

management:
  newrelic:
    metrics:
      export:
        api-key: "YOUR_KEY"
        account-id: "YOUR_ACCOUNT_ID"

您还可以更改指标发送给 New Relic 的时间间隔:

management:
  newrelic:
    metrics:
      export:
        step: "30s"

默认情况下,指标通过 REST 调用发布,但如果您在 classpath 中有的话,您还可以使用 Java Agent API:

management:
  newrelic:
    metrics:
      export:
        client-provider-type: "insights-agent"

最后,您可以通过定义自己的 `NewRelicClientProvider`bean 来完全控制。

OpenTelemetry

默认情况下,指标会导出到本地计算机上运行的 {url-micrometer-docs-implementations}/otlp[OpenTelemetry]。您可以使用以下方法提供要使用的 OpenTelemetry metric endpoint的位置:

management:
  otlp:
    metrics:
      export:
        url: "https://otlp.example.com:4318/v1/metrics"

Prometheus

{url-micrometer-docs-implementations}/prometheus[Prometheus] 期望为指标抓取或轮询各个应用程序实例。Spring Boot 在 `/actuator/prometheus`提供了一个 actuator 终结点,以使用适当的格式展示 Prometheus scrape

默认情况下,端点不可用且不得公开。有关详细信息,请参阅 exposing endpoints

以下示例 scrape_config`添加到 `prometheus.yml

scrape_configs:
- job_name: "spring"
  metrics_path: "/actuator/prometheus"
  static_configs:
  - targets: ["HOST:PORT"]

Prometheus Exemplars也受支持。要启用此功能,应该存在 `SpanContextSupplier`Bean。如果您使用 Micrometer Tracing, 系统会自动为您配置该功能,但您始终可以创建您自己的功能(如果您愿意)。请查看 Prometheus Docs,因为此功能需要在 Prometheus 的服务器端显式启用,并且仅支持使用 OpenMetrics格式。

对于可能不存在足够长的时间以被刮取的临时或批处理作业,您可以使用 Prometheus Pushgateway支持向 Prometheus 公开指标。要启用 Prometheus Pushgateway 支持,请将以下依赖项添加到您的项目:

<dependency>
	<groupId>io.prometheus</groupId>
	<artifactId>simpleclient_pushgateway</artifactId>
</dependency>

当类路径中存在 Prometheus Pushgateway 依赖项时,且 configprop:management.prometheus.metrics.export.pushgateway.enabled[] 属性设置为 `true`时,会自动配置 `PrometheusPushGatewayManager`bean. 这管理将指标推送到 Prometheus Pushgateway。

您可以通过使用 management.prometheus.metrics.export.pushgateway`下的属性来调整 `PrometheusPushGatewayManager。对于高级配置,您还可以提供您自己的 `PrometheusPushGatewayManager`bean。

SignalFx

SignalFx 注册表定期将指标推送到 {url-micrometer-docs-implementations}/signalFx[SignalFx]。要将指标导出到 SignalFx, 您必须提供您的访问令牌:

management:
  signalfx:
    metrics:
      export:
        access-token: "YOUR_ACCESS_TOKEN"

您还可以更改发送指标至 SignalFx 的时间间隔:

management:
  signalfx:
    metrics:
      export:
        step: "30s"

Simple

Micrometer 附带了一个简单的内存后端,如果未配置任何其他注册表,则会自动使用它作为一个后备。这允许您查看在 metrics endpoint中收集了哪些指标。

一旦您使用任何其他可用的后端,内存后端就会自动禁用自身。您也可以显式禁用它:

management:
  simple:
    metrics:
      export:
        enabled: false

Stackdriver

Stackdriver 注册表定期将指标推送到 Stackdriver。要将指标导出到 SaaS {url-micrometer-docs-implementations}/stackdriver[Stackdriver],您必须提供您的 Google Cloud 项目 ID:

management:
  stackdriver:
    metrics:
      export:
        project-id: "my-project"

您还可以更改发送指标至 Stackdriver 的时间间隔:

management:
  stackdriver:
    metrics:
      export:
        step: "30s"

StatsD

StatsD 注册表急切地通过 UDP 将指标推送到 StatsD 代理。默认情况下,指标将导出到运行在您的本地计算机上的一个 {url-micrometer-docs-implementations}/statsD[StatsD] 代理。您可以通过使用以下内容来提供要使用的 StatsD 代理主机、端口和协议:

management:
  statsd:
    metrics:
      export:
        host: "statsd.example.com"
        port: 9125
        protocol: "udp"

您还可以更改要使用的 StatsD 行协议(它默认为 Datadog):

management:
  statsd:
    metrics:
      export:
        flavor: "etsy"

Wavefront

Wavefront 注册表定期将指标推送到 {url-micrometer-docs-implementations}/wavefront[Wavefront]。如果您直接将指标导出到 Wavefront, 则必须提供您的 API 令牌:

management:
  wavefront:
    api-token: "YOUR_API_TOKEN"

或者,您可以在您的环境中使用 Wavefront 边车或内部代理将指标数据转发至 Wavefront API 主机:

management:
  wavefront:
    uri: "proxy://localhost:2878"

如果您将指标发布到 Wavefront 代理(如 the Wavefront documentation中所述),则主机必须采用 `proxy://HOST:PORT`格式。

您还可以更改发送指标至 Wavefront 的时间间隔:

management:
  wavefront:
    metrics:
      export:
        step: "30s"

Supported Metrics and Meters

Spring Boot 为各种技术提供自动仪表注册。在大多数情况下,默认值会提供合理的指标,这些指标可以发布到任何受支持的监控系统。

JVM Metrics

自动配置通过使用核心 Micrometer 类来启用 JVM 指标。JVM 指标以 `jvm.`仪表名称发布。

提供下列 JVM 指标:

  • 各种内存和缓冲池详细信息

  • 与垃圾回收相关的统计信息

  • Thread utilization

  • 加载和卸载的类数

  • JVM version information

  • JIT compilation time

System Metrics

自动配置通过使用核心 Micrometer 类来启用系统指标。系统指标以 system.、`process.`和 `disk.`仪表名称发布。

提供下列系统指标:

  • CPU metrics

  • File descriptor metrics

  • 正常运行时间指标(包括应用程序已运行的时间量和固定绝对启动时间的仪表)

  • Disk space available

Application Startup Metrics

自动配置公开应用程序启动时间指标:

  • application.started.time:启动应用程序所需时间。

  • application.ready.time:应用程序准备处理请求所需时间。

指标加上了应用程序类的完全限定名的标签。

Logger Metrics

自动配置为 Logback 和 Log4J2 启用事件指标。详细信息以 `log4j2.events.`或 `logback.events.`仪表名称发布。

Task Execution and Scheduling Metrics

自动配置为所有可用的 `ThreadPoolTaskExecutor`和 `ThreadPoolTaskScheduler`bean 启用检测,只要底层 `ThreadPoolExecutor`可用即可。指标加上了执行器名称的标签,该名称来自 bean 名称。

JMS Metrics

自动配置为所有可用的 `JmsTemplate`bean 和 `@JmsListener`注释方法启用检测。这将分别生成 `"jms.message.publish"`和 `"jms.message.process"`指标。有关生成观测的详细信息,请参阅 {url-spring-framework-docs}/integration/observability.html#observability.jms[Spring Framework 参考文档]。

Spring MVC Metrics

自动配置为 Spring MVC 控制器和函数式处理程序处理的所有请求启用检测。默认情况下,指标以名称 `http.server.requests`生成。您可以通过设置 configprop:management.observations.http.server.requests.name[] 属性来自定义名称。

有关生成观测的详细信息,请参阅 {url-spring-framework-docs}/integration/observability.html#observability.http-server.servlet[Spring Framework 参考文档]。

若要添加到默认标签,请提供一个从 org.springframework.http.server.observation`包中的 `DefaultServerRequestObservationConvention`扩展的 `@Bean。若要替换默认标签,请提供一个实现 ServerRequestObservationConvention`的 `@Bean

在某些情况下,web 控制器中处理的异常不会记录为请求指标标签。应用程序可以选择启用并记录 setting handled exceptions as request attributes的异常。

默认情况下,所有请求都处理。要自定义筛选,可提供实现`FilterRegistrationBean<ServerHttpObservationFilter>`的`@Bean`。

Spring WebFlux Metrics

自动配置可以 对 Spring WebFlux 控制器和函数式处理程序所处理的所有请求进行仪器检查。默认情况下,度量以名称生成,http.server.requests。可以通过设置 configprop:management.observations.http.server.requests.name[] 属性来自定义名称。

有关生成观察的更多信息,请参阅 {url-spring-framework-docs}/integration/observability.html#observability.http-server.reactive[Spring 框架参考文档]。

要添加到默认标记,可提供从`org.springframework.http.server.reactive.observation`包中扩展`DefaultServerRequestObservationConvention`的`@Bean`。要替换默认标记,可提供实现`ServerRequestObservationConvention`的`@Bean`。

在某些情况下,在控制器和处理程序函数中处理的异常不会被记录为请求度量标记。应用程序可以通过setting handled exceptions as request attributes选择并记录异常。

Jersey Server Metrics

自动配置可以 对 Jersey JAX-RS 实现所处理的所有请求进行仪器检查。默认情况下,度量以名称生成,http.server.requests。可以通过设置 configprop:management.observations.http.server.requests.name[] 属性来自定义名称。

默认情况下,Jersey 服务器度量标记有以下信息:

Tag Description

exception

处理请求时抛出的任何异常的简单类名。

method

请求的方法(例如,GET`或`POST

outcome

请求的结果,基于响应的状态代码。1xx 是 INFORMATIONAL,2xx 是 SUCCESS,3xx 是 REDIRECTION,4xx 是 CLIENT_ERROR,5xx 是 SERVER_ERROR

status

响应的 HTTP 状态代码(例如,200`或`500

uri

如果可能,替换变量前的请求的 URI 模板(例如,/api/person/{id}

要自定义标记,可提供实现`JerseyObservationConvention`的`@Bean`。

HTTP Client Metrics

Spring Boot Actuator 管理`RestTemplate`、`WebClient`和`RestClient`的仪器检查。为此,你必须注入自动配置的生成器并使用它来创建实例:

  • RestTemplateBuilder for RestTemplate

  • WebClient.Builder for WebClient

  • RestClient.Builder for RestClient

你还可以手动应用对此仪器检查负责的自定义器,即 ObservationRestTemplateCustomizerObservationWebClientCustomizer`和`ObservationRestClientCustomizer

默认情况下,度量以名称生成,http.client.requests。可以通过设置 configprop:management.observations.http.client.requests.name[] 属性来自定义名称。

有关生成观察的更多信息,请参阅 {url-spring-framework-docs}/integration/observability.html#observability.http-client[Spring 框架参考文档]。

要自定义使用`RestTemplate`或`RestClient`时的标记,可提供从`org.springframework.http.client.observation`包中实现`ClientRequestObservationConvention`的`@Bean`。要自定义使用`WebClient`时的标记,可提供从`org.springframework.web.reactive.function.client`包中实现`ClientRequestObservationConvention`的`@Bean`。

Tomcat Metrics

只有在启用`MBeanRegistry`时,自动配置才会启用 Tomcat 的仪器检查。默认情况下,`MBeanRegistry`处于禁用状态,但可以通过将 configprop:server.tomcat.mbeanregistry.enabled[] 设置为 `true`来启用它。

Tomcat 指标在 tomcat. 仪表名称下发布。

Cache Metrics

自动配置启用在启动时对所有可用的 Cache 实例进行检测,并为指标添加 cache 前缀。Cache 检测针对一组基本指标进行了标准化。还可使用额外的,特定于缓存的指标。

支持以下缓存库:

  • Cache2k

  • Caffeine

  • Hazelcast

  • 任何兼容的 JCache (JSR-107) 实现

  • Redis

指标通过缓存名称和 CacheManager 名称进行标记,后者派生自 Bean 名称。

仅在启动时配置的缓存与注册表绑定。对于缓存配置中未定义的缓存(例如在启动阶段后动态创建或通过编程创建的缓存),需要显式注册。CacheMetricsRegistrar Bean 可用于简化该过程。

Spring Batch Metrics

请参阅 {url-spring-batch-docs}/monitoring-and-metrics.html[Spring Batch 参考文档]。

Spring GraphQL Metrics

请参阅 {url-spring-graphql-docs}/observability.html[Spring GraphQL 参考文档]。

DataSource Metrics

自动配置启用对所有可用的 DataSource 对象进行检测,并为指标添加 jdbc.connections 前缀。数据源检测会导致仪表表示连接池中当前处于活动状态、空闲状态、允许的最大连接数和允许的最小连接数。

指标还通过根据 Bean 名称计算的 DataSource 名称进行标记。

默认情况下,Spring Boot 为所有受支持的数据源提供元数据。如果您的首选数据源不受支持,则可以添加其他 DataSourcePoolMetadataProvider Bean。有关示例,请参见 DataSourcePoolMetadataProvidersConfiguration

此外,以 hikaricp 前缀展示特定的 Hikari 指标。每个指标均通过池名称进行标记(您可以使用 spring.datasource.name 控制该池名称)。

Hibernate Metrics

如果 org.hibernate.orm:hibernate-micrometer 位于类路径中,则会检测所有可用的启用统计信息的 Hibernate EntityManagerFactory 实例,并为这些实例检测名为 hibernate 的指标。

指标还通过根据 Bean 名称派生的 EntityManagerFactory 名称进行标记。

要启用统计信息,必须将标准 JPA 属性 hibernate.generate_statistics 设置为 true。可以在自动配置的 EntityManagerFactory 上启用该属性:

spring:
  jpa:
    properties:
      "[hibernate.generate_statistics]": true

Spring Data Repository Metrics

自动配置启用对所有 Spring Data Repository 方法调用的检测。默认情况下,会生成带有名称 spring.data.repository.invocations 的指标。可以通过设置 configprop:management.metrics.data.repository.metric-name[] 属性来自定义名称。

@Timed 包中的 io.micrometer.core.annotation 注释在 Repository 接口和方法上受支持。如果您不想为所有 Repository 调用记录指标,则可以将 configprop:management.metrics.data.repository.autotime.enabled[] 设置为 false,并仅独家使用 @Timed 注释。

具有 longTask = true@Timed 注释为该方法启用了一个长任务计时器。长任务计时器需要独立的指标名称,并且可以与短任务计时器一起使用。

默认情况下,与存储库调用相关的指标通过以下信息进行标记:

Tag Description

repository

源的简单类名 Repository

method

已调用的 `Repository`方法的名称。

state

结果状态(SUCCESSERRORCANCELED`或 `RUNNING)。

exception

从调用中引发的任何异常的简单类名。

要替换默认标记,请提供实现 RepositoryTagsProvider`的 `@Bean

RabbitMQ Metrics

自动配置使用名为 `rabbitmq`的指标启用所有可用 RabbitMQ 连接工厂的检测功能。

Spring Integration Metrics

只要有 `MeterRegistry`bean,Spring 集成就会自动提供 {url-spring-integration-docs}/metrics.html#micrometer-integration[Micrometer 支持]。指标发布在 `spring.integration.`度量器名称下。

Kafka Metrics

自动配置分别为自动配置的使用者工厂和生产者工厂注册 MicrometerConsumerListener`和 `MicrometerProducerListener。它还为 StreamsBuilderFactoryBean`注册 `KafkaStreamsMicrometerListener。有关更多详情,请参阅 Spring Kafka 文档的 {url-spring-kafka-docs}/kafka/micrometer.html#micrometer-native[Micrometer 本机指标] 部分。

MongoDB Metrics

本节简要介绍 MongoDB 可用的指标。

MongoDB Command Metrics

自动配置用自动配置的 MongoClient`注册 `MongoMetricsCommandListener

针对发给底层 MongoDB 驱动程序的每条命令创建一个名为 `mongodb.driver.commands`的计时器指标。默认情况下,每个指标都会标记以下信息:

Tag Description

command

发出的命令的名称。

cluster.id

发送命令到的集群的标识符。

server.address

发送命令到的服务器的地址。

status

命令的结果(SUCCESS`或 `FAILED)。

要替换默认指标标记,请定义 `MongoCommandTagsProvider`bean,如下例所示:

要禁用自动配置的命令指标,请设置以下属性:

management:
  metrics:
    mongo:
      command:
        enabled: false

MongoDB Connection Pool Metrics

自动配置用自动配置的 MongoClient`注册 `MongoMetricsConnectionPoolListener

为连接池创建了以下仪表指标:

  • mongodb.driver.pool.size 报告连接池的当前大小,包括空闲成员和正在使用的成员。

  • mongodb.driver.pool.checkedout 报告当前正在使用的连接数量。

  • mongodb.driver.pool.waitqueuesize 报告来自池的连接队列的当前大小。

默认情况下,每个指标都标记为以下信息:

Tag Description

cluster.id

此连接池对应的集群的标识符。

server.address

此连接池对应的服务器地址。

要替换默认指标标签,请定义一个 MongoConnectionPoolTagsProvider bean:

要禁用自动配置的连接池指标,请设置以下属性:

management:
  metrics:
    mongo:
      connectionpool:
        enabled: false

Jetty Metrics

自动配置使用 Micrometer 的 JettyServerThreadPoolMetrics 为 Jetty 的 ThreadPool 绑定指标。通过使用 Micrometer 的 JettyConnectionMetrics 绑定 Jetty 的 Connector 实例的指标,并在 configprop:server.ssl.enabled[] 设置为 true 时,绑定 Micrometer 的 JettySslHandshakeMetrics 指标。

@Timed Annotation Support

要启用 @Timed 注解的扫描,您需要将 configprop:management.observations.annotations.enabled[] 属性设置为 true 请参考 {url-micrometer-docs-concepts}#_the_timed_annotation[Micrometer 文档]。

Redis Metrics

自动配置为自动配置的 LettuceConnectionFactory 注册一个 MicrometerCommandLatencyRecorder 有关更多详细信息,请参阅 Lettuce 文档的 {url-lettuce-docs}#command.latency.metrics.micrometer[Micrometer Metrics 部分]。

Registering Custom Metrics

要注册自定义指标,将 MeterRegistry 注入到您的组件中:

如果您的指标依赖于其他 bean,我们建议您使用 MeterBinder 来注册它们:

使用 MeterBinder 可确保设置正确的依赖关系,并且在检索指标值时该 bean 可用。如果您发现自己重复使用一系列指标在组件或应用程序之间进行检测,则 MeterBinder 实现也很有用。

默认情况下,来自所有 MeterBinder bean 的指标都会自动绑定到 Spring 管理的 MeterRegistry 中。

Customizing Individual Metrics

如果您需要对特定 Meter 实例应用自定义设置,则可以使用 io.micrometer.core.instrument.config.MeterFilter 接口。

比如,如果你要对所有以 com.example 开头的指标 ID 将 mytag.region 标记重命名为 mytag.area,你可以执行以下操作:

默认情况下,所有 MeterFilter bean 都是自动绑定到 Spring 管理的 MeterRegistry。请务必使用 Spring 管理的 MeterRegistry,而不是 Metrics 上的任何静态方法来注册你的指标。这些方法使用的是未由 Spring 管理的全局注册表。

Common Tags

常见标记通常用于对操作环境进行维度向下钻取,比如主机、实例、地区、堆栈等等。常见标记对所有指标都适用,并且可以进行配置,如下面的示例所示:

management:
  metrics:
    tags:
      region: "us-east-1"
      stack: "prod"

前一个示例向值分别为 us-east-1prod 的所有度量添加 regionstack 标记。

如果您使用 Graphite,常见标记的顺序很重要。由于此方法无法保证常见标记,因此建议 Graphite 用户改而定义自定义 MeterFilter

Per-meter Properties

MeterFilter Bean 外,还可以使用属性对每个度量实施有限的自定义。使用 Spring Boot 的 PropertiesMeterFilter,可将每个度量自定义应用于以给定名称开头的任何度量 ID。以下示例将过滤掉任何 ID 以 example.remote 开头的度量。

management:
  metrics:
    enable:
      example:
        remote: false

以下属性允许按度量自定义:

Table 1. Per-meter customizations
Property Description

configprop:management.metrics.enable[]

是否接受具有某些 ID 的度量。从 MeterRegistry 中过滤掉了不接受的度量。

configprop:management.metrics.distribution.percentiles-histogram[]

是否发布适用于计算可聚合(跨维度)百分比近似的直方图。

configprop:management.metrics.distribution.minimum-expected-value[], configprop:management.metrics.distribution.maximum-expected-value[]

通过限定预期值的范围来发布更少的直方图存储桶。

configprop:management.metrics.distribution.percentiles[]

发布在应用程序中计算的百分位值

configprop:management.metrics.distribution.expiry[], configprop:management.metrics.distribution.buffer-length[]

赋予较新的样本更高的权重,方法是将它们累积到在可配置的过期时间后旋转的环形缓冲器中,并设置可配置的缓冲器长度。

configprop:management.metrics.distribution.slo[]

发布具有由服务级别目标定义的存储桶的累积直方图。

有关 percentiles-histogrampercentilesslo 背后概念的更多详细信息,请参阅 Micrometer 文档的{url-micrometer-docs-concepts}#_histograms_and_percentiles[“Histograms and percentiles” 部分]。

Metrics Endpoint

Spring Boot 提供了一个 metrics 终端,您可以使用它诊断检查应用程序收集的指标。该终端默认不可用,必须公开它。请参阅 exposing endpoints 了解更多详细信息。

导航到 /actuator/metrics 会显示可用度量名称的列表。您可以通过将其名称作为选择器提供,来深入查看有关特定度量的详细信息,例如 /actuator/metrics/jvm.memory.max

您在此处使用的名称应与代码中使用的名称匹配,而不是在将名称约定转换为它所配置的监控系统的名称。换句话说,如果 jvm.memory.max 由于其 snake case 命名约定而显示为 jvm_memory_max,则在 metrics 终端中检查度量时,您仍应使用 jvm.memory.max 作为选择器。

您还可以在 URL 末尾添加任意数量的 tag=KEY:VALUE 查询参数,以按维度向下深入查看,例如 /actuator/metrics/jvm.memory.max?tag=area:nonheap

报告的测量值为与仪表名称和已应用的任何标签匹配的所有仪表的统计数据的“sum”。在前一个示例中,返回的“Value”统计数据是堆的““Code Cache””、““Compressed Class Space””和““Metaspace””区域的最大内存占用空间的总和。如果您仅希望查看““Metaspace””的最大大小,可以添加额外的“tag=id:Metaspace”(即“/actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace”)。

Integration with Micrometer Observation

DefaultMeterObservationHandler”会在“ObservationRegistry”上自动注册,它会针对每个完成的观察值创建度量指标。