Micrometer 支持

监控与指标

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

内置指标

默认情况下,指标收集功能是禁用的。要启用它,您需要在应用程序上下文中定义一个 Micrometer ObservationRegistry Bean。通常,您需要指定使用哪个 ObservationHandler。以下示例展示了如何注册一个 DefaultMeterObservationHandler, 该注册表会将指标存储在 MeterRegistry 中(例如,Prometheus 注册表):spring-doc.cadn.net.cn

@Bean
public ObservationRegistry observationRegistry(MeterRegistry meterRegistry) {
    ObservationRegistry observationRegistry = ObservationRegistry.create();
    observationRegistry.observationConfig()
        .observationHandler(new DefaultMeterObservationHandler(meterRegistry));
    return observationRegistry;
}

Spring Batch 特定的指标注册在 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

spring.batch.job.launch.countspring-doc.cadn.net.cn

COUNTERspring-doc.cadn.net.cn

任务启动计数spring-doc.cadn.net.cn

N/Aspring-doc.cadn.net.cn

用于作业和步骤的 status 标签等于退出状态。对于项的读取、处理和写入,此 status 标签可以是 SUCCESSFAILURE

自定义指标

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

import io.micrometer.observation.Observation;
import io.micrometer.observation.ObservationRegistry;

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 {

    private ObservationRegistry observationRegistry;

    public MyTimedTasklet(ObservationRegistry observationRegistry) {
        this.observationRegistry = observationRegistry;
    }

	@Override
	public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
		Observation observation = Observation.start("my.tasklet.step", this.observationRegistry);
		try (Observation.Scope scope = observation.openScope()) {
			// do some work
		    return RepeatStatus.FINISHED;
		} catch (Exception e) {
			// handle exception
            observation.error(exception);
		} finally {
			observation.stop();
		}
	}
}

追踪

自版本 5 起,Spring Batch 通过 Micrometer 的 Observation API 提供链路追踪功能。默认情况下,链路追踪是禁用的。 要启用它,您需要定义一个配置了支持链路追踪的 ObservationHandlerObservationRegistry Bean, 例如 TracingAwareMeterObservationHandlerspring-doc.cadn.net.cn

@Bean
public ObservationRegistry observationRegistry(MeterRegistry meterRegistry, Tracer tracer) {
    DefaultMeterObservationHandler observationHandler = new DefaultMeterObservationHandler(meterRegistry);
    ObservationRegistry observationRegistry = ObservationRegistry.create();
    observationRegistry.observationConfig()
            .observationHandler(new TracingAwareMeterObservationHandler<>(observationHandler, tracer));
    return observationRegistry;
}

完成上述配置后,Spring Batch 将为每次作业执行创建一个跟踪(trace),并为每个步骤执行创建一个跨度(span)。spring-doc.cadn.net.cn

如果您不使用 EnableBatchProcessingDefaultBatchConfiguration,则需要在应用程序上下文中注册一个 BatchObservabilityBeanPostProcessor,它将自动在可观测的批量构件中设置 Micrometer 的观测注册表。spring-doc.cadn.net.cn