对于最新的稳定版本,请使用 Spring Boot 3.4.0spring-doc.cn

指标

开始

Spring Boot 会自动配置复合MeterRegistry,并为它在 Classpath 上找到的每个受支持的实现将注册表添加到复合中。 在运行时 Classpath 中具有依赖项就足以让 Spring Boot 配置注册表。micrometer-registry-{system}spring-doc.cn

大多数注册表都具有共同的功能。 例如,即使 Micrometer 注册表实现位于 Classpath 上,您也可以禁用特定的注册表。 以下示例禁用 Datadog:spring-doc.cn

management.datadog.metrics.export.enabled=false
management:
  datadog:
    metrics:
      export:
        enabled: false

你也可以禁用所有注册表,除非特定于注册表的属性另有说明,如下例所示:spring-doc.cn

management.defaults.metrics.export.enabled=false
management:
  defaults:
    metrics:
      export:
        enabled: false

Spring Boot 还将任何自动配置的注册表添加到Metrics类上的全局静态复合注册表中,除非你明确告诉它不要:spring-doc.cn

management.metrics.use-global-registry=false
management:
  metrics:
    use-global-registry: false

在向注册表注册任何仪表之前,您可以注册任意数量的MeterRegistryCustomizer bean 以进一步配置注册表,例如应用通用标记:spring-doc.cn

import io.micrometer.core.instrument.MeterRegistry;

import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyMeterRegistryConfiguration {

	@Bean
	public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
		return (registry) -> registry.config().commonTags("region", "us-east-1");
	}

}
import io.micrometer.core.instrument.MeterRegistry
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyMeterRegistryConfiguration {

	@Bean
	fun metricsCommonTags(): MeterRegistryCustomizer<MeterRegistry> {
		return MeterRegistryCustomizer { registry ->
			registry.config().commonTags("region", "us-east-1")
		}
	}

}

您可以通过更具体地了解泛型类型,将自定义项应用于特定的注册表实现:spring-doc.cn

import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.graphite.GraphiteMeterRegistry;

import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyMeterRegistryConfiguration {

	@Bean
	public MeterRegistryCustomizer<GraphiteMeterRegistry> graphiteMetricsNamingConvention() {
		return (registry) -> registry.config().namingConvention(this::name);
	}

	private String name(String name, Meter.Type type, String baseUnit) {
		return ...
	}

}
import io.micrometer.core.instrument.Meter
import io.micrometer.core.instrument.config.NamingConvention
import io.micrometer.graphite.GraphiteMeterRegistry
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyMeterRegistryConfiguration {

	@Bean
	fun graphiteMetricsNamingConvention(): MeterRegistryCustomizer<GraphiteMeterRegistry> {
		return MeterRegistryCustomizer { registry: GraphiteMeterRegistry ->
			registry.config().namingConvention(this::name)
		}
	}

	private fun name(name: String, type: Meter.Type, baseUnit: String?): String {
		return  ...
	}

}

Spring Boot 还配置了内置插桩,您可以通过配置或专用 Comments 标记来控制这些插桩。spring-doc.cn

支持的监控系统

本节简要介绍每个受支持的监控系统。spring-doc.cn

应用光学

默认情况下,AppOptics 注册表会定期将指标推送到 。 要将指标导出到 SaaS AppOptics,必须提供您的 API 令牌:api.appoptics.com/v1/measurementsspring-doc.cn

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

地图集

默认情况下,指标将导出到本地计算机上运行的 Atlas。 您可以提供 Atlas 服务器的位置:spring-doc.cn

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

数据狗

Datadog 注册表会定期将指标推送到 datadoghq。 要将指标导出到 Datadog,您必须提供 API 密钥:spring-doc.cn

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

如果您额外提供应用程序密钥(可选),则还将导出仪表描述、类型和基本单位等元数据:spring-doc.cn

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

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

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

您还可以更改将指标发送到 Datadog 的间隔:spring-doc.cn

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

Dynatrace 公司

Dynatrace 提供两种指标摄取 API,这两种 API 都是针对 Micrometer 实现的。 您可以在此处找到有关 Micrometer 指标摄取的 Dynatrace 文档。 命名空间中的配置属性仅在导出到 Timeseries v1 API 时适用。 命名空间中的配置属性仅在导出到 Metrics v2 API 时适用。 请注意,此集成一次只能导出到 API 的 or 版本,这是首选。 如果在命名空间中设置了 (v1 必需,但在 v2 中未使用),则指标将导出到终端节点。 否则,假定为。v1v2v1v2v2device-idv1v1v2spring-doc.cn

v2 API

您可以通过两种方式使用 v2 API。spring-doc.cn

自动配置

Dynatrace 自动配置可用于由 OneAgent 或 Dynatrace Operator for Kubernetes 监控的主机。spring-doc.cn

本地 OneAgent:如果 OneAgent 正在主机上运行,则指标会自动导出到本地 OneAgent 摄取终端节点。 摄取端点将指标转发到 Dynatrace 后端。spring-doc.cn

Dynatrace Kubernetes 操作员:在安装了 Dynatrace Operator 的 Kubernetes 中运行时,注册表将自动从 Operator 那里获取您的端点 URI 和 API 令牌。spring-doc.cn

这是默认行为,除了对 的依赖性之外,不需要任何特殊设置。io.micrometer:micrometer-registry-dynatracespring-doc.cn

手动配置

如果没有可用的自动配置,则需要 Metrics v2 API 的终端节点和 API 令牌。 API 令牌必须具有“Ingest metrics” () 权限集。 我们建议将令牌的范围限制为此权限。 您必须确保端点 URI 包含路径(例如:metrics.ingest/api/v2/metrics/ingestspring-doc.cn

Metrics API v2 摄取端点的 URL 因部署选项而异:spring-doc.cn

  • 软件即服务 (SaaS):https://{your-environment-id}.live.dynatrace.com/api/v2/metrics/ingestspring-doc.cn

  • 托管部署:https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingestspring-doc.cn

以下示例使用环境 ID 配置指标导出:examplespring-doc.cn

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

使用 Dynatrace v2 API 时,可以使用以下可选功能(更多详细信息可在 Dynatrace 文档中找到):spring-doc.cn

  • Metric key prefix(指标键前缀):设置附加到所有导出的指标键的前缀。spring-doc.cn

  • 使用 Dynatrace 元数据进行扩充:如果 OneAgent 或 Dynatrace 运算符正在运行,请使用其他元数据(例如,关于主机、进程或 pod)来扩充指标。spring-doc.cn

  • 默认维度:指定添加到所有导出指标的键值对。 如果使用 Micrometer 指定了具有相同键的标签,则它们会覆盖默认尺寸。spring-doc.cn

  • 使用 Dynatrace Summary 仪器:在某些情况下,Micrometer Dynatrace 注册表创建的指标被拒绝。 在 Micrometer 1.9.x 中,通过引入 Dynatrace 特定的汇总仪器解决了这个问题。 将此开关设置为强制 Micrometer 回退到 1.9.x 之前的默认值。 它只应在从 Micrometer 1.8.x 迁移到 1.9.x 时遇到问题时使用。falsespring-doc.cn

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

可以不指定 URI 和 API 令牌,如以下示例所示。 在此方案中,使用自动配置的终端节点:spring-doc.cn

management.dynatrace.metrics.export.v2.metric-key-prefix=your.key.prefix
management.dynatrace.metrics.export.v2.enrich-with-dynatrace-metadata=true
management.dynatrace.metrics.export.v2.default-dimensions.key1=value1
management.dynatrace.metrics.export.v2.default-dimensions.key2=value2
management.dynatrace.metrics.export.v2.use-dynatrace-summary-instruments=true
management.dynatrace.metrics.export.v2.export-meter-metadata=true
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(旧版)

Dynatrace v1 API 指标注册表使用时间序列 v1 API 定期将指标推送到配置的 URI。 为了向后兼容现有设置,设置后(v1 需要,但在 v2 中未使用),指标将导出到时间序列 v1 终端节点。 要将指标导出到 Dynatrace,必须提供您的 API 令牌、设备 ID 和 URI:device-idspring-doc.cn

management.dynatrace.metrics.export.uri=https://{your-environment-id}.live.dynatrace.com
management.dynatrace.metrics.export.api-token=YOUR_TOKEN
management.dynatrace.metrics.export.v1.device-id=YOUR_DEVICE_ID
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 端点路径是自动添加的。spring-doc.cn

与版本无关的设置

除了 API 端点和令牌之外,您还可以更改将指标发送到 Dynatrace 的间隔。 默认导出间隔为 。 以下示例将导出间隔设置为 30 秒:60sspring-doc.cn

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

您可以在 Micrometer 文档Dynatrace 文档中找到有关如何为 Micrometer 设置 Dynatrace 导出器的更多信息。spring-doc.cn

弹性的

默认情况下,指标会导出到本地计算机上运行的 Elastic。 您可以使用以下属性提供要使用的弹性服务器的位置:spring-doc.cn

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

神经节

默认情况下,指标将导出到本地计算机上运行的 Ganglia。 您可以提供 Ganglia 服务器主机和端口,如下例所示:spring-doc.cn

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

石墨

默认情况下,指标会导出到本地计算机上运行的 Graphite。 您可以提供 Graphite 服务器主机和端口,如下例所示:spring-doc.cn

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

Micrometer 提供了一个默认的 HierarchicalNameMapper,用于控制如何将维度计 ID 映射到平面分层名称spring-doc.cn

要控制此行为,请定义您的 GraphiteMeterRegistry 并提供您自己的 HierarchicalNameMapper。 除非您定义自己的 Clock bean,否则会提供自动配置的 GraphiteConfigClock bean:spring-doc.cn

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.util.HierarchicalNameMapper;
import io.micrometer.graphite.GraphiteConfig;
import io.micrometer.graphite.GraphiteMeterRegistry;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyGraphiteConfiguration {

	@Bean
	public GraphiteMeterRegistry graphiteMeterRegistry(GraphiteConfig config, Clock clock) {
		return new GraphiteMeterRegistry(config, clock, this::toHierarchicalName);
	}

	private String toHierarchicalName(Meter.Id id, NamingConvention convention) {
		return ...
	}

}
import io.micrometer.core.instrument.Clock
import io.micrometer.core.instrument.Meter
import io.micrometer.core.instrument.config.NamingConvention
import io.micrometer.core.instrument.util.HierarchicalNameMapper
import io.micrometer.graphite.GraphiteConfig
import io.micrometer.graphite.GraphiteMeterRegistry
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyGraphiteConfiguration {

	@Bean
	fun graphiteMeterRegistry(config: GraphiteConfig, clock: Clock): GraphiteMeterRegistry {
		return GraphiteMeterRegistry(config, clock, this::toHierarchicalName)
	}
	private fun toHierarchicalName(id: Meter.Id, convention: NamingConvention): String {
		return  ...
	}

}

虎尾

默认情况下,Humio 注册表会定期将指标推送到 cloud.humio.com。 要将指标导出到 SaaS Humio,您必须提供 API 令牌:spring-doc.cn

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

您还应配置一个或多个标签,以标识将指标推送到的数据源:spring-doc.cn

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

流入

默认情况下,指标会导出到使用默认配置在本地计算机上运行的 Influx v1 实例。 要将指标导出到 InfluxDB v2,请配置 、 和 身份验证以写入指标。 您可以使用以下方法提供要使用的 Influx 服务器的位置:orgbuckettokenspring-doc.cn

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

JMX

Micrometer 提供到 JMX 的分层映射,主要作为一种在本地查看指标的廉价且可移植的方式。 默认情况下,指标将导出到 JMX 域。 您可以使用以下方法提供要使用的域:metricsspring-doc.cn

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

Micrometer 提供了一个默认的 HierarchicalNameMapper,用于控制如何将维度计 ID 映射到平面分层名称spring-doc.cn

要控制此行为,请定义您的 JmxMeterRegistry 并提供您自己的 HierarchicalNameMapper。 除非您定义自己的 Bean ,否则会提供自动配置的 JmxConfigClock bean:spring-doc.cn

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.util.HierarchicalNameMapper;
import io.micrometer.jmx.JmxConfig;
import io.micrometer.jmx.JmxMeterRegistry;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyJmxConfiguration {

	@Bean
	public JmxMeterRegistry jmxMeterRegistry(JmxConfig config, Clock clock) {
		return new JmxMeterRegistry(config, clock, this::toHierarchicalName);
	}

	private String toHierarchicalName(Meter.Id id, NamingConvention convention) {
		return ...
	}

}
import io.micrometer.core.instrument.Clock
import io.micrometer.core.instrument.Meter
import io.micrometer.core.instrument.config.NamingConvention
import io.micrometer.core.instrument.util.HierarchicalNameMapper
import io.micrometer.jmx.JmxConfig
import io.micrometer.jmx.JmxMeterRegistry
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyJmxConfiguration {

	@Bean
	fun jmxMeterRegistry(config: JmxConfig, clock: Clock): JmxMeterRegistry {
		return JmxMeterRegistry(config, clock, this::toHierarchicalName)
	}

	private fun toHierarchicalName(id: Meter.Id, convention: NamingConvention): String {
		return  ...
	}

}

KairosDB 数据库

默认情况下,指标将导出到本地计算机上运行的 KairosDB。 您可以使用以下方法提供要使用的 KairosDB 服务器的位置:spring-doc.cn

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

新遗迹

New Relic 注册表会定期将指标推送到 New Relic。 要将指标导出到 New Relic,您必须提供 API 密钥和账户 ID:spring-doc.cn

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

您还可以更改将指标发送到 New Relic 的间隔:spring-doc.cn

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

默认情况下,指标是通过 REST 调用发布的,但如果您在 Classpath 上有 Java 代理 API,也可以使用它:spring-doc.cn

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

最后,你可以通过定义自己的 NewRelicClientProvider bean 来获得完全控制权。spring-doc.cn

开放遥测

默认情况下,指标将导出到本地计算机上运行的 OpenTelemetry。 您可以通过以下方式提供要使用的 OpenTelemetry 指标终端节点的位置:spring-doc.cn

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

普罗 米修斯

Prometheus 希望抓取或轮询单个应用程序实例的指标。 Spring Boot 提供了一个 actuator 端点,以呈现具有适当格式的 Prometheus 抓取/actuator/prometheusspring-doc.cn

默认情况下,终端节点不可用,必须公开。有关更多详细信息,请参阅公开终端节点

以下示例添加到 :scrape_configprometheus.ymlspring-doc.cn

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

还支持 Prometheus Exemplars。 要启用此功能,应存在 SpanContext Bean。 如果你正在使用已弃用的 Prometheus simpleclient 支持并希望启用该功能,则应存在SpanContextSupplier Bean。 如果您使用 Micrometer Tracing,这将为您自动配置,但您始终可以根据需要创建自己的跟踪。 请查看 Prometheus 文档,因为此功能需要在 Prometheus 端明确启用,并且仅支持使用 OpenMetrics 格式。spring-doc.cn

对于存在时间不够长而无法抓取的临时或批处理作业,您可以使用 Prometheus Pushgateway 支持向 Prometheus 公开指标。spring-doc.cn

Prometheus Pushgateway 目前仅适用于已弃用的 Prometheus simpleclient,直到 Prometheus 1.x 客户端添加对它的支持。 要切换到 simpleclient,请从项目中删除并改为添加。io.micrometer:micrometer-registry-prometheusio.micrometer:micrometer-registry-prometheus-simpleclient

要启用 Prometheus Pushgateway 支持,请将以下依赖项添加到您的项目中:spring-doc.cn

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

当 Classpath 上存在 Prometheus Pushgateway 依赖项并且属性设置为时,将自动配置 PrometheusPushGatewayManager bean。 这将管理将指标推送到 Prometheus Pushgateway。management.prometheus.metrics.export.pushgateway.enabledtruespring-doc.cn

您可以使用 中的属性来调整 PrometheusPushGatewayManager。 对于高级配置,您还可以提供自己的PrometheusPushGatewayManager bean。management.prometheus.metrics.export.pushgatewayspring-doc.cn

信号外汇

SignalFx 注册表定期将指标推送到 SignalFx。 要将指标导出到 SignalFx,您必须提供访问令牌:spring-doc.cn

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

您还可以更改将指标发送到 SignalFx 的间隔:spring-doc.cn

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

简单

Micrometer 附带了一个简单的内存后端,如果未配置其他注册表,则会自动用作后备。 这样,您就可以查看 metrics 终端节点中收集了哪些指标。spring-doc.cn

一旦您使用任何其他可用的后端,内存中后端就会自行禁用。 您也可以显式禁用它:spring-doc.cn

management.simple.metrics.export.enabled=false
management:
  simple:
    metrics:
      export:
        enabled: false

堆栈驱动程序

Stackdriver 注册表会定期将指标推送到 Stackdriver。 要将指标导出到 SaaS Stackdriver,您必须提供您的 Google Cloud 项目 ID:spring-doc.cn

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

您还可以更改将指标发送到 Stackdriver 的时间间隔:spring-doc.cn

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

统计 D

StatsD 注册表急切地通过 UDP 将指标推送到 StatsD 代理。 默认情况下,指标将导出到本地计算机上运行的 StatsD 代理。 您可以使用以下方法提供要使用的 StatsD 代理主机、端口和协议:spring-doc.cn

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

您还可以更改要使用的 StatsD 线路协议(默认为 Datadog):spring-doc.cn

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

Wavefront 注册表会定期将指标推送到 Wavefront。 如果要直接将指标导出到 Wavefront,则必须提供 API 令牌:spring-doc.cn

management.wavefront.api-token=YOUR_API_TOKEN
management:
  wavefront:
    api-token: "YOUR_API_TOKEN"

或者,您可以在环境中使用 Wavefront sidecar 或内部代理将指标数据转发到 Wavefront API 主机:spring-doc.cn

management.wavefront.uri=proxy://localhost:2878
management:
  wavefront:
    uri: "proxy://localhost:2878"
如果您将指标发布到 Wavefront 代理(如 Wavefront 文档中所述),则主机必须采用以下格式。proxy://HOST:PORT

您还可以更改将指标发送到 Wavefront 的间隔:spring-doc.cn

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

支持的指标和计量

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

JVM 指标

自动配置通过使用核心 Micrometer 类启用 JVM 指标。 JVM 指标在计量名称下发布。jvm.spring-doc.cn

提供了以下 JVM 指标:spring-doc.cn

系统指标

自动配置通过使用核心 Micrometer 类来启用系统指标。 系统指标在 、 和 计量名称下发布。system.process.disk.spring-doc.cn

提供了以下系统指标:spring-doc.cn

应用程序启动指标

自动配置会公开应用程序启动时间指标:spring-doc.cn

  • application.started.time:启动应用程序所花费的时间。spring-doc.cn

  • application.ready.time:应用程序准备好为请求提供服务所花费的时间。spring-doc.cn

指标由应用程序类的完全限定名称标记。spring-doc.cn

记录器指标

自动配置为 Logback 和 Log4J2 启用事件指标。 详细信息在 或 计量名称下发布。log4j2.events.logback.events.spring-doc.cn

任务执行和调度指标

只要底层ThreadPoolExecutor可用,自动配置就可以检测所有可用的ThreadPoolTaskExecutorThreadPoolTaskScheduler bean。 度量由执行程序的名称标记,该名称派生自 Bean 名称。spring-doc.cn

JMS 指标

自动配置支持所有可用的 JmsTemplate bean 和 @JmsListener 带 Comments 的方法的检测。 这将分别生成 和 metrics。 有关生成的观察结果的更多信息,请参阅 Spring Framework 参考文档"jms.message.publish""jms.message.process"spring-doc.cn

Spring MVC 指标

自动配置可以检测 Spring MVC 控制器和功能处理程序处理的所有请求。 默认情况下,使用名称 . 您可以通过设置属性来自定义名称。http.server.requestsmanagement.observations.http.server.requests.namespring-doc.cn

要添加到默认标签,请提供从包扩展 DefaultServerRequestObservationConvention@Bean。 要替换默认标签,请提供实现 ServerRequestObservationConvention 的@Beanorg.springframework.http.server.observationspring-doc.cn

在某些情况下,在 Web 控制器中处理的异常不会记录为请求指标标签。 应用程序可以通过将已处理的异常设置为请求属性来选择加入并记录异常。

默认情况下,将处理所有请求。 要自定义过滤器,@Bean请提供实现 .FilterRegistrationBean<ServerHttpObservationFilter>spring-doc.cn

Spring WebFlux 指标

自动配置允许检测 Spring WebFlux 控制器和功能处理程序处理的所有请求。 默认情况下,使用名称 . 您可以通过设置属性来自定义名称。http.server.requestsmanagement.observations.http.server.requests.namespring-doc.cn

要添加到默认标签,请提供从包扩展 DefaultServerRequestObservationConvention@Bean。 要替换默认标签,请提供实现 ServerRequestObservationConvention 的@Beanorg.springframework.http.server.reactive.observationspring-doc.cn

在某些情况下,控制器和处理程序函数中处理的异常不会记录为请求指标标签。 应用程序可以通过将已处理的异常设置为请求属性来选择加入并记录异常。

Jersey Server 指标

自动配置允许检测 Jersey JAX-RS 实现处理的所有请求。 默认情况下,使用名称 . 您可以通过设置属性来自定义名称。http.server.requestsmanagement.observations.http.server.requests.namespring-doc.cn

默认情况下,Jersey 服务器指标使用以下信息进行标记:spring-doc.cn

标记 描述

exceptionspring-doc.cn

处理请求时引发的任何异常的简单类名。spring-doc.cn

methodspring-doc.cn

请求的方法(例如,或GETPOST)spring-doc.cn

outcomespring-doc.cn

请求的结果,基于响应的状态代码。 1xx 是 , 2xx 是 , 3xx 是 , 4xx 是 ,5xx 是INFORMATIONALSUCCESSREDIRECTIONCLIENT_ERRORSERVER_ERRORspring-doc.cn

statusspring-doc.cn

响应的 HTTP 状态代码(例如200500)spring-doc.cn

urispring-doc.cn

变量替换之前的请求的 URI 模板(如果可能)(例如/api/person/{id})spring-doc.cn

要自定义标签,请提供实现 JerseyObservationConvention 的@Beanspring-doc.cn

HTTP 客户端指标

Spring Boot Actuator 管理 RestTemplateWebClientRestClient 的检测。 为此,您必须注入自动配置的构建器并使用它来创建实例:spring-doc.cn

默认情况下,使用名称 . 您可以通过设置属性来自定义名称。http.client.requestsmanagement.observations.http.client.requests.namespring-doc.cn

要在使用 RestTemplateRestClient 时自定义标签,请提供从包中实现 ClientRequestObservationConvention@Bean。 要在使用 WebClient 时自定义标签,请提供从包中实现 ClientRequestObservationConvention 的@Beanorg.springframework.http.client.observationorg.springframework.web.reactive.function.clientspring-doc.cn

Tomcat 指标

仅当启用 MBean 注册表时,自动配置才会启用 Tomcat 的检测。 默认情况下,MBean 注册表处于禁用状态,但您可以通过设置为 来启用它。server.tomcat.mbeanregistry.enabledtruespring-doc.cn

Tomcat 指标在计量名称下发布。tomcat.spring-doc.cn

缓存指标

自动配置允许在启动时检测所有可用的 Cache 实例,其指标前缀为 . 缓存插桩是针对一组基本指标进行标准化的。 此外,还提供了特定于缓存的指标。cachespring-doc.cn

支持以下缓存库:spring-doc.cn

度量由缓存的名称和 CacheManager 的名称进行标记,该名称派生自 Bean 名称。spring-doc.cn

只有在启动时配置的缓存才会绑定到注册表。 对于未在缓存配置中定义的缓存,例如在启动阶段之后动态或以编程方式创建的缓存,需要显式注册。 提供了 CacheMetricsRegistrar bean 以简化该过程。

Spring Batch 指标

Spring GraphQL 指标

DataSource 指标

自动配置允许检测所有可用的 DataSource 对象,其指标前缀为 . 数据源检测会生成表示池中当前活动、空闲、允许的最大连接数和允许的最小连接的仪表。jdbc.connectionsspring-doc.cn

度量也由根据 Bean 名称计算的 DataSource 的名称进行标记。spring-doc.cn

默认情况下, Spring Boot 为所有支持的数据源提供元数据。 如果不支持您最喜欢的数据源,则可以添加其他 DataSourcePoolMetadataProvider bean。 有关示例,请参阅 DataSourcePoolMetadataProvidersConfiguration

此外,特定于 Hikari 的指标还带有前缀。 每个量度都由池的名称进行标记(您可以使用 控制它)。hikaricpspring.datasource.namespring-doc.cn

Hibernate 指标

如果位于 classpath 上,则所有启用了统计信息的可用 Hibernate EntityManagerFactory 实例都使用名为 .org.hibernate.orm:hibernate-micrometerhibernatespring-doc.cn

度量也由 EntityManagerFactory 的名称标记,该名称派生自 bean 名称。spring-doc.cn

要启用统计信息,必须将标准 JPA 属性设置为 。 您可以在自动配置的 EntityManagerFactory 上启用它:hibernate.generate_statisticstruespring-doc.cn

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

Spring Data Repository 指标

自动配置支持所有 Spring Data Repository 方法调用的检测。 默认情况下,使用名称 . 您可以通过设置属性来自定义名称。spring.data.repository.invocationsmanagement.metrics.data.repository.metric-namespring-doc.cn

Repository 接口和方法支持包中的 @Timed 注释。 如果您不想记录所有 Repository 调用的指标,则可以改为设置并专门使用 @Timed 注解。io.micrometer.core.annotationmanagement.metrics.data.repository.autotime.enabledfalsespring-doc.cn

@Timed 注解为该方法启用长任务计时器。 长任务计时器需要单独的指标名称,并且可以与短任务计时器堆叠。longTask = true

默认情况下,存储库调用相关指标使用以下信息进行标记:spring-doc.cn

标记 描述

repositoryspring-doc.cn

Repository 的简单类名。spring-doc.cn

methodspring-doc.cn

调用的 Repository 方法的名称。spring-doc.cn

statespring-doc.cn

结果状态 (、 、 或 )。SUCCESSERRORCANCELEDRUNNINGspring-doc.cn

exceptionspring-doc.cn

从调用中引发的任何异常的简单类名。spring-doc.cn

要替换默认标签,请提供实现 RepositoryTagsProvider 的@Beanspring-doc.cn

RabbitMQ 指标

自动配置允许使用名为 .rabbitmqspring-doc.cn

Spring 集成指标

Spring 集成会在 MeterRegistry bean 可用时自动提供 Micrometer 支持。 指标在计量名称下发布。spring.integration.spring-doc.cn

Kafka 指标

自动配置分别为自动配置的消费者工厂和生产者工厂注册 MicrometerConsumerListenerMicrometerProducerListener。 它还为StreamsBuilderFactoryBean注册KafkaStreamsMicrometerListener。 有关更多详细信息,请参阅 Spring Kafka 文档的 Micrometer Native Metrics 部分。spring-doc.cn

MongoDB 指标

本节简要介绍了 MongoDB 的可用指标。spring-doc.cn

MongoDB 命令指标

自动配置向自动配置的 MongoClient 注册 MongoMetricsCommandListenerspring-doc.cn

为向底层 MongoDB 驱动程序发出的每个命令创建一个名为 的计时器指标。 默认情况下,每个指标都标有以下信息:mongodb.driver.commandsspring-doc.cn

标记 描述

commandspring-doc.cn

发出的命令的名称。spring-doc.cn

cluster.idspring-doc.cn

命令发送到的集群的标识符。spring-doc.cn

server.addressspring-doc.cn

命令发送到的服务器的地址。spring-doc.cn

statusspring-doc.cn

命令的结果 ( 或 )。SUCCESSFAILEDspring-doc.cn

要替换默认 metric 标记,请定义 MongoCommandTagsProvider bean,如下例所示:spring-doc.cn

import io.micrometer.core.instrument.binder.mongodb.MongoCommandTagsProvider;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyCommandTagsProviderConfiguration {

	@Bean
	public MongoCommandTagsProvider customCommandTagsProvider() {
		return new CustomCommandTagsProvider();
	}

}
import io.micrometer.core.instrument.binder.mongodb.MongoCommandTagsProvider
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyCommandTagsProviderConfiguration {

	@Bean
	fun customCommandTagsProvider(): MongoCommandTagsProvider? {
		return CustomCommandTagsProvider()
	}

}

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

management.metrics.mongo.command.enabled=false
management:
  metrics:
    mongo:
      command:
        enabled: false

MongoDB 连接池指标

自动配置向自动配置的 MongoClient 注册 MongoMetricsConnectionPoolListenerspring-doc.cn

将为连接池创建以下仪表指标:spring-doc.cn

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

  • mongodb.driver.pool.checkedout报告当前正在使用的连接数。spring-doc.cn

  • mongodb.driver.pool.waitqueuesize报告池中连接的等待队列的当前大小。spring-doc.cn

默认情况下,每个指标都标有以下信息:spring-doc.cn

标记 描述

cluster.idspring-doc.cn

连接池对应的集群的标识符。spring-doc.cn

server.addressspring-doc.cn

连接池对应的服务器的地址。spring-doc.cn

要替换默认度量标记,请定义一个MongoConnectionPoolTagsProvider Bean:spring-doc.cn

import io.micrometer.core.instrument.binder.mongodb.MongoConnectionPoolTagsProvider;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyConnectionPoolTagsProviderConfiguration {

	@Bean
	public MongoConnectionPoolTagsProvider customConnectionPoolTagsProvider() {
		return new CustomConnectionPoolTagsProvider();
	}

}
import io.micrometer.core.instrument.binder.mongodb.MongoConnectionPoolTagsProvider
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyConnectionPoolTagsProviderConfiguration {

	@Bean
	fun customConnectionPoolTagsProvider(): MongoConnectionPoolTagsProvider {
		return CustomConnectionPoolTagsProvider()
	}

}

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

management.metrics.mongo.connectionpool.enabled=false
management:
  metrics:
    mongo:
      connectionpool:
        enabled: false

Jetty 指标

自动配置使用 Micrometer 的 JettyServerThreadPoolMetrics 绑定 Jetty 的 ThreadPool 的指标。 Jetty 连接器实例的指标通过使用 Micrometer 的 JettyConnectionMetrics 进行绑定,当设置为 Micrometer 的 JettySslHandshakeMetrics 时。server.ssl.enabledtruespring-doc.cn

@Timed 注释支持

要启用@Timed注释扫描,您需要将该属性设置为 。 请参阅 Micrometer 文档management.observations.annotations.enabledtruespring-doc.cn

Redis 指标

自动配置为自动配置的 LettuceConnectionFactory 注册一个 MicrometerCommandLatencyRecorder。 有关更多详细信息,请参阅 Lettuce 文档的 Micrometer Metrics 部分spring-doc.cn

注册自定义指标

要注册自定义指标,请将 MeterRegistry 注入到您的组件中:spring-doc.cn

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tags;

import org.springframework.stereotype.Component;

@Component
public class MyBean {

	private final Dictionary dictionary;

	public MyBean(MeterRegistry registry) {
		this.dictionary = Dictionary.load();
		registry.gauge("dictionary.size", Tags.empty(), this.dictionary.getWords().size());
	}

}
import io.micrometer.core.instrument.MeterRegistry
import io.micrometer.core.instrument.Tags
import org.springframework.stereotype.Component

@Component
class MyBean(registry: MeterRegistry) {

	private val dictionary: Dictionary

	init {
		dictionary = Dictionary.load()
		registry.gauge("dictionary.size", Tags.empty(), dictionary.words.size)
	}

}

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

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.binder.MeterBinder;

import org.springframework.context.annotation.Bean;

public class MyMeterBinderConfiguration {

	@Bean
	public MeterBinder queueSize(Queue queue) {
		return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);
	}

}
import io.micrometer.core.instrument.Gauge
import io.micrometer.core.instrument.binder.MeterBinder
import org.springframework.context.annotation.Bean

class MyMeterBinderConfiguration {

	@Bean
	fun queueSize(queue: Queue): MeterBinder {
		return MeterBinder { registry ->
			Gauge.builder("queueSize", queue::size).register(registry)
		}
	}

}

使用 MeterBinder 可确保设置正确的依赖关系,并且在检索指标的值时 bean 可用。 如果您发现跨组件或应用程序重复检测一套指标,则 MeterBinder 实现也很有用。spring-doc.cn

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

自定义单个量度

如果您需要将自定义项应用于特定的 Meter 实例,则可以使用 MeterFilter 接口。spring-doc.cn

例如,如果要将标签重命名为 for all meter IDs starting with ,则可以执行以下操作:mytag.regionmytag.areacom.examplespring-doc.cn

import io.micrometer.core.instrument.config.MeterFilter;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyMetricsFilterConfiguration {

	@Bean
	public MeterFilter renameRegionTagMeterFilter() {
		return MeterFilter.renameTag("com.example", "mytag.region", "mytag.area");
	}

}
import io.micrometer.core.instrument.config.MeterFilter
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyMetricsFilterConfiguration {

	@Bean
	fun renameRegionTagMeterFilter(): MeterFilter {
		return MeterFilter.renameTag("com.example", "mytag.region", "mytag.area")
	}

}
默认情况下,所有MeterFilter bean 都自动绑定到 Spring 管理的MeterRegistry。 确保使用 Spring 托管的 MeterRegistry 而不是 Metrics 上的任何静态方法来注册您的指标。 这些使用非 Spring Management 的全局注册表。

常用标签

常用标签通常用于对运行环境进行维度下钻,例如主机、实例、区域、堆栈等。 Commons 标签应用于所有计量,并且可以进行配置,如下例所示:spring-doc.cn

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

前面的示例将 和 标记分别添加到值为 和 的所有计量器。regionstackus-east-1prodspring-doc.cn

如果您使用 Graphite,则常用标签的顺序非常重要。 由于使用这种方法无法保证常见标签的顺序,因此建议 Graphite 用户定义自定义 MeterFilter

每米属性

除了 MeterFilter bean 之外,您还可以使用 properties 按计量应用一组有限的自定义。 使用 Spring Boot 的PropertiesMeterFilter将每计量自定义应用于以给定名称开头的任何计量 ID。 以下示例筛选掉 ID 以 .example.remotespring-doc.cn

management.metrics.enable.example.remote=false
management:
  metrics:
    enable:
      example:
        remote: false

以下属性允许按计量进行自定义:spring-doc.cn

表 1.按计量自定义
财产 描述

management.metrics.enablespring-doc.cn

是否接受具有特定 ID 的仪表。 不接受的计量将从 MeterRegistry 中筛选出来。spring-doc.cn

management.metrics.distribution.percentiles-histogramspring-doc.cn

是否发布适合计算可聚合(跨维度)百分位数近似值的直方图。spring-doc.cn

management.metrics.distribution.minimum-expected-value,management.metrics.distribution.maximum-expected-valuespring-doc.cn

通过限制预期值的范围来发布更少的直方图存储桶。spring-doc.cn

management.metrics.distribution.percentilesspring-doc.cn

发布在应用程序中计算的百分位值spring-doc.cn

management.metrics.distribution.expiry,management.metrics.distribution.buffer-lengthspring-doc.cn

通过将最近的样本累积在可配置的到期后轮换的环形缓冲区中,赋予最近的样本更大的权重,其中 可配置的缓冲区长度。spring-doc.cn

management.metrics.distribution.slospring-doc.cn

发布包含由服务级别目标定义的存储桶的累积直方图。spring-doc.cn

有关 、 和 背后的概念的更多详细信息,请参阅 Micrometer 文档的 直方图 和 百分位数 部分。percentiles-histogrampercentilesslospring-doc.cn

Metrics 终端节点

Spring Boot 提供了一个终端节点,您可以诊断性地使用它来检查应用程序收集的指标。 默认情况下,终端节点不可用,必须公开。 有关更多详细信息,请参阅公开终端节点metricsspring-doc.cn

导航到 将显示可用计量器名称的列表。 您可以通过提供特定计量的名称作为选择器(例如,./actuator/metrics/actuator/metrics/jvm.memory.maxspring-doc.cn

您在此处使用的名称应与代码中使用的名称匹配,而不是与针对其寄送到的监控系统进行命名约定规范化后的名称匹配。 换句话说,如果由于 Prometheus 的蛇形大小写命名约定而在 Prometheus 中显示为 Prometheus,则在检查终端节点中的仪表时,您仍应用作选择器。jvm.memory.maxjvm_memory_maxjvm.memory.maxmetricsspring-doc.cn

您还可以在 URL 末尾添加任意数量的查询参数,以便对计量器进行维度向下钻取,例如 .tag=KEY:VALUE/actuator/metrics/jvm.memory.max?tag=area:nonheapspring-doc.cn

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

与 Micrometer Observation 集成

DefaultMeterObservationHandler 会自动在 ObservationRegistry 上注册,从而为每个已完成的观察创建指标。spring-doc.cn