监控和指标

从 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 的 参考文档