升级到Spring Boot 2后,如何将缓存指标公开给Prometheus?

wem*_*emu 5 hazelcast spring-boot spring-cache spring-boot-actuator prometheus

我最近将Spring Boot应用程序从1.5升级到了2.0.1。我还使用千分尺将Prometheus集成迁移到了新的执行器方法。现在大多数事情都可以工作-包括一些自定义计数器和量规。

我注意到新的Prometheus端点/actuator/prometheus不再发布Spring缓存指标(大小和命中率)。

我唯一能找到的就是这个问题及其相关的提交

仍然无法在Prometheus导出上获取缓存指标。我尝试设置一些属性:

management.metrics.cache.instrument-cache=true
spring.cache.cache-names=cache1Name,cache2Name...
Run Code Online (Sandbox Code Playgroud)

但是什么都没有。我可以看到Hazelcast高速缓存管理器正在启动,注册了高速缓存管理器bean等等,但是都/metrics没有/prometheus显示任何统计信息。使用@Cacheable注释填充缓存。这与Spring Boot 1.5一起使用-我认为通过Hazelcast通过JMX公开了其指标,而prometheus出口商从那里获取了它吗?

现在不确定如何将其连接在一起。任何提示都欢迎!

Ste*_*oll 6

正如您已经回答了我的问题,我可以为此提供答案。

我的缓存稍后通过计划任务创建

那么文档的这一部分适用于您:

只有在启动时可用的缓存才会绑定到注册表。对于在启动阶段后即时或以编程方式创建的缓存,需要显式注册。CacheMetricsRegistrar bean 可用于简化该过程。

所以你必须自己注册这样的缓存,希望这很容易,比如:

public class MyComponent {

    private final CacheMetricsRegistrar cacheMetricsRegistrar;
    private final CacheManager cacheManager

    public MyComponent(CacheMetricsRegistrar cacheMetricsRegistrar,
                CacheManager cacheManager) { ... }

    public void register() {
         // you have just registered cache "xyz"
         Cache xyz = this.cacheManager.getCache("xyz");
         this.cacheMetricsRegistrar.bindCacheToRegistry(xyz);
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以将此代码包含在现有代码中。如果您不想这样做,那么您需要在现有代码之后运行其他东西来将这些缓存注册到注册表。

  • 遵循建议的解决方案,现在已填充cache_size指标,但cache_puts_total和cache_gets_total仍为零。知道为什么吗? (3认同)