@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
相关产品推荐
相关产品推荐

