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

使用Micrometer @Timed注解的自定义指标偶尔缺失问题求助

自定义@Timed指标偶尔不显示在/actuator/metrics的排查方案

以下是针对这个问题的常见排查方向和解决办法:

1. 确认@Timed注解的生效基础

  • 方法所在类必须是Spring管理的Bean:如果类没有添加@Component/@Service等注解,Spring无法为其创建代理,@Timed注解的AOP拦截逻辑不会触发。
  • 避免同类内部调用:如果是通过this.notify()调用方法,Spring AOP无法拦截,必须通过Spring容器获取Bean实例后调用,才能触发指标收集。

2. 检查依赖完整性

当前仅引入了micrometer-tracing-brave,但@Timed的指标收集核心依赖是micrometer-core,而actuator负责暴露metrics端点。确保build.gradle中包含:

implementation 'io.micrometer:micrometer-core'
implementation 'org.springframework.boot:spring-boot-starter-actuator'

注意:micrometer-tracing-brave是链路追踪组件,不负责指标的基础收集。

3. 懒加载导致的指标未初始化

Micrometer的指标默认是懒加载机制——只有方法被首次调用后,对应的指标才会被创建并显示在/actuator/metrics中。如果方法从未执行过,自然看不到该指标。

如果需要提前初始化指标,可以通过MeterRegistry手动注册:

@Autowired
private MeterRegistry meterRegistry;

@PostConstruct
public void initCustomMetrics() {
    Timer.builder("custom.mrl.produce")
        .description("Metrics for JMS producer to RDB")
        .register(meterRegistry);
}

4. 配置文件校验

  • 确保没有禁用目标指标:
    management.metrics.enable.custom.mrl.produce=true
    
  • 确保actuator的metrics端点已暴露:
    management.endpoints.web.exposure.include=metrics
    
  • 检查是否存在全局指标过滤规则,避免custom.mrl.produce被误过滤。

5. 并发场景下的注册异常

极端高并发场景下,首次调用可能出现指标注册的竞争问题(虽然Micrometer默认实现是线程安全的,但不排除特殊情况)。可以尝试通过同步初始化或者确保方法调用的线程安全来规避。

内容的提问来源于stack exchange,提问作者Ankit_agile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:42:43