监控和指标

本站( springdoc.cn )中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

自 4.2 版起,Spring Batch 基于 Micrometer 提供对 batch 监控和指标的支持。本节将介绍开箱即用的指标,以及如何提供自定义指标。

内置指标

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

指标名称

Type

说明

标签

spring.batch.job

TIMER

job 执行时间

name, status

spring.batch.job.active

LONG_TASK_TIMER

当前活跃的 job

name

spring.batch.step

TIMER

step 执行时间

name, job.name, status

spring.batch.step.active

LONG_TASK_TIMER

当前活跃的 step

name

spring.batch.item.read

TIMER

item 读取时间

job.name, step.name, status

spring.batch.item.process

TIMER

item 处理时间

job.name, step.name, status

spring.batch.chunk.write

TIMER

chunk(分块)写入时间

job.name, step.name, status

status tag 可以是 SUCCESS(成功)或 FAILURE(失败)。

自定义指标

如果你想在自定义组件中使用自己的指标,我们建议你直接使用 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 忽略或拒绝 batch 指标:

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

详情请参见 Micrometer 的 参考文档

追踪

从第 5 版开始,Spring Batch 可通过 Micrometer 的 Observation API 提供追踪功能。默认情况下,使用 @EnableBatchProcessing 时会启用追踪功能。Spring Batch 会为每个 job 的执行创建 trace (追踪),并为每个 step 的执行创建 span。

如果不使用 EnableBatchProcessing,则需要在 application context 中注册 BatchObservabilityBeanPostProcessor,它将在 job 和 step bean 中自动设置 Micrometer 的可观察性。