Spring에서 Zipkin을 사용하기 위해 구글링하면 Spring Cloud Sleuth를 이용한 설정이 가장 많이 언급되는데요. 애석하게도 Sleuth 공식 문서를 보면 Spring Boot 3 버전부터 사용할 수 없다는 공지가 있습니다. 기존 프로젝트는 Micrometer Tracing으로 이전한다고 하네요.
다행히 Spring Boot 공식 문서 13.8. Tracing에 다양한 분산 추적 라이브러리와 연동하는 방법이 설명되어있습니다. 다양한 구현체를 선택할 수 있지만 가장 대표적인 Brave + Zipkin 구성을 설명하겠습니다.
아래와 같이 의존성을 추가합니다. 이 때 actuator가 반드시 필요하므로 빠뜨리면 안됩니다. (구현체별 필요한 의존성은 13.8.3. Tracer Implementations 에서 확인하실 수 있습니다.)
다음으로 프로퍼티 설정이 필요합니다. application.yml(또는 application.properties) 파일을 다음과 같이 설정합니다.
먼저 Zipkin에서 서비스를 구분할 이름인 spring.application.name을 설정해줍니다. 그 다음 management.tracing.sampling.probability 값으로 샘플링할 비율을 설정할 수 있는데 모든 로그를 전부 샘플링하고 싶다면 1.0으로 설정합니다. (기본값은 0.1 입니다. probability sampling 참고)
빠뜨리면 안되는 설정인 management.propagation의 consume, produce 확인합니다. MSA 환경에서 추적 문맥(Trace context)을 다른 서비스로 전파할 때 HTTP 헤더에 정보를 넣어서 전송합니다. 이 때 HTTP 헤더에서 어떤 이름을 사용할지 여러 선택지가 있습니다. 여기서는 3가지 중 하나를 선택할 수 있습니다.
현재 서비스에서 외부 서비스로 요청할 때 추적 문맥 전파 방식은 produce, 외부 서비스에서 현재 서비스로 보내는 요청의 추적 문맥을 해석하는 방식은 consume으로 따로 설정할 수 있습니다.
로그를 전송할 zipkin.tracing.endpoint를 설정합니다. 해당 URL은 Zipkin 공식 v2 API 명세에서 확인할 수 있습니다. 미리 띄워놓은 Zipkin 서버의 URL을 설정하면 되겠습니다.
마지막으로 로컬 머신의 로그에서 traceId, spanId를 확인하기 위해 loggin.pattern.level을 변경합니다. logback.xml 또는 logback-spring.xml을 사용하셔도 좋습니다. 위 예제 코드에서는 traceId, spanId를 함께 사용했는데 이외에도 parentId, sampled를 확인할 수 있습니다.
최근에 릴리즈한 Spring Boot 3버전에서 Zipkin과 연동하는 방법에 대해 정리된 글이 없는 것 같아 짧게 정리했습니다. 잘못된 부분이나 덧붙일 의견을 댓글로 주시면 정말 감사드리겠습니다. 🤗
이 글은 "Zipkin으로 Armeria와 Spring 함께 추적하기"에서 Spring Boot 3의 Zipkin 설정 부분을 발췌한 글입니다.
2023-07-19T16:05:51+09:00 작성
'기술' 카테고리의 다른 글
| Armeria의 request scoping과 leak 탐지 (0) | 2025.12.18 |
|---|---|
| ExecutorService graceful shutdown의 정석은? (0) | 2025.12.18 |
| Zipkin으로 Armeria와 Spring 함께 추적하기 (0) | 2025.12.18 |
| Armeria에서 MDC를 사용해도 될까? (0) | 2025.12.18 |
| Armeria의 WebClient를 더 쉽게 테스트하기 (0) | 2025.12.18 |