如何以编程方式从 spring-boot-actuator 获取指标?

how to get metrics from spring-boot-actuator programmatically?

我们在生产中有一个 spring 应用程序。它不是 Spring-boot。我发现 this post 关于如何在非 spring-boot 应用程序中使用 spring-boot-actuator。

但是,我们的要求是聚合来自 /metrics 端点的数据并对其进行一些分析并报告状态指示器。

例如,我们可能会使用堆参数,例如 {"heap.committed":480768,"heap.init":262144,"heap.used":294461,"heap":3728384,"threads.peak":37} 表示应用程序的状态 - FATAL、WARN 或 HEALTHY。

这只是一个例子。我们的要求更复杂。事实上,我们已经有了一个 status endpoint,我们想在其中添加更多信息(基于来自 spring-boot-actuator/metrics/health 端点的数据)。

我想实现的一种方法是 在应用程序中对 /metrics/health 进行 REST 调用,收集数据,聚合它们并 return 响应。我认为这不是推荐的方式。

如果有一个 bean 我可以直接提取这些参数,我会自动装配它并在需要时即时计算它们。 (其实我会定期计算的)

我对 return 来自 /metrics 的所有属性感兴趣。 同时我也对 /health.

中的以下内容感兴趣
{"diskSpace":{"status":"UP","free":386186194944,"threshold":10485760}}

我应该自动装配哪些 bean 并免费获得这些属性!

谢谢

编辑

这个 post@Autowired MetricRepository。但出于某种原因,它 return 仅使用自定义计数器属性。它不是 returning 堆、内存信息等 例如: Reporting metric counter.calls.get_greeting=4 Reporting metric counter.calls.get_greeting.1=1 Reporting metric counter.calls.get_greeting.2=1 Reporting metric counter.calls.get_greeting.3=1 Reporting metric counter.calls.get_greeting.4=1 Reporting metric counter.status.200.greeting.number=4 Reporting metric counter.status.404.star-star=1

/metrics 的输出由 MetricsEndpoint 生成。它可以作为一个 bean 提供,您可以拥有 @Autowired。对其调用 invoke 应该会为您提供所需的数据。

您可以对 /healthHealthEndpoint 执行相同的操作。