升级到Spring Boot 2后,如何向prometheus公开缓存指标?

时间:2018-04-06 16:17:09

标签: spring-boot hazelcast prometheus spring-boot-actuator spring-cache

我最近将spring boot应用程序从1.5升级到2.0.1。我还使用千分尺将prometheus积分迁移到新的执行器方法。大多数事情现在都有效 - 包括一些自定义计数器和仪表。

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

我唯一能找到的问题是this问题及其相关问题commit

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

management.metrics.cache.instrument-cache=true
spring.cache.cache-names=cache1Name,cache2Name...

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

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

1 个答案:

答案 0 :(得分:2)

当你回答我的问题时,我可以为此提供答案。

  

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

然后本文档的这一部分适用于您:

  

只有启动时可用的缓存才会绑定到注册表。对于在启动阶段后即时或以编程方式创建的缓存,需要显式注册。 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);
    }

}

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