指标
入门
Spring Boot 自动配置一个复合的 MeterRegistry
,并为它在类路径上找到的每个支持的实现添加一个注册表。
在运行时类路径中包含 micrometer-registry-{system}
依赖项就足以让 Spring Boot 配置注册表。
大多数注册表共享共同的功能。 例如,即使 Micrometer 注册表实现在类路径上,你也可以禁用特定的注册表。 以下示例禁用了 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
你可以注册任意数量的 MeterRegistryCustomizer
bean 来进一步配置注册表,例如在将任何仪表注册到注册表之前应用通用标签:
-
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 还 配置内置检测,你可以通过配置或专用注解标记来控制它。
支持的监控系统
本节简要描述了每个支持的监控系统。
AppOptics
默认情况下,AppOptics 注册表会定期将指标推送到 api.appoptics.com/v1/measurements
。
要将指标导出到 SaaS AppOptics,必须提供你的 API 令牌:
-
Properties
-
YAML
management.appoptics.metrics.export.api-token=YOUR_TOKEN
management:
appoptics:
metrics:
export:
api-token: "YOUR_TOKEN"
Atlas
-
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"
Datadog
-
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 站点(api.datadoghq.com
)。
如果你的 Datadog 项目托管在其他站点之一,或者你需要通过代理发送指标,请相应地配置 URI:
-
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 文档。
v1
命名空间中的配置属性仅在导出到 Timeseries v1 API 时适用。
v2
命名空间中的配置属性仅在导出到 Metrics v2 API 时适用。
请注意,此集成一次只能导出到 API 的 v1
或 v2
版本,优先使用 v2
。
如果在 v1
命名空间中设置了 device-id
(v1 需要但 v2 不使用),则指标会导出到 v1
端点。
否则,假定使用 v2
。
v2 API
你可以通过两种方式使用 v2 API。
自动配置
Dynatrace 自动配置可用于由 OneAgent 或 Dynatrace Kubernetes Operator 监控的主机。
本地 OneAgent: 如果主机上运行着 OneAgent,指标会自动导出到 本地 OneAgent 摄取端点。 摄取端点将指标转发到 Dynatrace 后端。
Dynatrace Kubernetes Operator: 当在安装了 Dynatrace Operator 的 Kubernetes 中运行时,注册表将自动从操作符中获取你的端点 URI 和 API 令牌。
这是默认行为,除了依赖 io.micrometer:micrometer-registry-dynatrace
外,不需要特殊设置。
手动配置
如果没有可用的自动配置,则需要 Metrics v2 API 的端点和 API 令牌。
API 令牌必须设置了"`摄取指标`"(metrics.ingest
)权限。
我们建议将令牌的范围限制为这一个权限。
你必须确保端点 URI 包含路径(例如,/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
以下示例使用 example
环境 ID 配置指标导出:
-
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 文档中找到):
-
指标键前缀:设置一个前缀,该前缀会添加到所有导出的指标键前面。
-
使用 Dynatrace 元数据丰富:如果运行着 OneAgent 或 Dynatrace 操作符,则使用额外的元数据(例如,关于主机、进程或 pod)丰富指标。
-
默认维度:指定添加到所有导出指标的键值对。 如果使用 Micrometer 指定了具有相同键的标签,它们会覆盖默认维度。
-
使用 Dynatrace 摘要工具:在某些情况下,Micrometer Dynatrace 注册表创建的指标被拒绝。 在 Micrometer 1.9.x 中,通过引入 Dynatrace 特定的摘要工具修复了这个问题。 将此开关设置为
false
会强制 Micrometer 回退到 1.9.x 之前的默认行为。 仅当从 Micrometer 1.8.x 迁移到 1.9.x 时遇到问题时才应使用它。 -
导出仪表元数据:从 Micrometer 1.12.0 开始,Dynatrace 导出器默认也会导出仪表元数据,例如单位和描述。 使用
export-meter-metadata
开关可以关闭此功能。
可以不指定 URI 和 API 令牌,如下例所示。 在这种情况下,使用自动配置的端点:
-
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:
# 如果不使用本地 OneAgent 端点,请在此处指定 uri 和 api-token。
v2:
metric-key-prefix: "your.key.prefix"
enrich-with-dynatrace-metadata: true
default-dimensions:
key1: "value1"
key2: "value2"
use-dynatrace-summary-instruments: true # (默认:true)
export-meter-metadata: true # (默认:true)
v1 API(旧版)
Dynatrace v1 API 指标注册表使用 Timeseries v1 API 定期将指标推送到配置的 URI。
为了与现有设置向后兼容,当设置了 device-id
(v1 需要,但 v2 不使用)时,指标会导出到 Timeseries v1 端点。
要将指标导出到 Dynatrace,你必须提供你的 API 令牌、设备 ID 和 URI:
-
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 发送指标的间隔。
默认导出间隔为 60s
。
以下示例将导出间隔设置为 30 秒:
-
Properties
-
YAML
management.dynatrace.metrics.export.step=30s
management:
dynatrace:
metrics:
export:
step: "30s"
你可以在 Micrometer 文档和 Dynatrace 文档中找到有关如何为 Micrometer 设置 Dynatrace 导出器的更多信息。
Elastic
默认情况下,指标会导出到在本地机器上运行的 Elastic。 你可以通过使用以下属性提供要使用的 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。 你可以提供 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。 你可以提供 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 提供了一个默认的 HierarchicalNameMapper
,它控制如何将维度仪表 ID 映射到平面层次名称。
要控制此行为,请定义你的
|
Humio
默认情况下,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
默认情况下,指标会导出到在本地机器上运行的具有默认配置的 Influx v1 实例。
要将指标导出到 InfluxDB v2,请配置用于写入指标的 org
、bucket
和身份验证 token
。
你可以通过使用以下方式提供要使用的 Influx 服务器的位置:
-
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 的层次映射,主要是作为一种廉价且可移植的方式来本地查看指标。
默认情况下,指标会导出到 metrics
JMX 域。
你可以通过使用以下方式提供要使用的域:
-
Properties
-
YAML
management.jmx.metrics.export.domain=com.example.app.metrics
management:
jmx:
metrics:
export:
domain: "com.example.app.metrics"
Micrometer 提供了一个默认的 HierarchicalNameMapper
,它控制如何将维度仪表 ID 映射到平面层次名称。
要控制此行为,请定义你的
|
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"
New Relic
-
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 调用发布,但如果你在类路径上有 Java Agent API,你也可以使用它:
-
Properties
-
YAML
management.newrelic.metrics.export.client-provider-type=insights-agent
management:
newrelic:
metrics:
export:
client-provider-type: "insights-agent"
最后,你可以通过定义你自己的 NewRelicClientProvider
bean 来完全控制。
OTLP
默认情况下,指标通过 OpenTelemetry 协议 (OTLP) 导出到在本地机器上运行的消费者。
要导出到其他位置,请使用 management.otlp.metrics.export.url
提供 OTLP 指标端点的位置:
-
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"
还可以使用 management.otlp.metrics.export.headers.*
属性提供自定义标头,例如用于身份验证。
Prometheus
Prometheus 期望抓取或轮询单个应用程序实例以获取指标。
Spring Boot 在 /actuator/prometheus
提供了一个执行器端点,以适当的格式呈现 Prometheus 抓取。
默认情况下,端点不可用,必须暴露。有关详细信息,请参阅 暴露端点。 |
以下示例 scrape_config
添加到 prometheus.yml
:
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 格式时受支持。
对于可能不存在足够长时间而被抓取的临时或批处理作业,你可以使用 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>
当 Prometheus Pushgateway 依赖项存在于类路径上并且 management.prometheus.metrics.export.pushgateway.enabled
属性设置为 true
时,会自动配置一个 PrometheusPushGatewayManager
bean。
这管理将指标推送到 Prometheus Pushgateway。
你可以通过使用 management.prometheus.metrics.export.pushgateway
下的属性来调整 PrometheusPushGatewayManager
。
对于高级配置,你还可以提供你自己的 PrometheusPushGatewayManager
bean。
SignalFx
-
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"
Simple
Micrometer ships with a simple, in-memory backend that is automatically used as a fallback if no other registry is configured. This lets you see what metrics are collected in the metrics endpoint.
The in-memory backend disables itself as soon as you use any other available backend. You can also disable it explicitly:
-
Properties
-
YAML
management.simple.metrics.export.enabled=false
management:
simple:
metrics:
export:
enabled: false
Stackdriver
The Stackdriver registry periodically pushes metrics to Stackdriver. To export metrics to SaaS Stackdriver, you must provide your Google Cloud project ID:
-
Properties
-
YAML
management.stackdriver.metrics.export.project-id=my-project
management:
stackdriver:
metrics:
export:
project-id: "my-project"
You can also change the interval at which metrics are sent to Stackdriver:
-
Properties
-
YAML
management.stackdriver.metrics.export.step=30s
management:
stackdriver:
metrics:
export:
step: "30s"
StatsD
The StatsD registry eagerly pushes metrics over UDP to a StatsD agent. By default, metrics are exported to a StatsD agent running on your local machine. You can provide the StatsD agent host, port, and protocol to use by using:
-
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"
You can also change the StatsD line protocol to use (it defaults to Datadog):
-
Properties
-
YAML
management.statsd.metrics.export.flavor=etsy
management:
statsd:
metrics:
export:
flavor: "etsy"
Wavefront
The Wavefront registry periodically pushes metrics to Wavefront. If you are exporting metrics to Wavefront directly, you must provide your API token:
-
Properties
-
YAML
management.wavefront.api-token=YOUR_API_TOKEN
management:
wavefront:
api-token: "YOUR_API_TOKEN"
Alternatively, you can use a Wavefront sidecar or an internal proxy in your environment to forward metrics data to the Wavefront API host:
-
Properties
-
YAML
management.wavefront.uri=proxy://localhost:2878
management:
wavefront:
uri: "proxy://localhost:2878"
If you publish metrics to a Wavefront proxy (as described in the Wavefront documentation), the host must be in the proxy://HOST:PORT format.
|
You can also change the interval at which metrics are sent to Wavefront:
-
Properties
-
YAML
management.wavefront.metrics.export.step=30s
management:
wavefront:
metrics:
export:
step: "30s"
支持的指标和计量器
Spring Boot 为各种技术提供了自动计量器注册。 在大多数情况下,默认值提供了合理的指标,可以发布到任何支持的监控系统。
JVM 指标
自动配置使用核心 Micrometer 类启用 JVM 指标。
JVM 指标以 jvm.
计量器名称发布。
提供以下 JVM 指标:
-
各种内存和缓冲区池详情
-
与垃圾收集相关的统计信息
-
线程利用率
-
已加载和卸载的类数量
-
JVM 版本信息
-
JIT 编译时间
系统指标
自动配置使用核心 Micrometer 类启用系统指标。
系统指标以 system.
、process.
和 disk.
计量器名称发布。
提供以下系统指标:
-
CPU 指标
-
文件描述符指标
-
运行时间指标(包括应用程序运行的时间量和绝对启动时间的固定仪表)
-
可用磁盘空间
应用程序启动指标
自动配置暴露应用程序启动时间指标:
-
application.started.time
:启动应用程序所需的时间。 -
application.ready.time
:应用程序准备就绪以处理请求所需的时间。
指标由应用程序类的完全限定名称标记。
任务执行和调度指标
自动配置为所有可用的 ThreadPoolTaskExecutor
和 ThreadPoolTaskScheduler
bean 启用检测,只要底层 ThreadPoolExecutor
可用。
指标由执行器的名称标记,该名称派生自 bean 名称。
JMS 指标
自动配置为所有可用的 JmsTemplate
bean 和 @JmsListener
注解的方法启用检测。
这将分别产生 "jms.message.publish"
和 "jms.message.process"
指标。
有关产生的观察的更多信息,请参阅 Spring Framework 参考文档。
Spring MVC 指标
自动配置为 Spring MVC 控制器和函数式处理程序处理的所有请求启用检测。
默认情况下,指标以名称 http.server.requests
生成。
你可以通过设置 management.observations.http.server.requests.name
属性来自定义名称。
有关产生的观察的更多信息,请参阅 Spring Framework 参考文档。
要添加到默认标签,请提供从 org.springframework.http.server.observation
包扩展 DefaultServerRequestObservationConvention
的 @Bean
。
要替换默认标签,请提供实现 ServerRequestObservationConvention
的 @Bean
。
提示:在某些情况下,Web 控制器中处理的异常不会记录为请求指标标签。 应用程序可以通过 将已处理的异常设置为请求属性来选择记录异常。
默认情况下,所有请求都会被处理。
要自定义过滤器,请提供实现 FilterRegistrationBean<ServerHttpObservationFilter>
的 @Bean
。
Spring WebFlux 指标
自动配置为 Spring WebFlux 控制器和函数式处理程序处理的所有请求启用检测。
默认情况下,指标以名称 http.server.requests
生成。
你可以通过设置 management.observations.http.server.requests.name
属性来自定义名称。
有关产生的观察的更多信息,请参阅 Spring Framework 参考文档。
要添加到默认标签,请提供从 org.springframework.http.server.reactive.observation
包扩展 DefaultServerRequestObservationConvention
的 @Bean
。
要替换默认标签,请提供实现 ServerRequestObservationConvention
的 @Bean
。
提示:在某些情况下,控制器和处理函数中处理的异常不会记录为请求指标标签。 应用程序可以通过 将已处理的异常设置为请求属性来选择记录异常。
Jersey 服务器指标
自动配置为 Jersey JAX-RS 实现处理的所有请求启用检测。
默认情况下,指标以名称 http.server.requests
生成。
你可以通过设置 management.observations.http.server.requests.name
属性来自定义名称。
默认情况下,Jersey 服务器指标使用以下信息标记:
标签 | 描述 |
---|---|
|
处理请求时抛出的任何异常的简单类名。 |
|
请求的方法(例如, |
|
请求的结果,基于响应的状态码。
1xx 是 |
|
响应的 HTTP 状态码(例如, |
|
请求的 URI 模板,在变量替换之前(如果可能)(例如, |
要自定义标签,请提供实现 JerseyObservationConvention
的 @Bean
。
HTTP 客户端指标
Spring Boot Actuator 管理 RestTemplate
、WebClient
和 RestClient
的检测。
为此,你必须注入自动配置的构建器并使用它来创建实例:
你也可以手动应用负责此检测的自定义器,即 ObservationRestTemplateCustomizer
、ObservationWebClientCustomizer
和 ObservationRestClientCustomizer
。
默认情况下,指标以名称 http.client.requests
生成。
你可以通过设置 management.observations.http.client.requests.name
属性来自定义名称。
有关产生的观察的更多信息,请参阅 Spring Framework 参考文档。
使用 RestTemplate
或 RestClient
时,要自定义标签,请提供从 org.springframework.http.client.observation
包实现 ClientRequestObservationConvention
的 @Bean
。
使用 WebClient
时,要自定义标签,请提供从 org.springframework.web.reactive.function.client
包实现 ClientRequestObservationConvention
的 @Bean
。
Tomcat 指标
仅当启用 MBean Registry
时,自动配置才会为 Tomcat 启用检测。
默认情况下,MBean 注册表是禁用的,但你可以通过将 server.tomcat.mbeanregistry.enabled
设置为 true
来启用它。
Tomcat 指标以 tomcat.
计量器名称发布。
缓存指标
自动配置为启动时所有可用的 Cache
实例启用检测,指标前缀为 cache
。
缓存检测已标准化为一组基本指标。
还提供额外的、特定于缓存的指标。
支持以下缓存库:
-
Cache2k
-
Caffeine
-
Hazelcast
-
任何符合 JCache (JSR-107) 的实现
-
Redis
警告:应该启用指标以便自动配置能够获取它们。 有关更多详细信息,请参阅你使用的缓存库的文档。
指标由缓存名称和 CacheManager
的名称标记,该名称派生自 bean 名称。
注意:只有启动时配置的缓存才会绑定到注册表。
对于未在缓存配置中定义的缓存,例如在启动阶段之后动态创建或以编程方式创建的缓存,需要显式注册。
提供了一个 CacheMetricsRegistrar
bean 以使该过程更容易。
Spring Batch 指标
请参阅 Spring Batch 参考文档。
Spring GraphQL 指标
请参阅 Spring GraphQL 参考文档。
数据源指标
自动配置为所有可用的 DataSource
对象启用检测,指标前缀为 jdbc.connections
。
数据源检测会产生表示池中当前活动、空闲、最大允许和最小允许连接的仪表。
指标也由基于 bean 名称计算的 DataSource
的名称标记。
提示:默认情况下,Spring Boot 为所有支持的数据源提供元数据。
如果你喜欢的数据源不受支持,你可以添加额外的 DataSourcePoolMetadataProvider
bean。
有关示例,请参阅 DataSourcePoolMetadataProvidersConfiguration
。
此外,Hikari 特定的指标以 hikaricp
前缀暴露。
每个指标都由池的名称标记(你可以使用 spring.datasource.name
控制它)。
Hibernate 指标
如果 org.hibernate.orm:hibernate-micrometer
在类路径上,所有启用了统计信息的可用 Hibernate EntityManagerFactory
实例都会以名为 hibernate
的指标进行检测。
指标也由 EntityManagerFactory
的名称标记,该名称派生自 bean 名称。
要启用统计信息,标准 JPA 属性 hibernate.generate_statistics
必须设置为 true
。
你可以在自动配置的 EntityManagerFactory
上启用它:
-
Properties
-
YAML
spring.jpa.properties[hibernate.generate_statistics]=true
spring:
jpa:
properties:
"[hibernate.generate_statistics]": true
Spring Data 仓库指标
自动配置为所有 Spring Data Repository
方法调用启用检测。
默认情况下,指标以名称 spring.data.repository.invocations
生成。
你可以通过设置 management.metrics.data.repository.metric-name
属性来自定义名称。
支持来自 io.micrometer.core.annotation
包的 @Timed
注解。
如果你不想记录所有 Repository
调用的指标,你可以将 management.metrics.data.repository.autotime.enabled
设置为 false
,并专门使用 @Timed
注解。
注意:带有 longTask = true
的 @Timed
注解会为该方法启用长任务计时器。
长任务计时器需要单独的指标名称,并且可以与短任务计时器堆叠。
默认情况下,仓库调用相关指标使用以下信息标记:
标签 | 描述 |
---|---|
|
源 |
|
调用的 |
|
结果状态( |
|
从调用抛出的任何异常的简单类名。 |
要替换默认标签,请提供实现 RepositoryTagsProvider
的 @Bean
。
Spring Integration 指标
当 MeterRegistry
bean 可用时,Spring Integration 自动提供 Micrometer 支持。
指标以 spring.integration.
计量器名称发布。
Kafka 指标
自动配置为自动配置的消费者工厂和生产者工厂分别注册 MicrometerConsumerListener
和 MicrometerProducerListener
。
它还为 StreamsBuilderFactoryBean
注册 KafkaStreamsMicrometerListener
。
有关更多详细信息,请参阅 Spring Kafka 文档的 Micrometer Native Metrics 部分。
MongoDB 指标
本节简要描述了 MongoDB 的可用指标。
MongoDB 命令指标
自动配置为自动配置的 MongoClient
注册 MongoMetricsCommandListener
。
为发送到底层 MongoDB 驱动程序的每个命令创建一个名为 mongodb.driver.commands
的计时器指标。
默认情况下,每个指标都使用以下信息标记:
标签 | 描述 |
---|---|
|
发出的命令的名称。 |
|
命令发送到的集群的标识符。 |
|
命令发送到的服务器的地址。 |
|
命令的结果( |
要替换默认指标标签,请定义 MongoCommandTagsProvider
bean,如下例所示:
-
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 连接池指标
自动配置为自动配置的 MongoClient
注册 MongoMetricsConnectionPoolListener
。
为连接池创建以下仪表指标:
-
mongodb.driver.pool.size
报告连接池的当前大小,包括空闲和正在使用的成员。 -
mongodb.driver.pool.checkedout
报告当前正在使用的连接数。 -
mongodb.driver.pool.waitqueuesize
报告从池中获取连接的等待队列的当前大小。
默认情况下,每个指标都使用以下信息标记:
标签 | 描述 |
---|---|
|
连接池对应的集群的标识符。 |
|
连接池对应的服务器的地址。 |
要替换默认指标标签,请定义 MongoConnectionPoolTagsProvider
bean:
-
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 的 JettyServerThreadPoolMetrics
绑定 Jetty 的 ThreadPool
的指标。
通过使用 Micrometer 的 JettyConnectionMetrics
绑定 Jetty 的 Connector
实例的指标,当 server.ssl.enabled
设置为 true
时,还使用 Micrometer 的 JettySslHandshakeMetrics
。
Redis 指标
自动配置为自动配置的 LettuceConnectionFactory
注册 MicrometerCommandLatencyRecorder
。
有关更多详细信息,请参阅 Lettuce 文档的 Micrometer Metrics 部分。
注册自定义指标
要注册自定义指标,请将 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)
}
}
如果你的指标依赖于其他 bean,我们建议你使用 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)
}
}
}
使用 MeterBinder
确保设置了正确的依赖关系,并在检索指标值时 bean 可用。
如果你发现自己在组件或应用程序中重复检测一组指标,MeterBinder
实现也很有用。
注意:默认情况下,所有 MeterBinder
bean 的指标都会自动绑定到 Spring 管理的 MeterRegistry
。
自定义单个指标
如果你需要对特定的 Meter
实例应用自定义,你可以使用 MeterFilter
接口。
例如,如果你想要将所有以 com.example
开头的计量器 ID 的 mytag.region
标签重命名为 mytag.area
,你可以执行以下操作:
-
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")
}
}
注意:默认情况下,所有 MeterFilter
bean 都会自动绑定到 Spring 管理的 MeterRegistry
。
确保使用 Spring 管理的 MeterRegistry
注册你的指标,而不是使用 Metrics
上的任何静态方法。
这些使用全局注册表,它不是由 Spring 管理的。
通用标签
通用标签通常用于操作环境的维度钻取,例如主机、实例、区域、堆栈等。 通用标签应用于所有计量器,可以配置,如下例所示:
-
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
。
每个计量器的属性
除了 MeterFilter
bean 之外,你还可以使用属性对每个计量器应用有限的自定义。
使用 Spring Boot 的 PropertiesMeterFilter
将每个计量器的自定义应用于以给定名称开头的任何计量器 ID。
以下示例过滤掉任何 ID 以 example.remote
开头的计量器。
-
Properties
-
YAML
management.metrics.enable.example.remote=false
management:
metrics:
enable:
example:
remote: false
以下属性允许每个计量器的自定义:
属性 | 描述 |
---|---|
|
是否接受具有特定 ID 的计量器。
未接受的计量器会从 |
|
是否发布适合计算可聚合(跨维度)百分位数近似值的直方图。 |
|
通过限制预期值的范围来发布更少的直方图桶。 |
|
在应用程序中计算并发布百分位数值 |
|
通过在可配置的过期时间后旋转的可配置缓冲区长度的环形缓冲区中累积样本来增加最近样本的权重。 |
|
发布由服务级别目标定义的累积直方图。 |
有关 percentiles-histogram
、percentiles
和 slo
背后的概念的更多详细信息,请参阅 Micrometer 文档的 直方图和百分位数 部分。
指标端点
Spring Boot 提供了一个 metrics
端点,你可以用它来诊断性地检查应用程序收集的指标。
该端点默认不可用,必须暴露。
有关更多详细信息,请参阅 暴露端点。
导航到 /actuator/metrics
会显示可用计量器名称的列表。
你可以通过提供其名称作为选择器来查看有关特定计量器的信息 — 例如,/actuator/metrics/jvm.memory.max
。
你在这里使用的名称应该与代码中使用的名称匹配,而不是与发送到监控系统后经过命名约定规范化的名称匹配。
换句话说,如果 jvm.memory.max
由于蛇形命名约定在 Prometheus 中显示为 jvm_memory_max
,你在检查 metrics
端点中的计量器时仍应使用 jvm.memory.max
作为选择器。
你还可以在 URL 末尾添加任意数量的 tag=KEY:VALUE
查询参数,以对计量器进行维度钻取 — 例如,/actuator/metrics/jvm.memory.max?tag=area:nonheap
。
报告的测量值是匹配计量器名称和已应用的任何标签的所有计量器统计信息的总和。
在前面的示例中,返回的 Value
统计信息是堆的 “Code Cache”、“Compressed Class Space” 和 “Metaspace” 区域的最大内存占用的总和。
如果你只想查看 “Metaspace” 的最大大小,你可以添加额外的 tag=id:Metaspace
— 即 /actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace
。
与 Micrometer Observation 集成
DefaultMeterObservationHandler
会自动注册到 ObservationRegistry
上,为每个完成的观察创建指标。