Micrometer 支持
监控与指标
自 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 前缀下。下表详细解释了所有指标:
指标名称 |
类型 |
描述 |
标签 |
|
|
任务执行持续时间 |
|
|
|
当前活跃的任务 |
|
|
|
步骤执行持续时间 |
|
|
|
当前活跃步骤 |
|
|
|
项目读取持续时间 |
|
|
|
项目处理持续时间 |
|
|
|
分块写入的持续时间 |
|
|
|
任务启动计数 |
N/A |
用于作业和步骤的 status 标签等于退出状态。对于项的读取、处理和写入,此 status 标签可以是 SUCCESS 或 FAILURE。 |
自定义指标
如果您想在自定义组件中使用自己的指标,我们建议直接使用 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 的 ObservationRegistry Bean,
例如 TracingAwareMeterObservationHandler:
@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)。
如果您不使用 EnableBatchProcessing 或 DefaultBatchConfiguration,则需要在应用程序上下文中注册一个
BatchObservabilityBeanPostProcessor,它将自动在可观测的批量构件中设置 Micrometer 的观测注册表。