跳到主要内容
版本:6.0.2

Micrometer 支持

DeepSeek V3 中英对照 Micrometer support

监控与指标

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

内置指标

默认情况下指标收集功能处于禁用状态。如需启用,您需要在应用程序上下文中定义一个 Micrometer ObservationRegistry bean。通常您需要指定要使用的 ObservationHandler。以下示例展示了如何注册 DefaultMeterObservationHandler,该处理器会将指标存储到 MeterRegistry(例如 Prometheus 注册表)中:

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

Spring Batch 特定的指标注册在 spring.batch 前缀下。下表详细解释了所有指标:

指标名称类型描述标签
spring.batch.jobTIMER作业执行时长name, status
spring.batch.job.activeLONG_TASK_TIMER当前活跃的作业name
spring.batch.stepTIMER步骤执行时长name, job.name, status
spring.batch.step.activeLONG_TASK_TIMER当前活跃的步骤name
spring.batch.item.readTIMER项目读取时长job.name, step.name, status
spring.batch.item.processTIMER项目处理时长job.name, step.name, status
spring.batch.chunk.writeTIMER块写入时长job.name, step.name, status
spring.batch.job.launch.countCOUNTER作业启动次数N/A
备注

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

自定义指标

若要在自定义组件中使用自定义指标,我们建议直接使用 Micrometer API。以下是一个如何为 Tasklet 计时的示例:

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 提供追踪功能。默认情况下,追踪功能处于禁用状态。要启用它,您需要定义一个配置了支持追踪的 ObservationHandler(例如 TracingAwareMeterObservationHandler)的 ObservationRegistry bean:

@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 将为每次作业执行创建一个跟踪记录,并为每个步骤执行创建一个跨度。

如果你不使用 EnableBatchProcessingDefaultBatchConfiguration,则需要在应用程序上下文中注册一个 BatchObservabilityBeanPostProcessor,它会在可观察的批处理构件中自动设置 Micrometer 的观察注册表。