跳到主要内容

监控与指标

QWen Plus 中英对照 Monitoring and metrics

从 4.2 版本开始,Spring Batch 提供了基于 Micrometer 的批处理监控和指标支持。本节描述了开箱即用提供了哪些指标,以及如何贡献自定义指标。

内置指标

指标收集不需要任何特定配置。框架提供的所有指标都会在 Micrometer 的全局注册表 中以 spring.batch 前缀进行注册。下表详细说明了所有指标:

指标名称类型描述标签
spring.batch.jobTIMER作业执行的持续时间name, status
spring.batch.job.activeLONG_TASK_TIMER当前活跃的作业name
spring.batch.stepTIMER步骤执行的持续时间name, job.name, status
spring.batch.step.activeLONG_TASK_TIMER当前活跃的步骤name
spring.batch.item.readTIMER项读取的持续时间job.name, step.name, status
spring.batch.item.processTIMER项处理的持续时间job.name, step.name, status
spring.batch.chunk.writeTIMER分块写入的持续时间job.name, step.name, status
备注

status 标签的值可以是 SUCCESSFAILURE

自定义指标

如果你希望在自定义组件中使用自己的指标,我们建议直接使用 Micrometer API。以下是如何为 Tasklet 计时的示例:

import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Timer;

import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;

public class MyTimedTasklet implements Tasklet {

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
Timer.Sample sample = Timer.start(Metrics.globalRegistry);
String status = "success";
try {
// do some work
} catch (Exception e) {
// handle exception
status = "failure";
} finally {
sample.stop(Timer.builder("my.tasklet.timer")
.description("Duration of MyTimedTasklet")
.tag("status", status)
.register(Metrics.globalRegistry));
}
return RepeatStatus.FINISHED;
}
}
java

禁用指标

指标收集是一个与日志记录类似的关注点。禁用日志通常通过配置日志库来完成,而指标的处理方式也与此相同。Spring Batch 中没有用于禁用 Micrometer 指标的特性。这应该在 Micrometer 的一侧完成。由于 Spring Batch 会将指标存储在带有 spring.batch 前缀的 Micrometer 全局注册表中,因此您可以使用以下代码片段配置 Micrometer 忽略或拒绝批处理指标:

Metrics.globalRegistry.config().meterFilter(MeterFilter.denyNameStartsWith("spring.batch"))
java

请参阅 Micrometer 的 参考文档 以获取更多详细信息。