对于最新的稳定版本,请使用 Spring Boot 3.5.5! |
指标
开始
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 注册表会定期将指标推送到api.appoptics.com/v1/measurements
.
要将指标导出到 SaaS AppOptics,必须提供您的 API Tokens:
-
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 站点 (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 时适用。
请注意,此集成只能导出到v1
或v2
API 版本,使用v2
是首选。
如果device-id
(v1 需要,但在 v2 中不使用)在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 Tokens。
这是默认行为,除了依赖io.micrometer:micrometer-registry-dynatrace
.
手动配置
如果没有可用的自动配置,则需要指标 v2 API 的端点和 API Tokens。
API Tokens必须具有“摄取指标”(metrics.ingest
) 权限集。
建议将Tokens的范围限制为此一个权限。
您必须确保终结点 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:
-
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 Tokens,如以下示例所示。 在此方案中,使用自动配置的终结点:
-
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 指标注册表使用 Timeseries v1 API 定期将指标推送到配置的 URI。
为了向后兼容现有设置,当device-id
设置为(v1 需要,但在 v2 中不使用),则指标将导出到 Timeseries v1 终结点。
要将指标导出到 Dynatrace,必须提供您的 API Tokens、设备 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 端点和Tokens之外,您还可以更改将指标发送到 Dynatrace 的时间间隔。
默认导出间隔为60s
.
以下示例将导出间隔设置为 30 秒:
-
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 提供默认的HierarchicalNameMapper
控制如何将维度计 ID 映射到平面分层名称。
要控制此行为,请定义您的
|
休米奥
默认情况下,Humio 注册表会定期将指标推送到 cloud.humio.com。要将指标导出到 SaaS Humio,您必须提供 API Tokens:
-
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,请配置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 服务器的位置:
-
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 调用发布,但如果 Java Agent API 位于类路径上,也可以使用它:
-
Properties
-
YAML
management.newrelic.metrics.export.client-provider-type=insights-agent
management:
newrelic:
metrics:
export:
client-provider-type: "insights-agent"
最后,您可以通过定义自己的NewRelicClientProvider
豆。
OTLP的
默认情况下,指标通过 OpenTelemetry 协议 (OTLP) 导出到本地计算机上运行的使用者。
要导出到其他位置,请使用management.otlp.metrics.export.url
:
-
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 希望抓取或轮询单个应用程序实例以获取指标。
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
豆子应该存在。
如果您使用的是已弃用的 Prometheus simpleclient 支持并希望启用该功能,则SpanContextSupplier
豆子应该存在。
如果您使用千分尺追踪,这将为您自动配置,但如果您愿意,您可以随时创建自己的追踪。
请查看 Prometheus 文档,因为该功能需要在 Prometheus 端显式启用,并且仅支持 OpenMetrics 格式。
对于可能存在时间不够长而无法抓取的临时或批处理作业,您可以使用 Prometheus Pushgateway 支持将指标公开给 Prometheus。
Prometheus Pushgateway 的自动配置仅适用于已弃用的 Prometheus simpleclient。
要切换到 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。
您可以调整PrometheusPushGatewayManager
通过使用management.prometheus.metrics.export.pushgateway
.
对于高级配置,您还可以提供自己的配置PrometheusPushGatewayManager
豆。
信号FX
-
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 附带了一个简单的内存中后端,如果未配置其他注册表,则会自动将其用作回退。这使您可以查看指标端点中收集了哪些指标。
一旦您使用任何其他可用后端,内存中后端就会自行禁用。您也可以显式禁用它:
-
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"
支持的指标和计量
Spring Boot 为各种技术提供自动仪表注册。在大多数情况下,默认值提供了可以发布到任何受支持的监控系统的合理指标。
JVM 指标
自动配置通过使用核心 Micrometer 类启用 JVM 指标。JVM 指标发布在jvm.
仪表名称。
提供了以下 JVM 指标:
-
各种内存和缓冲池详细信息
-
与垃圾回收相关的统计信息
-
线程利用率
-
加载和卸载的类数
-
JVM 版本信息
-
JIT 编译时间
系统指标
自动配置通过使用核心 Micrometer 类启用系统度量。
系统指标发布在system.
,process.
和disk.
仪表名称。
提供以下系统指标:
-
CPU 指标
-
文件描述符指标
-
正常运行时间指标(应用程序运行的时间量和绝对启动时间的固定指标)
-
可用磁盘空间
应用程序启动指标
自动配置公开应用程序启动时间指标:
-
application.started.time
:启动应用程序所花费的时间。 -
application.ready.time
:应用程序准备好处理请求所花费的时间。
指标由应用程序类的完全限定名称标记。
任务执行和调度指标
自动配置支持所有可用仪器ThreadPoolTaskExecutor
和ThreadPoolTaskScheduler
豆子,只要下属ThreadPoolExecutor
可用。
指标由执行器的名称标记,该名称派生自 Bean 名称。
JMS 指标
自动配置支持所有可用仪器JmsTemplate
beans 和@JmsListener
带注释的方法。
这将产生"jms.message.publish"
和"jms.message.process"
指标。
有关生成的观察的更多信息,请参阅 Spring Framework 参考文档。
Spring MVC 指标
自动配置允许检测 Spring MVC 控制器和功能处理程序处理的所有请求。
默认情况下,生成指标的名称为http.server.requests
.
您可以通过设置management.observations.http.server.requests.name
财产。
要添加到默认标记,请提供@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
财产。
要添加到默认标记,请提供@Bean
延伸DefaultServerRequestObservationConvention
从org.springframework.http.server.reactive.observation
包。
要替换默认标记,请提供一个@Bean
实现ServerRequestObservationConvention
.
在某些情况下,控制器和处理程序函数中处理的异常不会记录为请求指标标记。 应用程序可以通过将已处理的异常设置为请求属性来选择加入并记录异常。 |
Jersey服务器指标
自动配置支持检测 Jersey JAX-RS 实现处理的所有请求。
默认情况下,生成指标的名称为http.server.requests
.
您可以通过设置management.observations.http.server.requests.name
财产。
默认情况下,Jersey服务器指标使用以下信息进行标记:
标记 | 描述 |
---|---|
|
处理请求时引发的任何异常的简单类名。 |
|
请求的方法(例如 |
|
请求的结果,基于响应的状态代码。
1xx 是 |
|
响应的 HTTP 状态代码(例如 |
|
如果可能,请求的 URI 模板在变量替换之前(例如, |
要自定义标记,请提供@Bean
实现JerseyObservationConvention
.
HTTP 客户端指标
Spring Boot Actuator 管理RestTemplate
,WebClient
和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 指标
自动配置仅在 MBeanRegistry
已启用。
默认情况下,MBean 注册表是禁用的,但您可以通过设置server.tomcat.mbeanregistry.enabled
自true
.
Tomcat 指标发布在tomcat.
仪表名称。
缓存指标
自动配置支持所有可用仪器Cache
启动时的实例,指标前缀为cache
.
缓存检测针对一组基本指标进行了标准化。
还提供其他特定于缓存的指标。
支持以下缓存库:
-
缓存2k
-
咖啡因
-
榛铸
-
任何符合 JCache (JSR-107) 的实现
-
Redis
应启用指标,以便自动配置选取它们。 有关更多详细信息,请参阅您正在使用的缓存库的文档。 |
指标由缓存的名称和CacheManager
,源自 bean 名称。
只有在启动时配置的缓存才会绑定到注册表。
对于缓存配置中未定义的缓存,例如动态创建的缓存或在启动阶段后以编程方式创建的缓存,需要显式注册。
一个CacheMetricsRegistrar bean 的提供使该过程更容易。 |
Spring Batch 指标
请参阅 Spring Batch 参考文档。
Spring GraphQL 指标
请参阅 Spring GraphQL 参考文档。
数据源指标
自动配置支持所有可用仪器DataSource
指标前缀为jdbc.connections
.
数据源检测生成仪表,这些仪表表示池中当前活动、空闲、允许的最大连接数和允许的最小连接数。
指标还由DataSource
根据 Bean 名称计算。
默认情况下,Spring Boot 为所有受支持的数据源提供元数据。
您可以添加其他DataSourcePoolMetadataProvider bean,如果不支持您最喜欢的数据源。
看DataSourcePoolMetadataProvidersConfiguration 例如。 |
此外,特定于 Hikari 的指标会通过hikaricp
前缀。
每个指标都由池的名称标记(您可以使用spring.datasource.name
).
休眠指标
如果org.hibernate.orm:hibernate-micrometer
在类路径上,所有可用的休眠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 Repository 指标
自动配置支持所有 Spring Data 的检测Repository
方法调用。
默认情况下,生成指标的名称为spring.data.repository.invocations
.
您可以通过设置management.metrics.data.repository.metric-name
财产。
这@Timed
注释io.micrometer.core.annotation
软件包支持Repository
接口和方法。
如果您不想记录所有指标Repository
调用,您可以将management.metrics.data.repository.autotime.enabled
自false
并专门使用@Timed
注释。
一个@Timed 注释longTask = true 为该方法启用较长的任务计时器。
长任务计时器需要单独的指标名称,并且可以与短任务计时器堆叠。 |
默认情况下,与存储库调用相关的指标使用以下信息进行标记:
标记 | 描述 |
---|---|
|
源的简单类名 |
|
的名称 |
|
结果状态 ( |
|
从调用引发的任何异常的简单类名。 |
要替换默认标记,请提供一个@Bean
实现RepositoryTagsProvider
.
Spring 集成指标
Spring Integration 每当MeterRegistry
豆子可用。
指标发布在spring.integration.
仪表名称。
Kafka 指标
自动配置注册一个MicrometerConsumerListener
和MicrometerProducerListener
分别用于自动配置的使用者工厂和生产者工厂。
它还注册了一个KafkaStreamsMicrometerListener
为StreamsBuilderFactoryBean
.
有关更多详细信息,请参阅 Spring Kafka 文档的 Micrometer Native Metrics 部分。
MongoDB 指标
本节简要介绍 MongoDB 的可用指标。
MongoDB 命令指标
自动配置注册一个MongoMetricsCommandListener
使用自动配置的MongoClient
.
名为mongodb.driver.commands
为向底层 MongoDB 驱动程序发出的每个命令创建。
默认情况下,每个指标都使用以下信息进行标记:
标记 | 描述 |
---|---|
|
发出的命令的名称。 |
|
命令发送到的集群的标识符。 |
|
命令发送到的服务器的地址。 |
|
命令 ( |
要替换默认指标标记,请定义一个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 连接池指标
自动配置注册一个MongoMetricsConnectionPoolListener
使用自动配置的MongoClient
.
为连接池创建以下仪表指标:
-
mongodb.driver.pool.size
报告连接池的当前大小,包括空闲和正在使用的成员。 -
mongodb.driver.pool.checkedout
报告当前正在使用的连接计数。 -
mongodb.driver.pool.waitqueuesize
报告来自池的连接的等待队列的当前大小。
默认情况下,每个指标都使用以下信息进行标记:
标记 | 描述 |
---|---|
|
连接池对应的集群的标识符。 |
|
连接池对应的服务器的地址。 |
要替换默认指标标记,请定义一个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指标
自动配置绑定 Jetty 的指标ThreadPool
通过使用 Micrometer 的JettyServerThreadPoolMetrics
.
Jetty 的指标Connector
实例使用 Micrometer 的JettyConnectionMetrics
并且,当server.ssl.enabled
设置为true
, 千分尺的JettySslHandshakeMetrics
.
Redis 指标
自动配置注册一个MicrometerCommandLatencyRecorder
对于自动配置的LettuceConnectionFactory
.
有关更多详细信息,请参阅 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
接口。
例如,如果要将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")
}
}
默认情况下,所有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 的仪表。
不接受的仪表将从 |
|
是否发布适合计算可聚合(跨维度)百分位近似的直方图。 |
|
通过限制预期值的范围来发布更少的直方图桶。 |
|
发布在应用程序中计算的百分位值 |
|
通过将最近的 Samples累积在环形缓冲区中来赋予它们更大的权重,这些缓冲区在可配置的到期后旋转,并使用 可配置的缓冲区长度。 |
|
发布累积直方图,其中包含由服务级别目标定义的存储桶。 |
有关背后概念的更多详细信息percentiles-histogram
,percentiles
和slo
,请参阅千分尺文档的直方图和百分位数部分。
指标端点
Spring Boot 提供了一个metrics
端点,您可以诊断地使用它来检查应用程序收集的指标。
默认情况下,终结点不可用,必须公开。
有关更多详细信息,请参阅公开终结点。
导航到/actuator/metrics
显示可用仪表名称的列表。
您可以通过提供特定仪表的名称作为选择器来向下钻取以查看有关其信息,例如/actuator/metrics/jvm.memory.max
.
您在此处使用的名称应与代码中使用的名称匹配,而不是为它交付到的监视系统进行命名约定规范化后的名称。
换句话说,如果 |
您还可以添加任意数量的tag=KEY:VALUE
查询参数到URL末尾,以对仪表进行维度向下钻取,例如,/actuator/metrics/jvm.memory.max?tag=area:nonheap
.
报告的测量值是与仪表名称匹配的所有仪表的统计信息和已应用的任何标记的统计信息的总和。在前面的示例中,返回的 |
与千分尺观察集成
一个DefaultMeterObservationHandler
自动注册在ObservationRegistry
,它为每个已完成的观察创建指标。