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 为前缀注册。下表详细解释了所有度量:

度量名称

类型

描述

标签

spring.batch.job

TIMER

作业执行时长

name, status

spring.batch.job.active

LONG_TASK_TIMER

当前活跃的作业

name

spring.batch.step

TIMER

步骤执行时长

name, job.name, status

spring.batch.step.active

LONG_TASK_TIMER

当前活跃的步骤

name

spring.batch.item.read

TIMER

项目读取时长

job.name, step.name, status

spring.batch.item.process

TIMER

项目处理时长

job.name, step.name, status

spring.batch.chunk.write

TIMER

块写入时长

job.name, step.name, status

spring.batch.job.launch.count

COUNTER

作业启动计数

不适用

作业和步骤的 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 将为每个作业执行创建一个追踪,并为每个步骤执行创建一个 span。

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

© . This site is unofficial and not affiliated with VMware.