手动注册Guava缓存后EhCache指标在Prometheus中消失的问题
问题原因分析
- EhCache指标消失:手动调用
GuavaCacheMetrics.monitor()时,若未复用Spring容器内置的MeterRegistry实例,而是创建了新的MeterRegistry(比如调用无参重载方法),会导致Prometheus仅抓取到新registry中的Guava缓存指标,而Spring自动注册的EhCache指标存在于默认的CompositeMeterRegistry中,未被正确暴露。 - 自定义缓存缺失
cache_manager标签:GuavaCacheMetrics默认不会自动添加cache_manager标签,需在手动注册时显式指定标签参数。
解决方案
1. 复用Spring容器的MeterRegistry注册Guava缓存指标
在自定义缓存的Bean配置中,注入Spring提供的MeterRegistry实例,将Guava缓存指标注册到该registry中,确保和EhCache指标共用同一指标容器:
@Configuration public class CustomCacheConfig { @Bean public CustomCache customGuavaCache(MeterRegistry meterRegistry) { // 初始化自定义Guava缓存 CustomCache customCache = new CustomCache( CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) ); // 手动注册指标,指定缓存名称和cache_manager标签 GuavaCacheMetrics.monitor( meterRegistry, customCache, "custom_guava_cache", // 指标名称前缀 Tags.of("cache_manager", "custom_guava_cache_manager") // 补充cache_manager标签 ); return customCache; } }
2. 确保EhCache自动指标收集正常
检查应用配置,保证EhCache的自动指标收集未被禁用:
# 开启缓存指标收集(默认已开启,可显式声明) management.metrics.enable.cache=true # 指定EhCache为缓存类型 spring.cache.type=ehcache # 加载EhCache配置文件 spring.cache.ehcache.config=classpath:ehcache.xml
3. 排查MeterRegistry Bean冲突
若项目中存在自定义的MeterRegistry Bean,需确保它是Spring默认CompositeMeterRegistry的扩展,而非完全替换,避免导致原有指标丢失。
验证
启动应用后,访问Prometheus指标端点(默认/actuator/prometheus),即可同时看到:
- 以
cache_为前缀的EhCache指标,带cache_manager标签(对应EhCache配置中的缓存管理器名称) - 以
cache_为前缀的Guava缓存指标,带指定的cache_manager标签
内容的提问来源于stack exchange,提问作者Aisteru Firë
相关产品推荐
相关产品推荐

