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

@Timed注解指标未在Prometheus端点显示问题求助

问题解决:@Timed注解指标未出现在Prometheus中

核心原因

Spring Boot 3.x搭配Micrometer时,@Timed注解默认只对带@RequestMapping(或@GetMapping、@PostMapping这类派生注解)的控制器接口方法生效。对于没有请求映射注解的普通方法,必须通过AspectJ切面开启支持,否则注解不会触发指标采集。

具体修复步骤

1. 新增Metrics配置类,开启AOP支持

创建配置类注册TimedAspect切面,让Micrometer能拦截所有标了@Timed的方法:

import io.micrometer.core.aop.TimedAspect;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy
public class MetricsConfig {

    @Bean
    public TimedAspect timedAspect(MeterRegistry meterRegistry) {
        return new TimedAspect(meterRegistry);
    }
}
  • @EnableAspectJAutoProxy:开启Spring的AspectJ自动代理能力,让切面逻辑能生效。
  • TimedAspect:Micrometer提供的切面类,负责处理@Timed注解,生成延迟指标。

2. 确保方法被调用过

指标只有在方法至少被调用一次后才会生成并暴露到端点。先触发myMethod的调用,再去/actuator/prometheus或/actuator/metrics里查找。

3. 检查指标命名

生成的Prometheus指标前缀是my_method_seconds,包含计数、总耗时、分位数等维度,直接搜索这个前缀就能找到对应的指标。

4. 内部调用注意事项

如果myMethod是被同一个类里的其他方法调用(内部调用),AOP代理不会生效。需要通过Spring上下文获取Bean实例调用,或者用@Autowired注入自身Bean来调用方法。

配置与依赖验证

你的application.yml和pom.xml配置已经符合要求:

  • Prometheus导出已开启,端点也全部暴露
  • actuator和micrometer版本匹配(Spring Boot 3.1.x对应Micrometer 1.11.x),无需调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:52:46