Spring Boot中Caffeine缓存仅上报size指标,无Micrometer命中/未命中等指标
以下是几个可能导致你无法看到cache.gets、cache.puts等Micrometer指标的原因:
Spring Boot版本与Caffeine 3.x的适配问题
Caffeine 3.x重构了统计模块的API,而Spring Boot在2.6版本之后才正式适配这套新API。如果你的Spring Boot版本低于2.6,默认的自动配置无法正确采集Caffeine 3.x的get/put等操作统计,只会暴露缓存size这类基础指标。建议升级到Spring Boot 2.6及以上版本。未将Caffeine统计绑定到Micrometer
只调用recordStats()开启Caffeine本地统计是不够的,需要显式将统计数据绑定到Micrometer的MeterRegistry。你的CacheConfig配置中可能缺少这一步:@Bean public CacheManager cacheManager(MeterRegistry meterRegistry) { CaffeineCacheManager cacheManager = new CaffeineCacheManager("your-target-cache"); cacheManager.setCaffeine(Caffeine.newBuilder() .recordStats(() -> MicrometerStatsCounter.forRegistry(meterRegistry))); // 关键:用Micrometer实现统计 return cacheManager; }不指定Micrometer统计实现的话,Caffeine只会用默认的统计器记录数据,不会同步到Actuator的指标体系中。
Actuator指标暴露配置缺失
检查你的配置文件,确保缓存指标被允许暴露:# 暴露metrics端点 management.endpoints.web.exposure.include=metrics # 开启缓存指标采集 management.metrics.enable.cache=true如果
management.metrics.enable.cache设为false,即使采集到了缓存操作统计,也不会在Actuator中展示。缓存操作未实际触发
确认你的测试逻辑真的触发了对应的缓存操作:比如第一次调用@Cacheable方法会触发put,第二次及之后调用才会触发get。如果测试只执行了缓存填充(put),自然看不到cache.gets指标;如果只执行了命中查询,也看不到cache.puts。可以补充测试用例,覆盖不同的缓存操作场景。指标名称或缓存名称匹配错误
Micrometer的缓存指标格式是cache.gets{cache_name="你的缓存名",result="hit/miss"},cache.puts同理。检查你在Actuator中查询的指标是否对应正确的缓存名称,避免因为名称不匹配误以为指标不存在。
内容的提问来源于stack exchange,提问作者hitchhiker

