Spring Boot 3.x 환경에서 Zipkin을 이용한 분산 추적 시스템을 구축하는 방법과 발생할 수 있는 문제점 정리.
Spring Boot 3.x로 버전업되면서 분산 추적 시스템에도 큰 변화가 있었습니다. 이전 버전에서는 Spring Cloud Sleuth를 사용했지만, 3.x 버전부터는 Micrometer Observation API와 Micrometer Tracing을 기반으로 하는 새로운 방식으로 변경되었습니다.
spring-cloud-starter-sleuth와 spring-cloud-starter-zipkin 의존성이 더 이상 사용되지 않음먼저 Zipkin 서버를 Docker Compose로 구성해보겠습니다.
services:
zipkin:
container_name: zipkin
image: openzipkin/zipkin
ports:
- "9411:9411"
networks:
- app_network
networks:
app_network:
driver: bridge
이 설정으로 Zipkin 서버를 로컬에서 실행할 수 있으며, http://localhost:9411로 Zipkin UI에 접근할 수 있습니다.
Spring Boot 3.x에서 Zipkin을 연동하기 위해서는 다음과 같은 의존성을 추가해야 합니다.
dependencies {
// 기존 의존성들...
// Zipkin 관련 의존성
implementation 'io.micrometer:micrometer-observation'
implementation 'io.micrometer:micrometer-tracing'
implementation 'io.micrometer:micrometer-tracing-bridge-brave'
implementation 'io.micrometer:micrometer-registry-prometheus'
implementation 'io.zipkin.reporter2:zipkin-sender-urlconnection'
implementation 'io.zipkin.reporter2:zipkin-reporter-brave'
}
micrometer-observation
micrometer-tracing
Tracer, Span, SpanBuilder 등 추적에 필요한 인터페이스 포함micrometer-tracing-bridge-brave
zipkin-sender-urlconnection
zipkin-reporter-brave
# 애플리케이션 이름 설정
spring.application.name=competition-service
# Zipkin 구성
management.tracing.sampling.probability=1.0
management.zipkin.tracing.endpoint=http://localhost:9411/api/v2/spans
# Actuator 설정
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
management.endpoint.prometheus.enabled=true
# 디버깅을 위한 로그 설정
logging.level.io.micrometer.tracing=DEBUG
spring.application.name: Zipkin에서 서비스를 식별하는 데 사용management.tracing.sampling.probability: 추적 샘플링 비율 (1.0은 모든 요청 추적)management.zipkin.tracing.endpoint: Zipkin API 엔드포인트 URLSpring Boot 3.x에서 Zipkin을 이용한 분산 추적 구현은 이전 버전과 크게 달라졌습니다. Micrometer Observation API와 Tracing 기반의 새로운 접근 방식을 이해하고, 필요한 의존성을 정확히 구성하는 것이 중요합니다.
특히 micrometer-observation, micrometer-tracing, zipkin-sender-urlconnection과 같은 핵심 의존성이 필요하며, 이들이 함께 작동하여 애플리케이션의 추적 데이터를 수집하고 Zipkin 서버로 전송하는 전체 파이프라인을 구성합니다.