指标
开始
Spring Boot 自动配置复合MeterRegistry并为它在 Classpath 上找到的每个受支持的实现向组合添加一个注册表。
依赖于micrometer-registry-{system}在你的运行时 Classpath 中就足够了,Spring Boot 可以配置注册表。
大多数注册表都具有共同的功能。 例如,即使 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
您可以注册任意数量的MeterRegistryCustomizerbean 来进一步配置注册表,例如应用通用标记,然后再向注册表注册任何仪表:
-
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 注册表会定期将指标推送到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 文档。
Configuration 属性中的v1命名空间仅在导出到时间序列 v1 API 时适用。
Configuration 属性中的v2命名空间仅在导出到 Metrics v2 API 时适用。
请注意,此集成只能导出到v1或v2版本,使用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.
手动配置
如果没有可用的自动配置,则需要 Metrics v2 API 的终端节点和 API Tokens。
API Tokens必须具有“摄取量度”(metrics.ingest) 权限集。
我们建议将Tokens的范围限制为此权限。
您必须确保端点 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 文档中找到):
-
Metric key prefix(指标键前缀):设置附加到所有导出的指标键的前缀。
-
使用 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 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 指标注册表使用时间序列 v1 API 定期将指标推送到配置的 URI。
为了向后兼容现有设置,当device-id(对于 v1 是必需的,但在 v2 中未使用),则指标将导出到时间序列 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和 authenticationtoken用于编写指标。
您可以使用以下方法提供要使用的 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 的分层映射,主要作为一种在本地查看指标的廉价且可移植的方式。
默认情况下,指标将导出到metricsJMX 域。
您可以使用以下方法提供要使用的域:
-
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"
新遗迹
-
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"
最后,您可以通过定义自己的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.*性能。
如果OtlpMetricsSenderbean 可用,它将在OtlpMeterRegistrySpring Boot 自动配置。
普罗 米修斯
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。
要启用此功能,需要SpanContextbean 应该存在。
如果您使用的是已弃用的 Prometheus simpleclient 支持并希望启用该功能,则SpanContextSupplierbean 应该存在。
如果您使用 Micrometer Tracing,这将为您自动配置,但您始终可以根据需要创建自己的跟踪。
请查看 Prometheus 文档,因为此功能需要在 Prometheus 端明确启用,并且仅支持使用 OpenMetrics 格式。
对于存在时间不够长而无法抓取的临时或批处理作业,您可以使用 Prometheus Pushgateway 支持向 Prometheus 公开指标。
要启用 Prometheus Pushgateway 支持,请将以下依赖项添加到您的项目中:
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>io.prometheus:prometheus-metrics-exporter-pushgateway</artifactId>
</dependency>
当 Prometheus Pushgateway 依赖项存在于 Classpath 上并且management.prometheus.metrics.export.pushgateway.enabled属性设置为true一个PrometheusPushGatewayManagerbean 是自动配置的。
这将管理将指标推送到 Prometheus Pushgateway。
您可以调整PrometheusPushGatewayManager通过使用management.prometheus.metrics.export.pushgateway.
对于高级配置,您还可以提供自己的PrometheusPushGatewayManager豆。
简单
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"
支持的指标和计量
Spring Boot 为各种技术提供自动仪表注册。 在大多数情况下,默认值提供合理的指标,这些指标可以发布到任何受支持的监控系统。
JVM 指标
自动配置通过使用核心 Micrometer 类启用 JVM 指标。
JVM 指标发布在jvm.计量名称。
提供了以下 JVM 指标:
-
各种内存和缓冲池详细信息
-
垃圾回收相关统计
-
线程利用率
-
虚拟线程统计信息(为此,
io.micrometer:micrometer-java21必须在 Classpath 上) -
加载和卸载的类数
-
JVM 版本信息
-
JIT 编译时间
系统指标
自动配置通过使用核心 Micrometer 类来启用系统指标。
系统指标发布在system.,process.和disk.计量名称。
提供了以下系统指标:
-
CPU 指标
-
文件描述符指标
-
正常运行时间指标(应用程序已运行的时间量和绝对开始时间的固定衡量标准)
-
可用磁盘空间
应用程序启动指标
自动配置会公开应用程序启动时间指标:
-
application.started.time:启动应用程序所花费的时间。 -
application.ready.time:应用程序准备好为请求提供服务所花费的时间。
指标由应用程序类的完全限定名称标记。
任务执行和调度指标
自动配置支持所有可用ThreadPoolTaskExecutor和ThreadPoolTaskScheduler豆子,只要下属ThreadPoolExecutor可用。
度量由执行程序的名称标记,该名称派生自 Bean 名称。
JMS 指标
自动配置支持所有可用JmsTemplatebeans 和@JmsListenerannotated 方法。
这将产生"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 Server 指标
自动配置允许检测 Jersey JAX-RS 实现处理的所有请求。
默认情况下,使用名称http.server.requests.
您可以通过设置management.observations.http.server.requests.name财产。
默认情况下,Jersey 服务器指标使用以下信息进行标记:
| 标记 | 描述 |
|---|---|
|
处理请求时引发的任何异常的简单类名。 |
|
请求的方法(例如 |
|
请求的结果,基于响应的状态代码。
1xx 是 |
|
响应的 HTTP 状态代码(例如 |
|
变量替换之前的请求的 URI 模板(如果可能)(例如 |
要自定义标签,请提供@Bean实现JerseyObservationConvention.
SSL Bundle 指标
Spring Boot Actuator 发布有关 SSL 捆绑包的到期指标。
指标ssl.chain.expiry以秒为单位测量每个证书链的到期日期。
如果链已过期,则此数字将为负数。
此指标标有以下信息:
| 标记 | 描述 |
|---|---|
|
包含证书链的捆绑包的名称 |
|
证书链中最早过期的证书的序列号(十六进制格式) |
|
证书链的名称。 |
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
-
咖啡因
-
Hazelcast
-
任何兼容的 JCache (JSR-107) 实现
-
Redis
| 应启用指标,以便自动配置能够选取它们。 有关更多详细信息,请参阅您正在使用的缓存库的文档。 |
指标按缓存名称和CacheManager,该名称派生自 Bean 名称。
只有在启动时配置的缓存才会绑定到注册表。
对于未在缓存配置中定义的缓存,例如在启动阶段之后动态或以编程方式创建的缓存,需要显式注册。
一个CacheMetricsRegistrarbean 的可用使该过程更容易。 |
Spring Batch 指标
请参阅 Spring Batch 参考文档。
Spring GraphQL 指标
请参阅 Spring GraphQL 参考文档。
DataSource 指标
自动配置支持所有可用DataSource指标前缀为jdbc.connections.
数据源检测会生成表示池中当前活动、空闲、允许的最大连接数和允许的最小连接的仪表。
Metrics 也由DataSource根据 bean 名称计算。
默认情况下, Spring Boot 为所有支持的数据源提供元数据。
您可以添加其他DataSourcePoolMetadataProviderbeans(如果您最喜欢的数据源不受支持)。
看DataSourcePoolMetadataProvidersConfiguration例如。 |
此外,特定于 Hikari 的指标通过hikaricp前缀。
每个指标都由池的名称进行标记(您可以使用spring.datasource.name).
Hibernate 指标
如果org.hibernate.orm:hibernate-micrometer在 Classpath 上,所有可用的 HibernateEntityManagerFactory启用了统计信息的实例将使用名为hibernate.
Metrics 也由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支持 packageRepository接口和方法。
如果您不想记录所有Repositoryinvocations,您可以设置management.metrics.data.repository.autotime.enabled自false并专门使用@Timedannotations 来代替。
一个@Timedannotation 替换为longTask = true为方法启用长任务计时器。
长任务计时器需要单独的指标名称,并且可以与短任务计时器堆叠。 |
默认情况下,存储库调用相关指标使用以下信息进行标记:
| 标记 | 描述 |
|---|---|
|
源的简单类名 |
|
的名称 |
|
结果状态 ( |
|
从调用中引发的任何异常的简单类名。 |
要替换默认标签,请提供@Bean实现RepositoryTagsProvider.
Spring 集成指标
Spring 集成会自动提供 Micrometer 支持,只要有MeterRegistryBean 可用。
指标发布在spring.integration.计量名称。
Kafka 指标
自动配置会注册一个MicrometerConsumerListener和MicrometerProducerListener分别用于 auto-configured Consumer Factory 和 Producer Factory。
它还注册了一个KafkaStreamsMicrometerListener为StreamsBuilderFactoryBean.
有关更多详细信息,请参阅 Spring Kafka 文档的 Micrometer Native Metrics 部分。
MongoDB 指标
本节简要介绍了 MongoDB 的可用指标。
MongoDB 命令指标
自动配置会注册一个MongoMetricsCommandListener使用自动配置的MongoClient.
名为mongodb.driver.commands为向底层 MongoDB 驱动程序发出的每个命令创建。
默认情况下,每个指标都标有以下信息:
| 标记 | 描述 |
|---|---|
|
发出的命令的名称。 |
|
命令发送到的集群的标识符。 |
|
命令发送到的服务器的地址。 |
|
命令的结果 ( |
要替换默认指标标签,请定义一个MongoCommandTagsProviderbean,如下例所示:
-
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's 的指标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如果您发现跨组件或应用程序重复检测一套指标,则 implementation 也很有用。
默认情况下,来自所有MeterBinderbean 会自动绑定到 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")
}
}
默认情况下,所有MeterFilterbean 会自动绑定到 Spring 管理的MeterRegistry.
确保使用 Spring 管理的MeterRegistry而不是Metrics.
这些使用非 Spring Management 的全局注册表。 |
常用标签
常用标签通常用于对运行环境进行维度下钻,例如主机、实例、区域、堆栈等。 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,则常用标签的顺序非常重要。
由于使用这种方法无法保证常用 tag 的顺序,因此建议 Graphite 用户定义自定义MeterFilter相反。 |
每米属性
除了MeterFilterbean 中,您可以使用 properties 按计量应用一组有限的自定义。
使用 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 文档的 Histograms and percentiles 部分。
Metrics 终端节点
Spring Boot 提供了一个metrics终端节点,您可以诊断性地使用它来检查应用程序收集的指标。
默认情况下,终端节点不可用,必须公开。
有关更多详细信息,请参阅公开终端节点。
导航到/actuator/metrics显示可用计量器名称的列表。
您可以通过提供特定计量的名称作为选择器来深入查看有关该计量的信息,例如,/actuator/metrics/jvm.memory.max.
|
您在此处使用的名称应与代码中使用的名称匹配,而不是与针对其寄送到的监控系统进行命名约定规范化后的名称匹配。
换句话说,如果 |
您还可以添加任意数量的tag=KEY:VALUEquery 参数添加到网址末尾,以维度向下钻取仪表 — 例如,/actuator/metrics/jvm.memory.max?tag=area:nonheap.
|
报告的测量值是与仪表名称和已应用的任何标签匹配的所有仪表的统计数据的总和。
在前面的示例中,返回的 |
与 Micrometer Observation 集成
一个DefaultMeterObservationHandler会自动注册到ObservationRegistry,它会为每个已完成的观察创建指标。