Spring Boot 如何使用RedisCacheManager公开Prometheus指标?

taor4pac  于 2023-03-23  发布在  Spring
关注(0)|答案(2)|浏览(234)

我有一个Sping Boot 2应用程序,它已经实现了Caffeine缓存管理器的缓存。缓存是以标准的方式实现的,带有@Cacheable@CacheEvict@CachePut注解。
我迁移了使用Redis的应用程序,以便在Pod之间分布缓存。
现在的问题是指标。在迁移之前,Caffeine暴露了cache_puts_totalcache_gets_total等缓存指标,现在什么都没有。在RedisCacheManager中是否有针对指标的实现?我找不到任何东西。

7kqas0il

7kqas0il1#

不幸的是,正如你在Sping Boot 文档中看到的:52.指标,Sping Boot 默认不提供Redis的缓存统计:
默认情况下,Sping Boot 为EhCache,Hazelcast,Infinispan,JCache和Guava提供缓存统计信息。如果您最喜欢的缓存库不支持开箱即用,您可以添加其他CacheStatisticsProvider bean。
作为另一种替代方案,你可以使用Redisson,这个Redis客户端与Spring集成,可以公开Prometheus指标,你的指标看起来就像你暗示的那样:

# HELP cache_gets_total the number of times cache lookup methods have returned an uncached (newly loaded) value, or null
# TYPE cache_gets_total counter
cache_gets_total{cache="...",cacheManager="...",name="...",result="miss",} 0.0
cache_gets_total{cache="...",cacheManager="...",name="...",result="hit",} 0.0

# HELP cache_puts_total The number of entries added to the cache
# TYPE cache_puts_total counter
cache_puts_total{cache="...",cacheManager="...",name="...",} 0.0
shstlldc

shstlldc2#

你可以配置RedisCacheManager来给予你指标。首先,你需要通过从Prometheus添加必要的指标类型来实现CacheStatisticsCollector。然后这个实现应该被添加到RedisCacheWriter,它应该被放置在RedisCacheManager中。例如:

RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
            .prefixCacheNameWith("prefix:")
            .disableCachingNullValues();
RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory)
            .withStatisticsCollector(new PrometheusCollector());
RedisCacheManager redisCacheManager =  RedisCacheManager.builder()
            .cacheWriter(cacheWriter)
            .cacheDefaults(configuration.entryTtl(Duration.ofHours(1)))
            .build();

相关问题