如何使用 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 现在就在那里。
我对一般指标尤其是 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 现在就在那里。