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

指标

开始

Spring Boot 自动配置复合MeterRegistry并为它在类路径上找到的每个受支持的实现向复合添加一个注册表。 依赖于micrometer-registry-{system}足以让 Spring Boot 配置注册表。spring-doc.cadn.net.cn

大多数注册管理机构具有共同的功能。 例如,即使 Micrometer 注册表实现在类路径上,您也可以禁用特定的注册表。 以下示例禁用 Datadog:spring-doc.cadn.net.cn

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

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

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

Spring Boot 还会将任何自动配置的注册表添加到Metrics类,除非你明确告诉它不要:spring-doc.cadn.net.cn

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

您可以注册任意数量的MeterRegistryCustomizerbean 以进一步配置注册表,例如在向注册表注册任何仪表注册之前应用通用标签:spring-doc.cadn.net.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.cadn.net.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 还配置了内置检测,您可以通过配置或专用注释标记进行控制。spring-doc.cadn.net.cn

支持的监控系统

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

应用光学

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

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

地图集

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

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

如果另外提供应用程序密钥(可选),则还将导出计量说明、类型和基本单位等元数据:spring-doc.cadn.net.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 站点 (api.datadoghq.com). 如果您的 Datadog 项目托管在其他站点之一上,或者您需要通过代理发送指标,请相应地配置 URI:spring-doc.cadn.net.cn

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

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

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

Dynatrace 的

Dynatrace 提供了两个指标摄取 API,这两个 API 都是为 Micrometer 实现的。 您可以在此处找到有关 Micrometer 指标摄取的 Dynatrace 文档。 配置属性中的v1命名空间仅在导出到 Timeseries v1 API 时适用。 配置属性中的v2命名空间仅在导出到 Metrics v2 API 时适用。 请注意,此集成只能导出到v1v2API 版本,使用v2是首选。 如果device-id(v1 需要,但在 v2 中不使用)在v1命名空间,则指标将导出到v1端点。 否则v2被假设。spring-doc.cadn.net.cn

v2 API

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

自动配置

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

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

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

这是默认行为,除了依赖io.micrometer:micrometer-registry-dynatrace.spring-doc.cadn.net.cn

手动配置

如果没有可用的自动配置,则需要指标 v2 API 的端点和 API Tokens。 API Tokens必须具有“摄取指标”(metrics.ingest) 权限集。 建议将Tokens的范围限制为此一个权限。 您必须确保终结点 URI 包含路径(例如/api/v2/metrics/ingest):spring-doc.cadn.net.cn

指标 API v2 引入终结点的 URL 因部署选项而异:spring-doc.cadn.net.cn

以下示例使用example环境 ID:spring-doc.cadn.net.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.cadn.net.cn

  • 指标键前缀:设置前缀,该前缀附加到所有导出的指标键。spring-doc.cadn.net.cn

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

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

  • 使用 Dynatrace 摘要工具:在某些情况下,Micrometer Dynatrace 注册表创建的指标被拒绝。 在 Micrometer 1.9.x 中,通过引入特定于 Dynatrace 的汇总工具修复了这个问题。 将此切换设置为false强制 Micrometer 回退到 1.9.x 之前的默认行为。 仅当从 Micrometer 1.8.x 迁移到 1.9.x 时遇到问题时才应使用它。spring-doc.cadn.net.cn

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

可以不指定 URI 和 API Tokens,如以下示例所示。 在此方案中,使用自动配置的终结点:spring-doc.cadn.net.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 指标注册表使用 Timeseries v1 API 定期将指标推送到配置的 URI。 为了向后兼容现有设置,当device-id设置为(v1 需要,但在 v2 中不使用),则指标将导出到 Timeseries v1 终结点。 要将指标导出到 Dynatrace,必须提供您的 API Tokens、设备 ID 和 URI:spring-doc.cadn.net.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.cadn.net.cn

与版本无关的设置

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

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

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

弹性的

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

要控制此行为,请定义您的GraphiteMeterRegistry并提供您自己的HierarchicalNameMapper. 自动配置GraphiteConfigClock除非您定义自己的 bean:spring-doc.cadn.net.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 Tokens:spring-doc.cadn.net.cn

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

还应配置一个或多个标记,以标识将指标推送到的数据源:spring-doc.cadn.net.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,请配置org,bucket和身份验证token用于编写指标。您可以使用以下方法提供要使用的 Influx 服务器的位置:spring-doc.cadn.net.cn

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

JMX公司

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

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

Micrometer 提供默认的HierarchicalNameMapper控制如何将维度计 ID 映射到平面分层名称spring-doc.cadn.net.cn

要控制此行为,请定义您的JmxMeterRegistry并提供您自己的HierarchicalNameMapper. 自动配置JmxConfigClock除非您定义自己的 bean:spring-doc.cadn.net.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 服务器的位置:spring-doc.cadn.net.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.cadn.net.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.cadn.net.cn

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

默认情况下,指标通过 REST 调用发布,但如果 Java Agent API 位于类路径上,也可以使用它:spring-doc.cadn.net.cn

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

最后,您可以通过定义自己的NewRelicClientProvider豆。spring-doc.cadn.net.cn

OTLP的

默认情况下,指标通过 OpenTelemetry 协议 (OTLP) 导出到本地计算机上运行的使用者。 要导出到其他位置,请使用management.otlp.metrics.export.url:spring-doc.cadn.net.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"

自定义标头(例如用于身份验证)也可以使用management.otlp.metrics.export.headers.*性能。spring-doc.cadn.net.cn

普罗 米修斯

Prometheus 希望抓取或轮询单个应用程序实例以获取指标。 Spring Boot 提供了一个执行器端点/actuator/prometheus以适当的格式呈现 Prometheus 抓取spring-doc.cadn.net.cn

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

以下示例scrape_config添加到prometheus.yml:spring-doc.cadn.net.cn

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

还支持 Prometheus Exemplars。 要启用此功能,请SpanContext豆子应该存在。 如果您使用的是已弃用的 Prometheus simpleclient 支持并希望启用该功能,则SpanContextSupplier豆子应该存在。 如果您使用千分尺追踪,这将为您自动配置,但如果您愿意,您可以随时创建自己的追踪。 请查看 Prometheus 文档,因为该功能需要在 Prometheus 端显式启用,并且仅支持 OpenMetrics 格式。spring-doc.cadn.net.cn

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

Prometheus Pushgateway 的自动配置仅适用于已弃用的 Prometheus simpleclient。 要切换到 simpleclient,请删除io.micrometer:micrometer-registry-prometheus并添加io.micrometer:micrometer-registry-prometheus-simpleclient相反。

要启用 Prometheus Pushgateway 支持,请向项目添加以下依赖项:spring-doc.cadn.net.cn

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

当这个 Prometheus Pushgateway 依赖项存在于类路径上并且management.prometheus.metrics.export.pushgateway.enabled属性设置为true一个PrometheusPushGatewayManagerbean 是自动配置的。 这管理将指标推送到 Prometheus Pushgateway。spring-doc.cadn.net.cn

您可以调整PrometheusPushGatewayManager通过使用management.prometheus.metrics.export.pushgateway. 对于高级配置,您还可以提供自己的配置PrometheusPushGatewayManager豆。spring-doc.cadn.net.cn

信号FX

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

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

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

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

简单

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

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

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

堆栈驱动程序

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

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

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

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

统计D

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

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

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

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

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

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

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

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

支持的指标和计量

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

JVM 指标

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

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

系统指标

自动配置通过使用核心 Micrometer 类启用系统度量。 系统指标发布在system.,process.disk.仪表名称。spring-doc.cadn.net.cn

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

应用程序启动指标

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

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

记录器指标

自动配置启用 Logback 和 Log4J2 的事件指标。 详细信息发布在log4j2.events.logback.events.仪表名称。spring-doc.cadn.net.cn

任务执行和调度指标

自动配置支持所有可用仪器ThreadPoolTaskExecutorThreadPoolTaskScheduler豆子,只要下属ThreadPoolExecutor可用。 指标由执行器的名称标记,该名称派生自 Bean 名称。spring-doc.cadn.net.cn

JMS 指标

自动配置支持所有可用仪器JmsTemplatebeans 和@JmsListener带注释的方法。 这将产生"jms.message.publish""jms.message.process"指标。 有关生成的观察的更多信息,请参阅 Spring Framework 参考文档spring-doc.cadn.net.cn

Spring MVC 指标

自动配置允许检测 Spring MVC 控制器和功能处理程序处理的所有请求。 默认情况下,生成指标的名称为http.server.requests. 您可以通过设置management.observations.http.server.requests.name财产。spring-doc.cadn.net.cn

要添加到默认标记,请提供@Bean延伸DefaultServerRequestObservationConventionorg.springframework.http.server.observation包。 要替换默认标记,请提供一个@Bean实现ServerRequestObservationConvention.spring-doc.cadn.net.cn

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

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

Spring WebFlux 指标

自动配置允许检测 Spring WebFlux 控制器和功能处理程序处理的所有请求。 默认情况下,生成指标的名称为http.server.requests. 您可以通过设置management.observations.http.server.requests.name财产。spring-doc.cadn.net.cn

要添加到默认标记,请提供@Bean延伸DefaultServerRequestObservationConventionorg.springframework.http.server.reactive.observation包。 要替换默认标记,请提供一个@Bean实现ServerRequestObservationConvention.spring-doc.cadn.net.cn

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

Jersey服务器指标

自动配置支持检测 Jersey JAX-RS 实现处理的所有请求。 默认情况下,生成指标的名称为http.server.requests. 您可以通过设置management.observations.http.server.requests.name财产。spring-doc.cadn.net.cn

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

标记 描述

exceptionspring-doc.cadn.net.cn

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

methodspring-doc.cadn.net.cn

请求的方法(例如GETPOST)spring-doc.cadn.net.cn

outcomespring-doc.cadn.net.cn

请求的结果,基于响应的状态代码。 1xx 是INFORMATIONAL,2xx 是SUCCESS,3xx 是REDIRECTION,4xx 是CLIENT_ERROR,5xx 是SERVER_ERRORspring-doc.cadn.net.cn

statusspring-doc.cadn.net.cn

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

urispring-doc.cadn.net.cn

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

要自定义标记,请提供@Bean实现JerseyObservationConvention.spring-doc.cadn.net.cn

HTTP 客户端指标

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

默认情况下,生成指标的名称为http.client.requests. 您可以通过设置management.observations.http.client.requests.name财产。spring-doc.cadn.net.cn

在使用RestTemplateRestClient,提供一个@Bean实现ClientRequestObservationConventionorg.springframework.http.client.observation包。 在使用WebClient,提供一个@Bean实现ClientRequestObservationConventionorg.springframework.web.reactive.function.client包。spring-doc.cadn.net.cn

Tomcat 指标

自动配置仅在 MBeanRegistry已启用。 默认情况下,MBean 注册表是禁用的,但您可以通过设置server.tomcat.mbeanregistry.enabledtrue.spring-doc.cadn.net.cn

Tomcat 指标发布在tomcat.仪表名称。spring-doc.cadn.net.cn

缓存指标

自动配置支持所有可用仪器Cache启动时的实例,指标前缀为cache. 缓存检测针对一组基本指标进行了标准化。 还提供其他特定于缓存的指标。spring-doc.cadn.net.cn

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

应启用指标,以便自动配置选取它们。 有关更多详细信息,请参阅您正在使用的缓存库的文档。

指标由缓存的名称和CacheManager,源自 bean 名称。spring-doc.cadn.net.cn

只有在启动时配置的缓存才会绑定到注册表。 对于缓存配置中未定义的缓存,例如动态创建的缓存或在启动阶段后以编程方式创建的缓存,需要显式注册。 一个CacheMetricsRegistrarbean 的提供使该过程更容易。

Spring Batch 指标

Spring GraphQL 指标

数据源指标

自动配置支持所有可用仪器DataSource指标前缀为jdbc.connections. 数据源检测生成仪表,这些仪表表示池中当前活动、空闲、允许的最大连接数和允许的最小连接数。spring-doc.cadn.net.cn

指标还由DataSource根据 Bean 名称计算。spring-doc.cadn.net.cn

默认情况下,Spring Boot 为所有受支持的数据源提供元数据。 您可以添加其他DataSourcePoolMetadataProviderbean,如果不支持您最喜欢的数据源。 看DataSourcePoolMetadataProvidersConfiguration例如。

此外,特定于 Hikari 的指标会通过hikaricp前缀。 每个指标都由池的名称标记(您可以使用spring.datasource.name).spring-doc.cadn.net.cn

休眠指标

如果org.hibernate.orm:hibernate-micrometer在类路径上,所有可用的休眠EntityManagerFactory启用了统计信息的实例使用名为hibernate.spring-doc.cadn.net.cn

指标还由EntityManagerFactory,源自 bean 名称。spring-doc.cadn.net.cn

要启用统计信息,请标准 JPA 属性hibernate.generate_statistics必须设置为true. 您可以在自动配置的EntityManagerFactory:spring-doc.cadn.net.cn

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

Spring Data Repository 指标

自动配置支持所有 Spring Data 的检测Repository方法调用。 默认情况下,生成指标的名称为spring.data.repository.invocations. 您可以通过设置management.metrics.data.repository.metric-name财产。spring-doc.cadn.net.cn

@Timed注释io.micrometer.core.annotation软件包支持Repository接口和方法。 如果您不想记录所有指标Repository调用,您可以将management.metrics.data.repository.autotime.enabledfalse并专门使用@Timed注释。spring-doc.cadn.net.cn

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

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

标记 描述

repositoryspring-doc.cadn.net.cn

源的简单类名Repository.spring-doc.cadn.net.cn

methodspring-doc.cadn.net.cn

的名称Repository方法。spring-doc.cadn.net.cn

statespring-doc.cadn.net.cn

结果状态 (SUCCESS,ERROR,CANCELEDRUNNING).spring-doc.cadn.net.cn

exceptionspring-doc.cadn.net.cn

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

要替换默认标记,请提供一个@Bean实现RepositoryTagsProvider.spring-doc.cadn.net.cn

RabbitMQ 指标

自动配置允许检测所有可用的 RabbitMQ 连接工厂,其指标名为rabbitmq.spring-doc.cadn.net.cn

Spring 集成指标

Spring Integration 每当MeterRegistry豆子可用。 指标发布在spring.integration.仪表名称。spring-doc.cadn.net.cn

Kafka 指标

自动配置注册一个MicrometerConsumerListenerMicrometerProducerListener分别用于自动配置的使用者工厂和生产者工厂。 它还注册了一个KafkaStreamsMicrometerListenerStreamsBuilderFactoryBean. 有关更多详细信息,请参阅 Spring Kafka 文档的 Micrometer Native Metrics 部分。spring-doc.cadn.net.cn

MongoDB 指标

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

MongoDB 命令指标

自动配置注册一个MongoMetricsCommandListener使用自动配置的MongoClient.spring-doc.cadn.net.cn

名为mongodb.driver.commands为向底层 MongoDB 驱动程序发出的每个命令创建。 默认情况下,每个指标都使用以下信息进行标记:spring-doc.cadn.net.cn

标记 描述

commandspring-doc.cadn.net.cn

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

cluster.idspring-doc.cadn.net.cn

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

server.addressspring-doc.cadn.net.cn

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

statusspring-doc.cadn.net.cn

命令 (SUCCESSFAILED).spring-doc.cadn.net.cn

要替换默认指标标记,请定义一个MongoCommandTagsProviderbean,如以下示例所示:spring-doc.cadn.net.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.cadn.net.cn

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

MongoDB 连接池指标

自动配置注册一个MongoMetricsConnectionPoolListener使用自动配置的MongoClient.spring-doc.cadn.net.cn

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

默认情况下,每个指标都使用以下信息进行标记:spring-doc.cadn.net.cn

标记 描述

cluster.idspring-doc.cadn.net.cn

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

server.addressspring-doc.cadn.net.cn

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

要替换默认指标标记,请定义一个MongoConnectionPoolTagsProvider豆:spring-doc.cadn.net.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.cadn.net.cn

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

Jetty指标

自动配置绑定 Jetty 的指标ThreadPool通过使用 Micrometer 的JettyServerThreadPoolMetrics. Jetty 的指标Connector实例使用 Micrometer 的JettyConnectionMetrics并且,当server.ssl.enabled设置为true, 千分尺的JettySslHandshakeMetrics.spring-doc.cadn.net.cn

Redis 指标

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

注册自定义指标

要注册自定义指标,请注入MeterRegistry到你的组件中:spring-doc.cadn.net.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.cadn.net.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.cadn.net.cn

默认情况下,来自所有MeterBinderbean 会自动绑定到 Spring 管理的MeterRegistry.

自定义单个指标

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

例如,如果要将mytag.region标签设置为mytag.area对于以com.example,您可以执行以下作:spring-doc.cadn.net.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")
	}

}
默认情况下,所有MeterFilterbean 会自动绑定到 Spring 管理的MeterRegistry. 确保使用 Spring 托管的MeterRegistry而不是任何静态方法Metrics. 这些使用非 Spring 管理的全局注册表。

常见标签

通用标签一般用于运行环境的维度下钻,如主机、实例、地域、堆栈等。通用标签应用于所有仪表,可以配置,如下例所示:spring-doc.cadn.net.cn

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

前面的示例将regionstack标记添加到所有值为us-east-1prod分别。spring-doc.cadn.net.cn

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

每米属性

除了MeterFilterbean,您可以使用属性按米应用一组有限的自定义。使用 Spring Boot 的PropertiesMeterFilter,转换为以给定名称开头的任何仪表 ID。以下示例筛选出 ID 开头为 的任何仪表example.remote.spring-doc.cadn.net.cn

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

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

表 1.每米定制
属性 描述

management.metrics.enablespring-doc.cadn.net.cn

是否接受具有特定 ID 的仪表。 不接受的仪表将从MeterRegistry.spring-doc.cadn.net.cn

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

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

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

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

management.metrics.distribution.percentilesspring-doc.cadn.net.cn

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

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

通过将最近的 Samples累积在环形缓冲区中来赋予它们更大的权重,这些缓冲区在可配置的到期后旋转,并使用 可配置的缓冲区长度。spring-doc.cadn.net.cn

management.metrics.distribution.slospring-doc.cadn.net.cn

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

有关背后概念的更多详细信息percentiles-histogram,percentilesslo,请参阅千分尺文档的直方图和百分位数部分。spring-doc.cadn.net.cn

指标端点

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

导航到/actuator/metrics显示可用仪表名称的列表。 您可以通过提供特定仪表的名称作为选择器来向下钻取以查看有关其信息,例如/actuator/metrics/jvm.memory.max.spring-doc.cadn.net.cn

您在此处使用的名称应与代码中使用的名称匹配,而不是为它交付到的监视系统进行命名约定规范化后的名称。 换句话说,如果jvm.memory.max显示为jvm_memory_max在 Prometheus 中,由于其蛇形命名约定,您仍然应该使用jvm.memory.max作为检查仪表时的选择器metrics端点。spring-doc.cadn.net.cn

您还可以添加任意数量的tag=KEY:VALUE查询参数到URL末尾,以对仪表进行维度向下钻取,例如,/actuator/metrics/jvm.memory.max?tag=area:nonheap.spring-doc.cadn.net.cn

报告的测量值是与仪表名称匹配的所有仪表的统计信息和已应用的任何标记的统计信息的总和。在前面的示例中,返回的Valuestatistic 是堆的“代码缓存”、“压缩类空间”和“元空间”区域的最大内存占用量的总和。如果您只想查看“元空间”的最大大小,您可以添加一个额外的tag=id:Metaspace——也就是说,/actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace.spring-doc.cadn.net.cn

与千分尺观察集成

一个DefaultMeterObservationHandler自动注册在ObservationRegistry,它为每个已完成的观察创建指标。spring-doc.cadn.net.cn