You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动注册Guava缓存后EhCache指标在Prometheus中消失的问题

问题原因分析
  1. EhCache指标消失:手动调用GuavaCacheMetrics.monitor()时,若未复用Spring容器内置的MeterRegistry实例,而是创建了新的MeterRegistry(比如调用无参重载方法),会导致Prometheus仅抓取到新registry中的Guava缓存指标,而Spring自动注册的EhCache指标存在于默认的CompositeMeterRegistry中,未被正确暴露。
  2. 自定义缓存缺失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ë

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:10:16