如何在Spring Boot Actuator指标结果中添加自定义批处理统计字段?
嘿,刚好做过类似的批处理任务指标统计,给你分享下具体的实现步骤,主要围绕你提到的CounterService和GaugeService来做,分两种场景处理不同类型的指标:
一、用
CounterService统计累计类指标 CounterService适合统计累计发生次数,比如批处理任务的启动数、完成数、失败数这类需要累加的数值。
实现步骤:
- 注入
CounterService:在你的批处理任务类、监听器或者组件里注入该服务:@Autowired private CounterService counterService; - 在关键节点调用计数方法:
- 每次批处理任务启动时,累计启动数:
counterService.increment("batch.task.started"); - 任务成功完成时,累计完成数:
counterService.increment("batch.task.completed"); - 任务失败时,累计失败数:
counterService.increment("batch.task.failed"); - 如果需要重置某个计数器(比如每日清零),可以调用:
counterService.reset("batch.task.failed");
- 每次批处理任务启动时,累计启动数:
二、用
GaugeService统计瞬时类指标 GaugeService适合统计瞬时状态值,比如当前正在运行的批处理任务数、单次任务处理的记录数、任务耗时这类动态变化的数值。
实现步骤:
- 注入
GaugeService:同样在相关组件里注入:@Autowired private GaugeService gaugeService; - 在状态变化时提交数值:
- 统计当前运行的任务数:可以用原子类维护计数,任务启动时加1、结束时减1,然后提交:
private AtomicInteger runningTaskCount = new AtomicInteger(0); // 任务启动时 int currentCount = runningTaskCount.incrementAndGet(); gaugeService.submit("batch.task.running", currentCount); // 任务结束时 currentCount = runningTaskCount.decrementAndGet(); gaugeService.submit("batch.task.running", currentCount); - 统计单次任务处理的记录数:任务完成后提交本次处理的数量:
gaugeService.submit("batch.task.processed.records", processedRecordNum);
- 统计当前运行的任务数:可以用原子类维护计数,任务启动时加1、结束时减1,然后提交:
三、完整示例:批处理任务指标监听器
可以把指标统计逻辑封装成一个监听器类,在批处理任务的各个生命周期节点调用:
@Component public class BatchMetricsTracker { private final CounterService counterService; private final GaugeService gaugeService; private final AtomicInteger runningTasks = new AtomicInteger(0); // 构造注入(推荐) @Autowired public BatchMetricsTracker(CounterService counterService, GaugeService gaugeService) { this.counterService = counterService; this.gaugeService = gaugeService; } // 任务开始触发 public void onTaskInitiated() { counterService.increment("batch.task.initiated"); int current = runningTasks.incrementAndGet(); gaugeService.submit("batch.task.running", current); } // 任务成功完成触发 public void onTaskCompleted(long processedRecords) { counterService.increment("batch.task.succeeded"); int current = runningTasks.decrementAndGet(); gaugeService.submit("batch.task.running", current); // 提交本次任务处理的记录数 gaugeService.submit("batch.task.processed.records", processedRecords); } // 任务失败触发 public void onTaskFailed() { counterService.increment("batch.task.failed"); int current = runningTasks.decrementAndGet(); gaugeService.submit("batch.task.running", current); } }
四、配置与查看指标
配置Actuator端点:
- 如果是Spring Boot 1.x:默认
/metrics端点是开放的,直接访问即可看到所有指标 - 如果是Spring Boot 2.x+:需要在
application.properties里配置端点暴露:# 暴露metrics端点 management.endpoints.web.exposure.include=metrics # 可选:给指标添加全局标签,方便区分不同应用 management.metrics.tags.application=your-batch-app
查看指标:
- 访问
http://localhost:8080/actuator/metrics(替换成你的应用地址和端口),可以看到所有已注册的指标列表,包括你自定义的batch.task.*系列指标 - 要查看某个指标的详细数据,直接访问对应的URL,比如
http://localhost:8080/actuator/metrics/batch.task.completed
五、小提示
- 指标命名尽量规范,用
业务域.模块.指标名的格式(比如batch.task.started),方便后续过滤和分析 CounterService的递增操作是线程安全的,不用额外加锁GaugeService提交的是瞬时值,所以每次状态变化都需要重新提交,否则指标不会更新
内容的提问来源于stack exchange,提问作者Bhushan Uniyal
相关产品推荐
相关产品推荐

