对于最新稳定版本,请使用 Spring Batch 文档 6.0.3spring-doc.cadn.net.cn

监控与指标

自 4.2 版本起,Spring Batch 基于 Micrometer 提供了对批量作业监控和指标的支持。本节将介绍默认提供的指标内容,以及如何贡献自定义指标。spring-doc.cadn.net.cn

内置指标

指标收集不需要任何特定配置。框架提供的所有指标都会注册到 Micrometer 的全局注册表 中,并使用 spring.batch 作为前缀。下表详细说明了所有指标:spring-doc.cadn.net.cn

指标名称spring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

描述spring-doc.cadn.net.cn

标签spring-doc.cadn.net.cn

spring.batch.jobspring-doc.cadn.net.cn

TIMERspring-doc.cadn.net.cn

任务执行持续时间spring-doc.cadn.net.cn

name, statusspring-doc.cadn.net.cn

spring.batch.job.activespring-doc.cadn.net.cn

LONG_TASK_TIMERspring-doc.cadn.net.cn

当前活跃的职位spring-doc.cadn.net.cn

namespring-doc.cadn.net.cn

spring.batch.stepspring-doc.cadn.net.cn

TIMERspring-doc.cadn.net.cn

步骤执行持续时间spring-doc.cadn.net.cn

name, job.name, statusspring-doc.cadn.net.cn

spring.batch.step.activespring-doc.cadn.net.cn

LONG_TASK_TIMERspring-doc.cadn.net.cn

当前活跃步骤spring-doc.cadn.net.cn

namespring-doc.cadn.net.cn

spring.batch.item.readspring-doc.cadn.net.cn

TIMERspring-doc.cadn.net.cn

项目读取持续时间spring-doc.cadn.net.cn

job.name, step.name, statusspring-doc.cadn.net.cn

spring.batch.item.processspring-doc.cadn.net.cn

TIMERspring-doc.cadn.net.cn

项目处理持续时间spring-doc.cadn.net.cn

job.name, step.name, statusspring-doc.cadn.net.cn

spring.batch.chunk.writespring-doc.cadn.net.cn

TIMERspring-doc.cadn.net.cn

分块写入的持续时间spring-doc.cadn.net.cn

job.name, step.name, statusspring-doc.cadn.net.cn

status 标签可以是 SUCCESSFAILURE

自定义指标

如果您想在自定义组件中使用自己的指标,我们建议直接使用 Micrometer API。以下是一个为 Tasklet 计时的示例:spring-doc.cadn.net.cn

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;
	}
}

禁用指标

指标收集是一个与日志记录类似的问题。禁用日志通常是通过配置日志库完成的,指标的处理方式也并无不同。Spring Batch 中没有提供禁用 Micrometer 指标的功能,这需要在 Micrometer 端进行配置。由于 Spring Batch 会将指标存储到 Micrometer 的全局注册表中,并使用 spring.batch 作为前缀,因此您可以通过以下代码片段配置 Micrometer 以忽略或拒绝批处理指标:spring-doc.cadn.net.cn

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

查看更多详情,请参阅 Micrometer 的参考文档spring-doc.cadn.net.cn