Spring Boot 3에서 Zipkin 사용하기

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.propagationconsume, produce 확인합니다. MSA 환경에서 추적 문맥(Trace context)을 다른 서비스로 전파할 때 HTTP 헤더에 정보를 넣어서 전송합니다. 이 때 HTTP 헤더에서 어떤 이름을 사용할지 여러 선택지가 있습니다. 여기서는 3가지 중 하나를 선택할 수 있습니다.

  1. W3C propagation (기본값)
  2. B3 single header
  3. B3 multiple headers

현재 서비스에서 외부 서비스로 요청할 때 추적 문맥 전파 방식은 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 설정 부분을 발췌한 글입니다.

comments powered by Disqus

Related