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

Posted

技术标签:

【中文标题】如何使用 Spring Boot 在运行时配置 Micrometer 的监控系统【英文标题】:How to configure Micrometer's monitoring system at runtime with Spring Boot 【发布时间】:2020-05-02 02:17:48 【问题描述】:

我是一般指标的新手,尤其是 Micrometer,所以这可能是一个愚蠢的问题:

Micrometer 在home page 上将自己描述为“没有供应商锁定”、“考虑 SLF4J,但用于度量”的“门面”。具有“对 [...] Netflix Atlas 的内置支持”。 docs 说它包含在 Spring Boot 2 中。

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

[snip] 中构造函数的参数 4 需要一个“io.micrometer.core.instrument.MeterRegistry”类型的 bean,但无法找到。

行动:

考虑在你的配置中定义一个“io.micrometer.core.instrument.MeterRegistry”类型的bean。

Google 将我带到了 Baeldung,在那里我 read 了解了一些 micrometer-registry-atlas 依赖项,并提供了 MeterRegistrybean 类型为 AtlasMeterRegistry。这行得通,但这不是我所说的“没有供应商锁定的外观”,但我想我只是做错了吗?

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

【问题讨论】:

你检查过github.com/bclozel/issues-dashboard/issues/3 是的,我看到了。这是关于一个名为“issues-dashboard”的项目,所以它没有直接关系......我仍然对项目所有者在 2018 年 7 月 5 日提到的修复感兴趣——我无法检查相应的提交。提交仅来自 2017 年 您可以在运行时使用您提到的属性进行切换,您只需要包含您想要切换的所有注册表依赖项(atlas o/andr Prometheus 等)。然后只需切换属性,无需重新编译。 不确定我是否理解:显然我需要提供AtlasMeterRegistry 类型的 bean,如果不在编译时提供 deps,我将如何实现这一点?我能想到的唯一妥协是在编译期间包含我想要支持的 all deps 并制作相应的 bean/configurations @ConditionalOnProperty.. 编辑:当然可以使用 Spring XML 配置来配置 bean。你是这个意思吗?我来自 Spring Boot(见问题),所以这不是我通常想到的 ;-) 【参考方案1】:

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

使客户在产品和服务方面依赖供应商, 在没有大量转换成本的情况下无法使用其他供应商。

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

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

【讨论】:

很公平。仍然:我想在开发期间使用 Atlas(它在内存中!),在(长期)测试期间使用 ELK,而在生产中什么都不用 - 就像他们明确提到的日志记录一样。根据所描述的行为,如果不运行 Atlas(单独!),甚至都无法运行应用程序 参见上面的 cmets:我想可以使用 Spring XML 配置,所以我想外部配置实际上是可能的。我会在一分钟内将此答案标记为已接受,谢谢。这不是 Spring Boot 方式,但我想它可以完成这项工作【参考方案2】:

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

您会注意到 Spring Boot 文档中的 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 现在将在那里。

【讨论】:

以上是关于如何使用 Spring Boot 在运行时配置 Micrometer 的监控系统的主要内容,如果未能解决你的问题,请参考以下文章

运行 Spring Boot 应用程序时如何显示自动配置报告

Spring Boot:如何在运行时添加新的数据源

如何在运行时更新 Spring Boot 应用程序的配置而不重新加载整个 ApplicationContext

如何在spring boot中配置log4j写入文件?

如何按特定顺序运行 Spring Batch Jobs(Spring Boot)?

如何使用 Gradle + Spring boot 运行多个配置文件? [复制]