Spring Boot集成Prometheus与Grafana遇监控指标异常求助
email_time相关指标 排查与解决步骤
补全依赖
确保项目依赖中包含AOP和Micrometer Prometheus适配包(以Maven为例):<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>Spring Boot 2.4.x中,
TimedAspect需要AOP依赖才能完成动态代理,缺少则切面不会生效。确认切面调用方式
Spring AOP基于动态代理实现,同一类内部方法调用sendEmail不会触发切面,必须通过Spring容器注入的代理对象调用(比如控制器注入MyService后调用sendEmail)。同时确保启动类添加了@EnableAspectJAutoProxy注解,开启切面代理支持。正确识别Prometheus指标名
Micrometer会自动将@Timed的value中的.替换为_,并生成带后缀的指标(如email_time_seconds_count、email_time_seconds_sum、email_time_seconds_max),你需要在/management/prometheus端点中查找这类带后缀的指标,而非直接的email_time。优化注解配置
可补充注解参数确保指标采集逻辑符合预期:@Timed(value = "email.time", description = "发送邮件接口耗时统计", longTask = false)longTask=false(默认值)适用于短任务,会生成直方图类型的耗时指标。
排查与解决步骤
先验证Prometheus采集状态
- 访问Prometheus UI(默认
http://localhost:9090),执行查询:
若结果为up{job="你的Spring Boot服务Job名"}1,说明Prometheus能正常拉取服务;若为0或无结果,检查Prometheus的scrape_configs配置:
确保scrape_configs: - job_name: "spring-boot-app" metrics_path: "/management/prometheus" # 匹配你的Actuator基础路径 static_configs: - targets: ["localhost:8089"]metrics_path和targets与服务配置完全一致。 - 再查询基础指标(如
jvm_memory_used_bytes),确认Prometheus已成功采集到服务数据。
- 访问Prometheus UI(默认
适配仪表盘的指标命名
你导入的spring-boot-statistics.json可能基于旧版Micrometer/Spring Boot的指标命名规则,与2.4.x版本不兼容。比如旧版指标jvm_memory_used在新版中变为jvm_memory_used_bytes,需手动编辑仪表盘面板的PromQL查询,替换为当前Prometheus中存在的指标名。检查时间范围与数据源关联
- 确保Grafana选择的时间范围覆盖你的定时任务执行时段(比如选择“最近1小时”)。
- 进入面板编辑页,确认每个面板都关联了正确的Prometheus数据源。
内容的提问来源于stack exchange,提问作者Wrapper

