小编典典

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

spring-boot

我最近将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...

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

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


阅读 459

收藏
2020-05-30

共1个答案

小编典典

您回答了我的问题后,我可以为您提供答案。

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

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

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

}

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

2020-05-30