監控與指標

自 4.2 版本起,Spring Batch 開始支援基於 Micrometer 的批次監控與指標。本節說明框架預設提供的指標,以及如何貢獻自訂指標。

內建指標

指標收集不需要任何特定設定。框架提供的所有指標都已在 Micrometer 的全域註冊表 中以 spring.batch 前綴註冊。下表詳細說明了所有指標

指標名稱

類型

描述

標籤

spring.batch.job

TIMER

Job 執行的持續時間

name, status

spring.batch.job.active

LONG_TASK_TIMER

目前活動中的 Job

name

spring.batch.step

TIMER

Step 執行的持續時間

name, job.name, status

spring.batch.step.active

LONG_TASK_TIMER

目前活動中的 Step

name

spring.batch.item.read

TIMER

Item 讀取的持續時間

job.name, step.name, status

spring.batch.item.process

TIMER

Item 處理的持續時間

job.name, step.name, status

spring.batch.chunk.write

TIMER

Chunk 寫入的持續時間

job.name, step.name, status

status 標籤可以是 SUCCESSFAILURE

自訂指標

如果您想在自訂組件中使用自己的指標,我們建議直接使用 Micrometer API。以下是如何計時 Tasklet 的範例

import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Timer;

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 {

	@Override
	public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
		Timer.Sample sample = Timer.start(Metrics.globalRegistry);
		String status = "success";
		try {
			// do some work
		} catch (Exception e) {
			// handle exception
			status = "failure";
		} finally {
			sample.stop(Timer.builder("my.tasklet.timer")
					.description("Duration of MyTimedTasklet")
					.tag("status", status)
					.register(Metrics.globalRegistry));
		}
		return RepeatStatus.FINISHED;
	}
}

停用指標

指標收集與記錄類似。停用記錄通常透過設定記錄庫來完成,指標也是如此。Spring Batch 中沒有停用 Micrometer 指標的功能。這應該在 Micrometer 端完成。由於 Spring Batch 將指標儲存在 Micrometer 的全域註冊表中,並以 spring.batch 前綴開頭,因此您可以設定 micrometer 以忽略或拒絕批次指標,如下列程式碼片段所示

Metrics.globalRegistry.config().meterFilter(MeterFilter.denyNameStartsWith("spring.batch"))

請參閱 Micrometer 的參考文件以取得更多詳細資訊。