@Timed
注解主要用于监控方法的执行时间和调用次数,它通常与 Micrometer 和 Spring Boot Actuator 集成,能够自动将方法执行的性能数据收集上报到监控系统(如 Prometheus、Graphite、InfluxDB 等)。
使用方法
1. 添加依赖
如果你使用的是 Spring Boot,可以添加如下依赖(Spring Boot 2.0+ 已经内置了 Micrometer 支持):
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
如果需要 Prometheus 作为监控后端,还需要添加:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2. 使用 @Timed
注解
在你的服务类中,对需要监控执行时间的方法添加 @Timed
注解。例如:
import io.micrometer.core.annotation.Timed;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@Timed(value = "myService.process", description = "Time taken to process data")
public void process() {
// 模拟耗时操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
解释:
-
value
属性指定了指标名称,这里为myService.process
。 -
description
属性用于描述该指标的含义。 -
当
process()
方法执行时,Micrometer 会自动记录它的执行时间和调用次数,并生成相应的指标。
3. 集成到监控系统
3.1 启用 Spring Boot Actuator
在 application.properties
或 application.yml
中配置 Actuator 端点,例如启用 Prometheus 端点:
management:
endpoints:
web:
exposure:
include: "health,info,prometheus"
metrics:
export:
prometheus:
enabled: true
3.2 配置 Prometheus(或其他监控系统)
-
如果使用 Prometheus,在 Prometheus 配置文件中添加你的应用的 Actuator Prometheus 端点作为监控目标。例如:
scrape_configs: - job_name: 'my-application' metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080']
-
启动应用后,访问
http://localhost:8080/actuator/prometheus
,可以看到类似下面的指标数据:# HELP myService_process_seconds Time taken to process data # TYPE myService_process_seconds summary myService_process_seconds_count 5.0 myService_process_seconds_sum 5.0 myService_process_seconds{quantile="0.5"} 1.0 myService_process_seconds{quantile="0.9"} 1.0 myService_process_seconds{quantile="0.99"} 1.0
这些指标数据由 Micrometer 自动采集,并通过 Actuator 提供。
3.3 实时监控和告警
-
在 Prometheus 收集到这些指标后,你可以使用 Grafana 构建实时仪表板,监控关键方法的执行时间、调用频率等指标。
-
同时,还可以在 Prometheus 配置告警规则,针对某个方法的响应时间异常等情况触发告警。
总结
-
@Timed 注解用于自动记录方法执行时间和调用次数,降低手动采集指标的复杂度。
-
它与 Micrometer 集成,可以将数据上报到 Prometheus 等监控系统。
-
配置 Spring Boot Actuator 和相应的监控后端后,你就可以实时监控方法性能,为系统优化和故障排查提供数据支持。