Monitoring and metrics

自 4.2 版本以来,Spring Batch 提供对基于 Micrometer 的批处理监控和指标的支持。本部分介绍了哪些指标开箱即用,以及如何提供自定义指标。

Built-in metrics

指标收集不需要任何特定配置。框架提供的所有指标均注册在 Micrometer’s global registry 中,其前缀为 spring.batch。下表详细解释了所有指标:

Metric Name

Type

Description

Tags

spring.batch.job

TIMER

Duration of job execution

name, status

spring.batch.job.active

LONG_TASK_TIMER

Currently active jobs

name

spring.batch.step

TIMER

Duration of step execution

name, job.name, status

spring.batch.step.active

LONG_TASK_TIMER

Currently active step

name

spring.batch.item.read

TIMER

Duration of item reading

job.name, step.name, status

spring.batch.item.process

TIMER

Duration of item processing

job.name, step.name, status

spring.batch.chunk.write

TIMER

Duration of chunk writing

job.name, step.name, status

status`标记可以是`SUCCESS`或`FAILURE

Custom metrics

如果您想在自定义组件中使用自己的指标,我们建议直接使用 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;
	}
}

Disabling Metrics

指标收集与日志记录类似。禁用日志通常是通过配置日志记录库来完成的,对于指标也是如此。Spring Batch 中没有用于禁用 Micrometer 指标的功能。应该在 Micrometer 端执行此操作。由于 Spring Batch 使用 spring.batch 前缀将指标存储在 Micrometer 的全局注册表中,您可以使用以下代码片段配置 Micrometer 以忽略或拒绝批处理指标:

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

有关详细信息,请参阅 Micrometer 的 reference documentation