指标
入门
Spring Boot 会自动配置一个复合 MeterRegistry
,并为类路径上找到的每个支持的实现添加一个注册表到复合注册表中。在运行时类路径中包含 micrometer-registry-{system}
依赖项就足以使 Spring Boot 配置注册表。
大多数注册表共享通用功能。例如,即使 Micrometer 注册表实现存在于类路径中,您也可以禁用特定的注册表。以下示例禁用 Datadog
-
属性
-
YAML
management.datadog.metrics.export.enabled=false
management:
datadog:
metrics:
export:
enabled: false
您还可以禁用所有注册表,除非注册表特定的属性另有说明,如下例所示
-
属性
-
YAML
management.defaults.metrics.export.enabled=false
management:
defaults:
metrics:
export:
enabled: false
Spring Boot 还会将任何自动配置的注册表添加到 Metrics
类上的全局静态复合注册表中,除非您明确指示它不要这样做
-
属性
-
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 令牌
-
属性
-
YAML
management.appoptics.metrics.export.api-token=YOUR_TOKEN
management:
appoptics:
metrics:
export:
api-token: "YOUR_TOKEN"
Atlas
-
属性
-
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
-
属性
-
YAML
management.datadog.metrics.export.api-key=YOUR_KEY
management:
datadog:
metrics:
export:
api-key: "YOUR_KEY"
如果您另外提供应用程序密钥(可选),则还会导出元数据,例如指标描述、类型和基本单位。
-
属性
-
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 美国 站点 (api.datadoghq.com
)。如果您的 Datadog 项目托管在其他站点之一,或者您需要通过代理发送指标,请相应地配置 URI。
-
属性
-
YAML
management.datadog.metrics.export.uri=https://api.datadoghq.eu
management:
datadog:
metrics:
export:
uri: "https://api.datadoghq.eu"
您还可以更改将指标发送到 Datadog 的间隔。
-
属性
-
YAML
management.datadog.metrics.export.step=30s
management:
datadog:
metrics:
export:
step: "30s"
Dynatrace
Dynatrace 提供了两个指标摄取 API,这两个 API 都已在 Micrometer 中实现。您可以在此处找到 Dynatrace 关于 Micrometer 指标摄取的文档 here。v1
命名空间中的配置属性仅在导出到 时间序列 v1 API 时应用。v2
命名空间中的配置属性仅在导出到 指标 v2 API 时应用。请注意,此集成一次只能导出到 API 的 v1
或 v2
版本,其中 v2
是首选。如果在 v1
命名空间中设置了 device-id
(对于 v1 是必需的,但在 v2 中未使用),则指标将导出到 v1
端点。否则,将假定为 v2
。
v2 API
您可以通过两种方式使用 v2 API。
自动配置
Dynatrace 自动配置适用于由 OneAgent 或 Kubernetes 的 Dynatrace Operator 监控的主机。
本地 OneAgent:如果 OneAgent 在主机上运行,则会自动将指标导出到 本地 OneAgent 摄取端点。摄取端点将指标转发到 Dynatrace 后端。
Dynatrace Kubernetes Operator:在安装了 Dynatrace Operator 的 Kubernetes 中运行时,注册表将自动从运算符中获取您的端点 URI 和 API 令牌。
这是默认行为,除了依赖 io.micrometer:micrometer-registry-dynatrace
之外,无需任何特殊设置。
手动配置
如果没有可用的自动配置,则需要 指标 v2 API 的端点和 API 令牌。 API 令牌 必须设置“摄取指标”(metrics.ingest
)权限。我们建议将令牌的范围限制为此权限。您必须确保端点 URI 包含路径(例如,/api/v2/metrics/ingest
)
指标 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 配置指标导出
-
属性
-
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 Summary 仪器:在某些情况下,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 令牌,如下例所示。在这种情况下,将使用自动配置的端点
-
属性
-
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。为了与现有设置向后兼容,当设置了 device-id
(对于 v1 是必需的,但在 v2 中未使用)时,指标将导出到时间序列 v1 端点。要将指标导出到 Dynatrace,您必须提供您的 API 令牌、设备 ID 和 URI
-
属性
-
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 秒
-
属性
-
YAML
management.dynatrace.metrics.export.step=30s
management:
dynatrace:
metrics:
export:
step: "30s"
您可以在 Micrometer 文档 和 Dynatrace 文档 中找到有关如何为 Micrometer 设置 Dynatrace 导出器的更多信息。
Elastic
默认情况下,指标会导出到本地机器上运行的 Elastic。您可以通过使用以下属性提供要使用的 Elastic 服务器的位置
-
属性
-
YAML
management.elastic.metrics.export.host=https://elastic.example.com:8086
management:
elastic:
metrics:
export:
host: "https://elastic.example.com:8086"
Ganglia
默认情况下,指标会导出到本地机器上运行的 Ganglia。您可以提供 Ganglia 服务器 的主机和端口,如下例所示
-
属性
-
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 服务器 的主机和端口,如下例所示
-
属性
-
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 令牌
-
属性
-
YAML
management.humio.metrics.export.api-token=YOUR_TOKEN
management:
humio:
metrics:
export:
api-token: "YOUR_TOKEN"
您还应该配置一个或多个标签来标识将指标推送到其中的数据源
-
属性
-
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 服务器 的位置
-
属性
-
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 域。您可以通过使用以下内容提供要使用的域
-
属性
-
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 服务器 的位置
-
属性
-
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
-
属性
-
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 的间隔
-
属性
-
YAML
management.newrelic.metrics.export.step=30s
management:
newrelic:
metrics:
export:
step: "30s"
默认情况下,指标通过 REST 调用发布,但如果类路径中有 Java Agent API,也可以使用它。
-
属性
-
YAML
management.newrelic.metrics.export.client-provider-type=insights-agent
management:
newrelic:
metrics:
export:
client-provider-type: "insights-agent"
最后,您可以通过定义自己的 NewRelicClientProvider
bean 来完全控制。
OpenTelemetry
默认情况下,指标会导出到本地机器上运行的 OpenTelemetry。您可以使用以下方法提供要使用的 OpenTelemetry 指标端点 的位置:
-
属性
-
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
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 示例 也受支持。要启用此功能,应存在 SpanContext
bean。如果您使用的是已弃用的 Prometheus simpleclient 支持并希望启用该功能,则应存在 SpanContextSupplier
bean。如果您使用 Micrometer 追踪,则会为您自动配置,但如果需要,您始终可以创建自己的。请查看 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
-
属性
-
YAML
management.signalfx.metrics.export.access-token=YOUR_ACCESS_TOKEN
management:
signalfx:
metrics:
export:
access-token: "YOUR_ACCESS_TOKEN"
您还可以更改将指标发送到 SignalFx 的间隔
-
属性
-
YAML
management.signalfx.metrics.export.step=30s
management:
signalfx:
metrics:
export:
step: "30s"
简单
Micrometer 带有一个简单的内存后端,如果未配置其他注册表,则会自动将其用作后备。这使您可以在 指标端点 中查看收集到的指标。
只要您使用任何其他可用的后端,内存后端就会禁用自身。您也可以显式禁用它
-
属性
-
YAML
management.simple.metrics.export.enabled=false
management:
simple:
metrics:
export:
enabled: false
Stackdriver
Stackdriver 注册表定期将指标推送到 Stackdriver。要将指标导出到 SaaS Stackdriver,您必须提供您的 Google Cloud 项目 ID
-
属性
-
YAML
management.stackdriver.metrics.export.project-id=my-project
management:
stackdriver:
metrics:
export:
project-id: "my-project"
您还可以更改将指标发送到 Stackdriver 的间隔
-
属性
-
YAML
management.stackdriver.metrics.export.step=30s
management:
stackdriver:
metrics:
export:
step: "30s"
StatsD
StatsD 注册表通过 UDP 积极地将指标推送到 StatsD 代理。默认情况下,指标会导出到本地机器上运行的 StatsD 代理。您可以使用以下方法提供要使用的 StatsD 代理主机、端口和协议:
-
属性
-
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)
-
属性
-
YAML
management.statsd.metrics.export.flavor=etsy
management:
statsd:
metrics:
export:
flavor: "etsy"
Wavefront
-
属性
-
YAML
management.wavefront.api-token=YOUR_API_TOKEN
management:
wavefront:
api-token: "YOUR_API_TOKEN"
或者,您可以在您的环境中使用 Wavefront 侧车或内部代理将指标数据转发到 Wavefront API 主机
-
属性
-
YAML
management.wavefront.uri=proxy://127.0.0.1:2878
management:
wavefront:
uri: "proxy://127.0.0.1:2878"
如果您将指标发布到 Wavefront 代理(如 Wavefront 文档 中所述),则主机必须采用 proxy://HOST:PORT 格式。 |
您还可以更改将指标发送到 Wavefront 的间隔
-
属性
-
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 框架参考文档。
Spring MVC 指标
自动配置启用 Spring MVC 控制器和功能处理程序处理的所有请求的检测。默认情况下,指标使用名称 http.server.requests
生成。您可以通过设置 management.observations.http.server.requests.name
属性来自定义名称。
有关生成的观察结果的更多信息,请参阅 Spring 框架参考文档。
要添加到默认标签中,请提供一个扩展 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 框架参考文档。
要添加到默认标签中,请提供一个扩展 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
的检测。为此,您必须注入自动配置的构建器并使用它来创建实例
-
RestTemplateBuilder
用于RestTemplate
-
WebClient.Builder
用于WebClient
-
RestClient.Builder
用于RestClient
您还可以手动应用负责此检测的自定义程序,即 ObservationRestTemplateCustomizer
、ObservationWebClientCustomizer
和 ObservationRestClientCustomizer
。
默认情况下,指标使用名称 http.client.requests
生成。您可以通过设置 management.observations.http.client.requests.name
属性来自定义名称。
要自定义使用RestTemplate
或RestClient
时的标签,请提供一个实现org.springframework.http.client.observation
包中的ClientRequestObservationConvention
接口的@Bean
。要自定义使用WebClient
时的标签,请提供一个实现org.springframework.web.reactive.function.client
包中的ClientRequestObservationConvention
接口的@Bean
。
Tomcat 指标
仅当启用MBeanRegistry
时,自动配置才会启用Tomcat的检测。默认情况下,MBeanRegistry
处于禁用状态,但可以通过将server.tomcat.mbeanregistry.enabled
设置为true
来启用它。
Tomcat 指标发布在tomcat.
度量名称下。
缓存指标
自动配置在启动时启用所有可用Cache
实例的检测,指标以cache
为前缀。缓存检测针对一组基本指标进行了标准化。还提供了其他特定于缓存的指标。
支持以下缓存库
-
Cache2k
-
Caffeine
-
Hazelcast
-
任何符合JCache(JSR-107)的实现
-
Redis
指标按缓存名称和CacheManager
名称进行标记,CacheManager
名称源自bean名称。
仅在启动时配置的缓存绑定到注册表。对于在缓存配置中未定义的缓存(例如,在启动阶段之后动态或以编程方式创建的缓存),需要显式注册。提供了CacheMetricsRegistrar bean来简化此过程。 |
DataSource 指标
自动配置启用所有可用DataSource
对象的检测,指标以jdbc.connections
为前缀。数据源检测会导致表示池中当前活动、空闲、最大允许和最小允许连接的仪表。
指标也按DataSource
名称进行标记,该名称基于bean名称计算得出。
默认情况下,Spring Boot为所有支持的数据源提供元数据。如果您的首选数据源不受支持,您可以添加其他DataSourcePoolMetadataProvider bean。请参阅DataSourcePoolMetadataProvidersConfiguration 以获取示例。 |
此外,Hikari 特定的指标以hikaricp
为前缀公开。每个指标都按池的名称进行标记(您可以使用spring.datasource.name
控制它)。
Hibernate 指标
如果org.hibernate.orm:hibernate-micrometer
位于类路径上,则所有启用了统计信息的可用HibernateEntityManagerFactory
实例都将使用名为hibernate
的指标进行检测。
指标也按EntityManagerFactory
名称进行标记,该名称源自bean名称。
要启用统计信息,必须将标准JPA属性hibernate.generate_statistics
设置为true
。您可以在自动配置的EntityManagerFactory
上启用它。
-
属性
-
YAML
spring.jpa.properties[hibernate.generate_statistics]=true
spring:
jpa:
properties:
"[hibernate.generate_statistics]": true
Spring Data Repository 指标
自动配置启用所有Spring DataRepository
方法调用的检测。默认情况下,指标使用名称spring.data.repository.invocations
生成。您可以通过设置management.metrics.data.repository.metric-name
属性来自定义名称。
io.micrometer.core.annotation
包中的@Timed
注解在Repository
接口和方法上受支持。如果您不想为所有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原生指标部分。
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()
}
}
要禁用自动配置的命令指标,请设置以下属性
-
属性
-
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()
}
}
要禁用自动配置的连接池指标,请设置以下属性
-
属性
-
YAML
management.metrics.mongo.connectionpool.enabled=false
management:
metrics:
mongo:
connectionpool:
enabled: false
Jetty 指标
自动配置通过使用Micrometer的JettyServerThreadPoolMetrics
绑定Jetty的ThreadPool
的指标。Jetty的Connector
实例的指标通过使用Micrometer的JettyConnectionMetrics
绑定,并且当server.ssl.enabled
设置为true
时,使用Micrometer的JettySslHandshakeMetrics
绑定。
@Timed 注解支持
要启用@Timed
注解的扫描,您需要将management.observations.annotations.enabled
属性设置为true
。请参阅Micrometer文档。
Redis 指标
自动配置为自动配置的LettuceConnectionFactory
注册了MicrometerCommandLatencyRecorder
。有关更多详细信息,请参阅Lettuce文档的Micrometer指标部分。
注册自定义指标
要注册自定义指标,请将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
实例应用自定义,可以使用io.micrometer.core.instrument.config.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管理的全局注册表。 |
通用标签
通用标签通常用于对操作环境进行维度细分,例如主机、实例、区域、堆栈等。通用标签应用于所有度量,并且可以配置,如下例所示
-
属性
-
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
开头的指标。
-
属性
-
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
。
您在此处使用的名称应与代码中使用的名称匹配,而不是它在命名约定规范化后用于监控系统发送的名称。换句话说,如果 |
您还可以将任意数量的 tag=KEY:VALUE
查询参数添加到 URL 的末尾,以便按维度深入了解指标,例如 /actuator/metrics/jvm.memory.max?tag=area:nonheap
。
报告的测量值是与指标名称和已应用的任何标签匹配的所有指标的统计信息的总和。在前面的示例中,返回的 |