14. Monitoring and metrics
버전 4.2부터 스프링 배치는 마이크로미터(Micrometer) 기반의 배치 모니터링 및 메트릭을 지원한다. 이 장에서는 기본적으로 제공되는 메트릭과 커스텀 메트릭을 제공하는 방법을 설명한다.
14.1. Built-in metrics
메트릭 수집에는 특정 구성이 필요하지 않다. 프레임워크에서 제공하는 모든 메트릭은 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 |
status
태그는SUCCESS
또는FAILURE
일 수 있다.
14.2. Custom metrics
커스텀 컴포넌트에서 자체 메트릭을 사용하려면 마이크로미터 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 {
// 어떤 작업
} catch (Exception e) {
// 예외 핸들
status = "failure";
} finally {
sample.stop(
Timer.builder("my.tasklet.timer")
.description("Duration of MyTimedTasklet")
.tag("status", status)
.register(Metrics.globalRegistry)
);
}
return RepeatStatus.FINISHED;
}
}
14.3. Disabling Metrics
메트릭 수집은 로깅과 유사한 문제가 있다. 로그 비활성화는 일반적으로 로깅 라이브러리를 구성하여 수행되며, 이는 메트릭에도 다르지 않다. 스프링 배치에는 마이크로미터의 메트릭을 비활성화하는 기능이 없다. 그러므로 이는 마이크로미터 측에서 수행되어야 한다. 스프링 배치는 spring.batch
접두사를 사용하여 마이크로미터의 전역 레지스트리에 메트릭을 저장하므로 다음 스니펫을 사용하여 배치 메트릭을 무시하거나 거부하도록 마이크로미터를 구성할 수 있다:
Metrics.globalRegistry.config().meterFilter(MeterFilter.denyNameStartsWith("spring.batch"))
자세한 내용은 마이크로미터의 문서를 참고하자.