监控和指标

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

内置指标

指标收集不需要任何特定配置。框架提供的所有指标都注册在 Micrometer 的全局注册表 中,使用 spring.batch 前缀。下表详细解释了所有指标

指标名称

类型

描述

标签

spring.batch.job

TIMER

作业执行的持续时间

name, status

spring.batch.job.active

LONG_TASK_TIMER

当前活动的作业

name

spring.batch.step

TIMER

步骤执行的持续时间

name, job.name, status

spring.batch.step.active

LONG_TASK_TIMER

当前活动的步骤

name

spring.batch.item.read

TIMER

读取项目的持续时间

job.name, step.name, status

spring.batch.item.process

TIMER

处理项目的持续时间

job.name, step.name, status

spring.batch.chunk.write

TIMER

写入块的持续时间

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

禁用指标

指标收集与日志记录类似。禁用日志通常通过配置日志库来完成,指标也不例外。Spring Batch 中没有禁用 Micrometer 指标的功能。这应该在 Micrometer 方面完成。由于 Spring Batch 将指标存储在 Micrometer 的全局注册表中,使用 spring.batch 前缀,您可以配置 micrometer 忽略或拒绝批处理指标,使用以下代码段

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

有关更多详细信息,请参阅 Micrometer 的 参考文档