|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
Micrometer 支持
监控与指标
从 4.2 版本开始,Spring Batch 提供了基于 Micrometer 的批处理监控与指标支持。 本节介绍了框架默认提供了哪些指标,以及如何贡献自定义指标。
内置指标
指标采集默认是关闭的。要启用它,你需要在应用上下文中定义一个 Micrometer
ObservationRegistry Bean。通常还需要指定要使用哪个
ObservationHandler。下面的示例展示了如何注册
DefaultMeterObservationHandler,以便将指标存储到
MeterRegistry 中,例如 Prometheus registry:
@Bean
public ObservationRegistry observationRegistry(MeterRegistry meterRegistry) {
ObservationRegistry observationRegistry = ObservationRegistry.create();
observationRegistry.observationConfig()
.observationHandler(new DefaultMeterObservationHandler(meterRegistry));
return observationRegistry;
}
Spring Batch 专用指标会注册在 spring.batch 前缀之下。
下表详细说明了这些指标:
指标名称 |
类型 |
说明 |
标签 |
|
|
作业执行耗时 |
|
|
|
当前活跃的作业 |
|
|
|
Step 执行耗时 |
|
|
|
当前活跃的 Step |
|
|
|
条目读取耗时 |
|
|
|
条目处理耗时 |
|
|
|
Chunk 写出耗时 |
|
|
|
作业启动次数 |
N/A |
作业和 Step 的 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.x 版本开始,Spring Batch 通过 Micrometer 的 Observation API 提供追踪能力。
默认情况下,追踪是关闭的。要启用它,你需要定义一个
ObservationRegistry Bean,并为其配置支持追踪的
ObservationHandler,例如 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, 并为每次 Step 执行创建一个 span。
如果你没有使用 EnableBatchProcessing 或
DefaultBatchConfiguration,则需要在应用上下文中注册
BatchObservabilityBeanPostProcessor,它会自动为可观测的批处理组件设置
Micrometer 的 observation registry。