此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
要了解有关 Micrometer 功能的更多信息,请参阅其参考文档,特别是概念部分。 |
开始
Spring Boot 会自动配置一个组合,并为它在 Classpath 上找到的每个受支持的实现向组合添加一个注册表。
在运行时 Classpath 中具有依赖项就足以让 Spring Boot 配置注册表。MeterRegistry
micrometer-registry-{system}
大多数注册表都具有共同的功能。 例如,即使 Micrometer 注册表实现位于 Classpath 上,您也可以禁用特定的注册表。 以下示例禁用 Datadog:
-
Properties
-
YAML
management.datadog.metrics.export.enabled=false
management:
datadog:
metrics:
export:
enabled: false
你也可以禁用所有注册表,除非特定于注册表的属性另有说明,如下例所示:
-
Properties
-
YAML
management.defaults.metrics.export.enabled=false
management:
defaults:
metrics:
export:
enabled: false
Spring Boot 还将任何自动配置的注册表添加到类上的全局静态复合注册表中,除非你明确告诉它不要:Metrics
-
Properties
-
YAML
management.metrics.use-global-registry=false
management:
metrics:
use-global-registry: false
在将任何仪表注册到注册表之前,您可以注册任意数量的 bean 以进一步配置注册表,例如应用通用标记:MeterRegistryCustomizer
-
Java
-
Kotlin
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")
}
}
}
您可以通过更具体地了解泛型类型,将自定义项应用于特定的注册表实现:
-
Java
-
Kotlin
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 标记来控制这些插桩。
支持的监控系统
本节简要介绍每个受支持的监控系统。
应用光学
默认情况下,AppOptics 注册表会定期将指标推送到 。
要将指标导出到 SaaS AppOptics,必须提供您的 API 令牌:api.appoptics.com/v1/measurements
-
Properties
-
YAML
management.appoptics.metrics.export.api-token=YOUR_TOKEN
management:
appoptics:
metrics:
export:
api-token: "YOUR_TOKEN"
地图集
-
Properties
-
YAML
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"
数据狗
-
Properties
-
YAML
management.datadog.metrics.export.api-key=YOUR_KEY
management:
datadog:
metrics:
export:
api-key: "YOUR_KEY"
如果您额外提供应用程序密钥(可选),则还将导出仪表描述、类型和基本单位等元数据:
-
Properties
-
YAML
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.com
-
Properties
-
YAML
management.datadog.metrics.export.uri=https://api.datadoghq.eu
management:
datadog:
metrics:
export:
uri: "https://api.datadoghq.eu"
您还可以更改将指标发送到 Datadog 的间隔:
-
Properties
-
YAML
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 中未使用),则指标将导出到终端节点。
否则,假定为。v1
v2
v1
v2
v2
device-id
v1
v1
v2
v2 API
您可以通过两种方式使用 v2 API。
自动配置
Dynatrace 自动配置可用于由 OneAgent 或 Dynatrace Operator for Kubernetes 监控的主机。
本地 OneAgent:如果 OneAgent 正在主机上运行,则指标会自动导出到本地 OneAgent 摄取终端节点。 摄取端点将指标转发到 Dynatrace 后端。
Dynatrace Kubernetes 操作员:在安装了 Dynatrace Operator 的 Kubernetes 中运行时,注册表将自动从 Operator 那里获取您的端点 URI 和 API 令牌。
这是默认行为,除了对 的依赖性之外,不需要任何特殊设置。io.micrometer:micrometer-registry-dynatrace
手动配置
如果没有可用的自动配置,则需要 Metrics v2 API 的终端节点和 API 令牌。
API 令牌必须具有“Ingest metrics” () 权限集。
我们建议将令牌的范围限制为此权限。
您必须确保端点 URI 包含路径(例如:metrics.ingest
/api/v2/metrics/ingest
Metrics API v2 摄取端点的 URL 因部署选项而异:
-
软件即服务 (SaaS):
https://{your-environment-id}.live.dynatrace.com/api/v2/metrics/ingest
-
托管部署:
https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest
以下示例使用环境 ID 配置指标导出:example
-
Properties
-
YAML
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 文档中找到):
-
Metric key prefix(指标键前缀):设置附加到所有导出的指标键的前缀。
-
使用 Dynatrace 元数据进行扩充:如果 OneAgent 或 Dynatrace 运算符正在运行,请使用其他元数据(例如,关于主机、进程或 pod)来扩充指标。
-
默认维度:指定添加到所有导出指标的键值对。 如果使用 Micrometer 指定了具有相同键的标签,则它们会覆盖默认尺寸。
-
使用 Dynatrace Summary 仪器:在某些情况下,Micrometer Dynatrace 注册表创建的指标被拒绝。 在 Micrometer 1.9.x 中,通过引入 Dynatrace 特定的汇总仪器解决了这个问题。 将此开关设置为强制 Micrometer 回退到 1.9.x 之前的默认值。 它只应在从 Micrometer 1.8.x 迁移到 1.9.x 时遇到问题时使用。
false
-
导出仪表元数据:从 Micrometer 1.12.0 开始,Dynatrace 导出器还将默认导出仪表元数据,例如单位和描述。 使用切换开关关闭此功能。
export-meter-metadata
可以不指定 URI 和 API 令牌,如以下示例所示。 在此方案中,使用自动配置的终端节点:
-
Properties
-
YAML
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-id
-
Properties
-
YAML
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 端点路径是自动添加的。
与版本无关的设置
除了 API 端点和令牌之外,您还可以更改将指标发送到 Dynatrace 的间隔。
默认导出间隔为 。
以下示例将导出间隔设置为 30 秒:60s
-
Properties
-
YAML
management.dynatrace.metrics.export.step=30s
management:
dynatrace:
metrics:
export:
step: "30s"
您可以在 Micrometer 文档和 Dynatrace 文档中找到有关如何为 Micrometer 设置 Dynatrace 导出器的更多信息。
弹性的
默认情况下,指标会导出到本地计算机上运行的 Elastic。 您可以使用以下属性提供要使用的弹性服务器的位置:
-
Properties
-
YAML
management.elastic.metrics.export.host=https://elastic.example.com:8086
management:
elastic:
metrics:
export:
host: "https://elastic.example.com:8086"
神经节
默认情况下,指标将导出到本地计算机上运行的 Ganglia。 您可以提供 Ganglia 服务器主机和端口,如下例所示:
-
Properties
-
YAML
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 服务器主机和端口,如下例所示:
-
Properties
-
YAML
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 提供了一个默认值,用于控制如何将维度计 ID 映射到平面分层名称。HierarchicalNameMapper
要控制此行为,请定义 your 并提供您自己的 .
除非您定义自己的 bean,否则会提供 auto-configured 和 bean:
|
虎尾
默认情况下,Humio 注册表会定期将指标推送到 cloud.humio.com。 要将指标导出到 SaaS Humio,您必须提供 API 令牌:
-
Properties
-
YAML
management.humio.metrics.export.api-token=YOUR_TOKEN
management:
humio:
metrics:
export:
api-token: "YOUR_TOKEN"
您还应配置一个或多个标签,以标识将指标推送到的数据源:
-
Properties
-
YAML
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 服务器的位置:org
bucket
token
-
Properties
-
YAML
management.influx.metrics.export.uri=https://influx.example.com:8086
management:
influx:
metrics:
export:
uri: "https://influx.example.com:8086"
JMX
Micrometer 提供到 JMX 的分层映射,主要作为一种在本地查看指标的廉价且可移植的方式。
默认情况下,指标将导出到 JMX 域。
您可以使用以下方法提供要使用的域:metrics
-
Properties
-
YAML
management.jmx.metrics.export.domain=com.example.app.metrics
management:
jmx:
metrics:
export:
domain: "com.example.app.metrics"
Micrometer 提供了一个默认值,用于控制如何将维度计 ID 映射到平面分层名称。HierarchicalNameMapper
要控制此行为,请定义 your 并提供您自己的 .
除非您定义自己的 bean,否则会提供 auto-configured 和 bean:
|
KairosDB 数据库
默认情况下,指标将导出到本地计算机上运行的 KairosDB。 您可以使用以下方法提供要使用的 KairosDB 服务器的位置:
-
Properties
-
YAML
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"
新遗迹
-
Properties
-
YAML
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 的间隔:
-
Properties
-
YAML
management.newrelic.metrics.export.step=30s
management:
newrelic:
metrics:
export:
step: "30s"
默认情况下,指标是通过 REST 调用发布的,但如果您在 Classpath 上有 Java 代理 API,也可以使用它:
-
Properties
-
YAML
management.newrelic.metrics.export.client-provider-type=insights-agent
management:
newrelic:
metrics:
export:
client-provider-type: "insights-agent"
最后,您可以通过定义自己的 bean 来完全控制。NewRelicClientProvider
开放遥测
默认情况下,指标将导出到本地计算机上运行的 OpenTelemetry。 您可以通过以下方式提供要使用的 OpenTelemetry 指标终端节点的位置:
-
Properties
-
YAML
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/prometheus
默认情况下,终端节点不可用,必须公开。有关更多详细信息,请参阅公开终端节点。 |
以下示例添加到 :scrape_config
prometheus.yml
scrape_configs:
- job_name: "spring"
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ["HOST:PORT"]
还支持 Prometheus Exemplars。
要启用此功能,应存在 Bean。
如果您正在使用已弃用的 Prometheus simpleclient 支持并希望启用该功能,则应存在一个 bean。
如果您使用 Micrometer Tracing,这将为您自动配置,但您始终可以根据需要创建自己的跟踪。
请查看 Prometheus 文档,因为此功能需要在 Prometheus 端明确启用,并且仅支持使用 OpenMetrics 格式。SpanContext
SpanContextSupplier
对于存在时间不够长而无法抓取的临时或批处理作业,您可以使用 Prometheus Pushgateway 支持向 Prometheus 公开指标。
Prometheus Pushgateway 目前仅适用于已弃用的 Prometheus simpleclient,直到 Prometheus 1.x 客户端添加对它的支持。
要切换到 simpleclient,请从项目中删除并改为添加。io.micrometer:micrometer-registry-prometheus io.micrometer:micrometer-registry-prometheus-simpleclient |
要启用 Prometheus Pushgateway 支持,请将以下依赖项添加到您的项目中:
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_pushgateway</artifactId>
</dependency>
当 Classpath 上存在 Prometheus Pushgateway 依赖项并且该属性设置为 时,将自动配置 bean。
这将管理将指标推送到 Prometheus Pushgateway。management.prometheus.metrics.export.pushgateway.enabled
true
PrometheusPushGatewayManager
您可以使用 下的属性来优化 。
对于高级配置,您还可以提供自己的 Bean。PrometheusPushGatewayManager
management.prometheus.metrics.export.pushgateway
PrometheusPushGatewayManager
信号外汇
-
Properties
-
YAML
management.signalfx.metrics.export.access-token=YOUR_ACCESS_TOKEN
management:
signalfx:
metrics:
export:
access-token: "YOUR_ACCESS_TOKEN"
您还可以更改将指标发送到 SignalFx 的间隔:
-
Properties
-
YAML
management.signalfx.metrics.export.step=30s
management:
signalfx:
metrics:
export:
step: "30s"
简单
Micrometer 附带了一个简单的内存后端,如果未配置其他注册表,则会自动用作后备。 这样,您就可以查看 metrics 终端节点中收集了哪些指标。
一旦您使用任何其他可用的后端,内存中后端就会自行禁用。 您也可以显式禁用它:
-
Properties
-
YAML
management.simple.metrics.export.enabled=false
management:
simple:
metrics:
export:
enabled: false
堆栈驱动程序
Stackdriver 注册表会定期将指标推送到 Stackdriver。 要将指标导出到 SaaS Stackdriver,您必须提供您的 Google Cloud 项目 ID:
-
Properties
-
YAML
management.stackdriver.metrics.export.project-id=my-project
management:
stackdriver:
metrics:
export:
project-id: "my-project"
您还可以更改将指标发送到 Stackdriver 的时间间隔:
-
Properties
-
YAML
management.stackdriver.metrics.export.step=30s
management:
stackdriver:
metrics:
export:
step: "30s"
统计 D
StatsD 注册表急切地通过 UDP 将指标推送到 StatsD 代理。 默认情况下,指标将导出到本地计算机上运行的 StatsD 代理。 您可以使用以下方法提供要使用的 StatsD 代理主机、端口和协议:
-
Properties
-
YAML
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):
-
Properties
-
YAML
management.statsd.metrics.export.flavor=etsy
management:
statsd:
metrics:
export:
flavor: "etsy"
波
-
Properties
-
YAML
management.wavefront.api-token=YOUR_API_TOKEN
management:
wavefront:
api-token: "YOUR_API_TOKEN"
或者,您可以在环境中使用 Wavefront sidecar 或内部代理将指标数据转发到 Wavefront API 主机:
-
Properties
-
YAML
management.wavefront.uri=proxy://localhost:2878
management:
wavefront:
uri: "proxy://localhost:2878"
如果您将指标发布到 Wavefront 代理(如 Wavefront 文档中所述),则主机必须采用以下格式。proxy://HOST:PORT |
您还可以更改将指标发送到 Wavefront 的间隔:
-
Properties
-
YAML
management.wavefront.metrics.export.step=30s
management:
wavefront:
metrics:
export:
step: "30s"
要控制此行为,请定义 your 并提供您自己的 .
除非您定义自己的 bean,否则会提供 auto-configured 和 bean:
|
要控制此行为,请定义 your 并提供您自己的 .
除非您定义自己的 bean,否则会提供 auto-configured 和 bean:
|
默认情况下,终端节点不可用,必须公开。有关更多详细信息,请参阅公开终端节点。 |
Prometheus Pushgateway 目前仅适用于已弃用的 Prometheus simpleclient,直到 Prometheus 1.x 客户端添加对它的支持。
要切换到 simpleclient,请从项目中删除并改为添加。io.micrometer:micrometer-registry-prometheus io.micrometer:micrometer-registry-prometheus-simpleclient |
如果您将指标发布到 Wavefront 代理(如 Wavefront 文档中所述),则主机必须采用以下格式。proxy://HOST:PORT |
支持的指标和计量
Spring Boot 为各种技术提供自动仪表注册。 在大多数情况下,默认值提供合理的指标,这些指标可以发布到任何受支持的监控系统。
JVM 指标
自动配置通过使用核心 Micrometer 类启用 JVM 指标。
JVM 指标在计量名称下发布。jvm.
提供了以下 JVM 指标:
-
各种内存和缓冲池详细信息
-
垃圾回收相关统计
-
线程利用率
-
加载和卸载的类数
-
JVM 版本信息
-
JIT 编译时间
系统指标
自动配置通过使用核心 Micrometer 类来启用系统指标。
系统指标在 、 和 计量名称下发布。system.
process.
disk.
提供了以下系统指标:
-
CPU 指标
-
文件描述符指标
-
正常运行时间指标(应用程序已运行的时间量和绝对开始时间的固定衡量标准)
-
可用磁盘空间
应用程序启动指标
自动配置会公开应用程序启动时间指标:
-
application.started.time
:启动应用程序所花费的时间。 -
application.ready.time
:应用程序准备好为请求提供服务所花费的时间。
指标由应用程序类的完全限定名称标记。
任务执行和调度指标
只要底层可用,自动配置就可以启用所有可用和 bean 的插桩。
度量由执行程序的名称标记,该名称派生自 Bean 名称。ThreadPoolTaskExecutor
ThreadPoolTaskScheduler
ThreadPoolExecutor
JMS 指标
自动配置支持检测所有可用的 bean 和带 Comments 的方法。
这将分别生成 和 metrics。
有关生成的观察结果的更多信息,请参阅 Spring Framework 参考文档。JmsTemplate
@JmsListener
"jms.message.publish"
"jms.message.process"
Spring MVC 指标
自动配置可以检测 Spring MVC 控制器和功能处理程序处理的所有请求。
默认情况下,使用名称 .
您可以通过设置属性来自定义名称。http.server.requests
management.observations.http.server.requests.name
要添加到默认标记,请提供从包扩展的 a。
要替换默认标记,请提供实现 .@Bean
DefaultServerRequestObservationConvention
org.springframework.http.server.observation
@Bean
ServerRequestObservationConvention
在某些情况下,在 Web 控制器中处理的异常不会记录为请求指标标签。 应用程序可以通过将已处理的异常设置为请求属性来选择加入并记录异常。 |
默认情况下,将处理所有请求。
要自定义过滤器,请提供实现 .@Bean
FilterRegistrationBean<ServerHttpObservationFilter>
Spring WebFlux 指标
自动配置允许检测 Spring WebFlux 控制器和功能处理程序处理的所有请求。
默认情况下,使用名称 .
您可以通过设置属性来自定义名称。http.server.requests
management.observations.http.server.requests.name
要添加到默认标记,请提供从包扩展的 a。
要替换默认标记,请提供实现 .@Bean
DefaultServerRequestObservationConvention
org.springframework.http.server.reactive.observation
@Bean
ServerRequestObservationConvention
在某些情况下,控制器和处理程序函数中处理的异常不会记录为请求指标标签。 应用程序可以通过将已处理的异常设置为请求属性来选择加入并记录异常。 |
Jersey Server 指标
自动配置允许检测 Jersey JAX-RS 实现处理的所有请求。
默认情况下,使用名称 .
您可以通过设置属性来自定义名称。http.server.requests
management.observations.http.server.requests.name
默认情况下,Jersey 服务器指标使用以下信息进行标记:
标记 | 描述 |
---|---|
|
处理请求时引发的任何异常的简单类名。 |
|
请求的方法(例如,或 |
|
请求的结果,基于响应的状态代码。
1xx 是 , 2xx 是 , 3xx 是 , 4xx 是 ,5xx 是 |
|
响应的 HTTP 状态代码(例如 |
|
变量替换之前的请求的 URI 模板(如果可能)(例如 |
要自定义标签,请提供实现 .@Bean
JerseyObservationConvention
HTTP 客户端指标
Spring Boot Actuator 管理 、 和 的插桩。
为此,您必须注入自动配置的构建器并使用它来创建实例:RestTemplate
WebClient
RestClient
-
RestTemplateBuilder
为RestTemplate
-
WebClient.Builder
为WebClient
-
RestClient.Builder
为RestClient
您还可以手动应用负责此检测的定制器,即 和 。ObservationRestTemplateCustomizer
ObservationWebClientCustomizer
ObservationRestClientCustomizer
默认情况下,使用名称 .
您可以通过设置属性来自定义名称。http.client.requests
management.observations.http.client.requests.name
要在使用 或 时自定义标记,请提供从包中实现的标记。
要在使用 时自定义标记,请提供从包中实现的标记。RestTemplate
RestClient
@Bean
ClientRequestObservationConvention
org.springframework.http.client.observation
WebClient
@Bean
ClientRequestObservationConvention
org.springframework.web.reactive.function.client
Tomcat 指标
自动配置仅在启用 时启用 Tomcat 的检测。
默认情况下,它是禁用的,但您可以通过设置为 来启用它。MBeanRegistry
MBeanRegistry
server.tomcat.mbeanregistry.enabled
true
Tomcat 指标在计量名称下发布。tomcat.
缓存指标
自动配置允许在启动时检测所有可用实例,其指标前缀为 .
缓存插桩是针对一组基本指标进行标准化的。
此外,还提供了特定于缓存的指标。Cache
cache
支持以下缓存库:
-
缓存2k
-
咖啡因
-
Hazelcast
-
任何兼容的 JCache (JSR-107) 实现
-
Redis
度量按缓存的名称和 的名称进行标记,该名称派生自 Bean 名称。CacheManager
只有在启动时配置的缓存才会绑定到注册表。
对于未在缓存配置中定义的缓存,例如在启动阶段之后动态或以编程方式创建的缓存,需要显式注册。
提供了一个 bean 来简化该过程。CacheMetricsRegistrar |
Spring Batch 指标
请参阅 Spring Batch 参考文档。
Spring GraphQL 指标
请参阅 Spring GraphQL 参考文档。
DataSource 指标
自动配置支持使用前缀为 的指标检测所有可用对象。
数据源检测会生成表示池中当前活动、空闲、允许的最大连接数和允许的最小连接的仪表。DataSource
jdbc.connections
度量也由基于 Bean 名称计算的名称进行标记。DataSource
默认情况下, Spring Boot 为所有支持的数据源提供元数据。
如果您最喜欢的数据源不受支持,您可以添加其他 Bean。
有关示例,请参阅。DataSourcePoolMetadataProvider DataSourcePoolMetadataProvidersConfiguration |
此外,特定于 Hikari 的指标还带有前缀。
每个量度都由池的名称进行标记(您可以使用 控制它)。hikaricp
spring.datasource.name
Hibernate 指标
如果 在 classpath 上,则所有启用了统计信息的可用 Hibernate 实例都使用名为 .org.hibernate.orm:hibernate-micrometer
EntityManagerFactory
hibernate
度量还由 的名称进行标记,该名称派生自 Bean 名称。EntityManagerFactory
要启用统计信息,必须将标准 JPA 属性设置为 。
您可以在 auto-configured 上启用它:hibernate.generate_statistics
true
EntityManagerFactory
-
Properties
-
YAML
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
接口和方法支持包中的 Comments。
如果您不想记录所有调用的指标,则可以改为设置并专门使用注释。@Timed
io.micrometer.core.annotation
Repository
Repository
management.metrics.data.repository.autotime.enabled
false
@Timed
带有的注释为该方法启用长任务计时器。
长任务计时器需要单独的指标名称,并且可以与短任务计时器堆叠。@Timed longTask = true |
默认情况下,存储库调用相关指标使用以下信息进行标记:
标记 | 描述 |
---|---|
|
源 的简单类名 。 |
|
调用的方法的名称。 |
|
结果状态 (、 、 或 )。 |
|
从调用中引发的任何异常的简单类名。 |
要替换默认标记,请提供实现 .@Bean
RepositoryTagsProvider
Spring 集成指标
Spring 集成会在 bean 可用时自动提供 Micrometer 支持。
指标在计量名称下发布。MeterRegistry
spring.integration.
Kafka 指标
自动配置分别为自动配置的 Consumer Factory 和 producer Factory 注册 a 和 。
它还为 .
有关更多详细信息,请参阅 Spring Kafka 文档的 Micrometer Native Metrics 部分。MicrometerConsumerListener
MicrometerProducerListener
KafkaStreamsMicrometerListener
StreamsBuilderFactoryBean
MongoDB 指标
本节简要介绍了 MongoDB 的可用指标。
MongoDB 命令指标
自动配置将 a 注册到自动配置的 .MongoMetricsCommandListener
MongoClient
为向底层 MongoDB 驱动程序发出的每个命令创建一个名为 的计时器指标。
默认情况下,每个指标都标有以下信息:mongodb.driver.commands
标记 | 描述 |
---|---|
|
发出的命令的名称。 |
|
命令发送到的集群的标识符。 |
|
命令发送到的服务器的地址。 |
|
命令的结果 ( 或 )。 |
要替换默认的 metric 标记,请定义一个 bean,如下例所示:MongoCommandTagsProvider
-
Java
-
Kotlin
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()
}
}
要禁用自动配置的命令指标,请设置以下属性:
-
Properties
-
YAML
management.metrics.mongo.command.enabled=false
management:
metrics:
mongo:
command:
enabled: false
MongoDB 连接池指标
自动配置将 a 注册到自动配置的 .MongoMetricsConnectionPoolListener
MongoClient
将为连接池创建以下仪表指标:
-
mongodb.driver.pool.size
报告连接池的当前大小,包括空闲和正在使用的成员。 -
mongodb.driver.pool.checkedout
报告当前正在使用的连接数。 -
mongodb.driver.pool.waitqueuesize
报告池中连接的等待队列的当前大小。
默认情况下,每个指标都标有以下信息:
标记 | 描述 |
---|---|
|
连接池对应的集群的标识符。 |
|
连接池对应的服务器的地址。 |
要替换默认的 metric 标记,请定义一个 bean:MongoConnectionPoolTagsProvider
-
Java
-
Kotlin
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()
}
}
要禁用自动配置的连接池指标,请设置以下属性:
-
Properties
-
YAML
management.metrics.mongo.connectionpool.enabled=false
management:
metrics:
mongo:
connectionpool:
enabled: false
Jetty 指标
自动配置使用 Micrometer 的 .
Jetty 实例的指标使用 Micrometer 的约束,当设置为 Micrometer 时,则使用 Micrometer 的 。ThreadPool
JettyServerThreadPoolMetrics
Connector
JettyConnectionMetrics
server.ssl.enabled
true
JettySslHandshakeMetrics
@Timed 注释支持
要启用注释扫描,您需要将属性设置为 。
请参阅 Micrometer 文档。@Timed
management.observations.annotations.enabled
true
Redis 指标
自动配置会为自动配置的 .
有关更多详细信息,请参阅 Lettuce 文档的 Micrometer Metrics 部分。MicrometerCommandLatencyRecorder
LettuceConnectionFactory
在某些情况下,在 Web 控制器中处理的异常不会记录为请求指标标签。 应用程序可以通过将已处理的异常设置为请求属性来选择加入并记录异常。 |
在某些情况下,控制器和处理程序函数中处理的异常不会记录为请求指标标签。 应用程序可以通过将已处理的异常设置为请求属性来选择加入并记录异常。 |
标记 | 描述 |
---|---|
|
处理请求时引发的任何异常的简单类名。 |
|
请求的方法(例如,或 |
|
请求的结果,基于响应的状态代码。
1xx 是 , 2xx 是 , 3xx 是 , 4xx 是 ,5xx 是 |
|
响应的 HTTP 状态代码(例如 |
|
变量替换之前的请求的 URI 模板(如果可能)(例如 |
只有在启动时配置的缓存才会绑定到注册表。
对于未在缓存配置中定义的缓存,例如在启动阶段之后动态或以编程方式创建的缓存,需要显式注册。
提供了一个 bean 来简化该过程。CacheMetricsRegistrar |
默认情况下, Spring Boot 为所有支持的数据源提供元数据。
如果您最喜欢的数据源不受支持,您可以添加其他 Bean。
有关示例,请参阅。DataSourcePoolMetadataProvider DataSourcePoolMetadataProvidersConfiguration |
带有的注释为该方法启用长任务计时器。
长任务计时器需要单独的指标名称,并且可以与短任务计时器堆叠。@Timed longTask = true |
标记 | 描述 |
---|---|
|
源 的简单类名 。 |
|
调用的方法的名称。 |
|
结果状态 (、 、 或 )。 |
|
从调用中引发的任何异常的简单类名。 |
标记 | 描述 |
---|---|
|
发出的命令的名称。 |
|
命令发送到的集群的标识符。 |
|
命令发送到的服务器的地址。 |
|
命令的结果 ( 或 )。 |
标记 | 描述 |
---|---|
|
连接池对应的集群的标识符。 |
|
连接池对应的服务器的地址。 |
注册自定义指标
要注册自定义指标,请注入到您的组件中:MeterRegistry
-
Java
-
Kotlin
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)
}
}
如果您的 metrics 依赖于其他 bean,我们建议您使用 a 来注册它们:MeterBinder
-
Java
-
Kotlin
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)
}
}
}
使用 a 可确保设置正确的依赖关系,并确保在检索度量值时 Bean 可用。
如果您发现跨组件或应用程序重复检测一套指标,则实施也很有用。MeterBinder
MeterBinder
默认情况下,来自所有 bean 的度量值都会自动绑定到 Spring-managed 。MeterBinder MeterRegistry |
默认情况下,来自所有 bean 的度量值都会自动绑定到 Spring-managed 。MeterBinder MeterRegistry |
自定义单个量度
如果您需要将自定义项应用于特定实例,可以使用该界面。Meter
io.micrometer.core.instrument.config.MeterFilter
例如,如果要将标签重命名为 for all meter IDs starting with ,则可以执行以下操作:mytag.region
mytag.area
com.example
-
Java
-
Kotlin
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")
}
}
默认情况下,所有 bean 都会自动绑定到 Spring-managed 。
确保使用 Spring 管理的 metric 而不是 上的任何 static 方法来注册您的指标。
这些使用非 Spring Management 的全局注册表。MeterFilter MeterRegistry MeterRegistry Metrics |
常用标签
常用标签通常用于对运行环境进行维度下钻,例如主机、实例、区域、堆栈等。 Commons 标签应用于所有计量,并且可以进行配置,如下例所示:
-
Properties
-
YAML
management.metrics.tags.region=us-east-1
management.metrics.tags.stack=prod
management:
metrics:
tags:
region: "us-east-1"
stack: "prod"
前面的示例将 和 标记分别添加到值为 和 的所有计量器。region
stack
us-east-1
prod
如果您使用 Graphite,则常用标签的顺序非常重要。
由于使用此方法无法保证常用标记的顺序,因此建议 Graphite 用户改为定义自定义。MeterFilter |
每米属性
除了 Bean 之外,您还可以使用 properties 按米应用一组有限的自定义。
使用 Spring Boot 的 Per meter 自定义应用于以给定名称开头的任何计量 ID。
以下示例筛选掉 ID 以 .MeterFilter
PropertiesMeterFilter
example.remote
-
Properties
-
YAML
management.metrics.enable.example.remote=false
management:
metrics:
enable:
example:
remote: false
以下属性允许按计量进行自定义:
财产 | 描述 |
---|---|
|
是否接受具有特定 ID 的仪表。
不接受的计量将从 中筛选出来。 |
|
是否发布适合计算可聚合(跨维度)百分位数近似值的直方图。 |
|
通过限制预期值的范围来发布更少的直方图存储桶。 |
|
发布在应用程序中计算的百分位值 |
|
通过将最近的样本累积在可配置的到期后轮换的环形缓冲区中,赋予最近的样本更大的权重,其中 可配置的缓冲区长度。 |
|
发布包含由服务级别目标定义的存储桶的累积直方图。 |
有关 、 和 背后的概念的更多详细信息,请参阅 Micrometer 文档的 直方图 和 百分位数 部分。percentiles-histogram
percentiles
slo
默认情况下,所有 bean 都会自动绑定到 Spring-managed 。
确保使用 Spring 管理的 metric 而不是 上的任何 static 方法来注册您的指标。
这些使用非 Spring Management 的全局注册表。MeterFilter MeterRegistry MeterRegistry Metrics |
如果您使用 Graphite,则常用标签的顺序非常重要。
由于使用此方法无法保证常用标记的顺序,因此建议 Graphite 用户改为定义自定义。MeterFilter |
财产 | 描述 |
---|---|
|
是否接受具有特定 ID 的仪表。
不接受的计量将从 中筛选出来。 |
|
是否发布适合计算可聚合(跨维度)百分位数近似值的直方图。 |
|
通过限制预期值的范围来发布更少的直方图存储桶。 |
|
发布在应用程序中计算的百分位值 |
|
通过将最近的样本累积在可配置的到期后轮换的环形缓冲区中,赋予最近的样本更大的权重,其中 可配置的缓冲区长度。 |
|
发布包含由服务级别目标定义的存储桶的累积直方图。 |
Metrics 终端节点
Spring Boot 提供了一个终端节点,您可以诊断性地使用它来检查应用程序收集的指标。
默认情况下,终端节点不可用,必须公开。
有关更多详细信息,请参阅公开终端节点。metrics
导航到 将显示可用计量器名称的列表。
您可以通过提供特定计量的名称作为选择器(例如,./actuator/metrics
/actuator/metrics/jvm.memory.max
您在此处使用的名称应与代码中使用的名称匹配,而不是与针对其寄送到的监控系统进行命名约定规范化后的名称匹配。
换句话说,如果由于 Prometheus 的蛇形大小写命名约定而在 Prometheus 中显示为 Prometheus,则在检查终端节点中的仪表时,您仍应用作选择器。 |
您还可以在 URL 末尾添加任意数量的查询参数,以便对计量器进行维度向下钻取,例如 .tag=KEY:VALUE
/actuator/metrics/jvm.memory.max?tag=area:nonheap
报告的测量值是与仪表名称和已应用的任何标签匹配的所有仪表的统计数据的总和。
在前面的示例中,返回的统计数据是堆的 “Code Cache”、“Compressed Class Space” 和 “Metaspace” 区域的最大内存占用量之和。
如果您只想查看 “Metaspace” 的最大大小,您可以添加一个额外的 — 即 . |
您在此处使用的名称应与代码中使用的名称匹配,而不是与针对其寄送到的监控系统进行命名约定规范化后的名称匹配。
换句话说,如果由于 Prometheus 的蛇形大小写命名约定而在 Prometheus 中显示为 Prometheus,则在检查终端节点中的仪表时,您仍应用作选择器。 |
报告的测量值是与仪表名称和已应用的任何标签匹配的所有仪表的统计数据的总和。
在前面的示例中,返回的统计数据是堆的 “Code Cache”、“Compressed Class Space” 和 “Metaspace” 区域的最大内存占用量之和。
如果您只想查看 “Metaspace” 的最大大小,您可以添加一个额外的 — 即 . |
与 Micrometer Observation 集成
A 会自动注册到 上,这将为每个已完成的观测值创建指标。DefaultMeterObservationHandler
ObservationRegistry