如何使用 Spring Boot 在运行时配置 Micrometer 的监控系统

How to configure Micrometer's monitoring system at runtime with Spring Boot

我对一般指标尤其是 Micrometer 不熟悉,所以这可能是一个愚蠢的问题:

Micrometer 在 home page as a "facade" "without vendor lock-in", "think SLF4J, but for metrics". With "built-in support for [...] Netflix Atlas". The docs 上自我介绍说它包含在 Spring Boot 2 中。

所以我期望能够在启动时配置监控系统——就像我对 SLF4J 所做的那样。所以 this doc 为 Spring Boot 描述了一个设置 management.metrics.export.atlas.enabled (以及其他)。但即使使用此设置,自动连接 MeterRegistry registry 也会失败,如下所示:

Parameter 4 of constructor in [snip] required a bean of type 'io.micrometer.core.instrument.MeterRegistry' that could not be found.

Action:

Consider defining a bean of type 'io.micrometer.core.instrument.MeterRegistry' in your configuration.

Google 把我带到了 Baeldung,在那里我 read 了解了一些 micrometer-registry-atlas 依赖性并提供了 MeterRegistry 类型 AtlasMeterRegistry 的 bean。这行得通,但这不是我所说的 "facade without vendor lock-in",但我想我只是做错了?

如何在运行时提供监控系统,在不重新编译的情况下在Atlas和任何其他系统之间切换?

我在 Wikipedia 上找到的一个定义说供应商锁定:

makes a customer dependent on a vendor for products and services, unable to use another vendor without substantial switching costs.

Micrometer 有助于统一接口以收集指标(计时器、仪表、计数器等),但没有关于如何将这些指标传送到后端(Atlas、Prometheus 等)的标准。这就是您需要定义特定库 (micrometer-registry-atlas)、属性,有时还需要额外配置的主要原因。

Micrometer 不会将切换到另一个后端所需的成本降为零,但至少它们保持在最低水平。

@crusy 实际上你是对的,但是该功能是 Actuator 模块的一部分。这没有很好的记录,我很幸运在 Spring Boot Gitter 频道 https://gitter.im/spring-projects/spring-boot/archives/2019/01/24?at=5c4980b00721b912a5cdc02f.

中找到了答案

您会注意到 Spring 引导文档中的 Metrics 部分位于 Actuator 下:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-metrics

这意味着为了让 Micrometer 开箱即用,您需要在构建中包含 Actuator。例如 Gradle:

implementation ('org.springframework.boot:spring-boot-starter-actuator')

MeterRegistry bean 现在就在那里。