Trace Id, Span Id
하나의 요청에서 여러 마이크로 서비스의 참조가 필요할 때 전체적으로 동일한 trace Id를 사용하고, 서비스마다 다른 sapn Id를 사용합니다. 이를 통해 문제가 있는 trace Id 요청을 트레이싱해서 문제가 있는 서비스를 찾을 수 있습니다.
Micrometer
SpringBoot 2에서는 spring cloud sleuth를 통해 spring boot에서 zipkin으로 span id, trace id 전송해 분산 추적을 진행했는데
이와 같이 순환참조가 일어나는 구조와 Spring과 SpringBoot에서는 트레이싱 기능일 지원하지 않는 구조로 인해
SpringBoot 3에서는 Sleuth의 트레이싱 기능이 Micrometer로 이관되었습니다.
https://techblog.lycorp.co.jp/ko/how-to-migrate-to-spring-boot-3
zipkin
micrometer로 생성한 trace Id, span Id 정보를 저장하고 마이크로 서비스별, trace Id 별 검색을 통해 서비스 흐름을 시각화합니다.
zipkin 실행
docker run -d -p 9411:9411--restart=always openzipkin/zipkin
의존성 추가
actuator 의존성을 추가해야 tracing, zipkin 관련 정보에 접근할 수 있습니다.
// actuator 의존성 추가해야 tracing, zipkin 관련 활용 가능
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
implementation group: 'io.micrometer', name: 'micrometer-observation'
implementation group: 'io.micrometer', name: 'micrometer-tracing-bridge-brave'
implementation group: 'io.zipkin.brave', name: 'brave-instrumentation-spring-web'
implementation group: 'io.zipkin.reporter2', name: 'zipkin-reporter-brave'
implementation group: 'io.github.openfeign', name: 'feign-micrometer'
application.yml 설정
spring:
application:
name: user-service
zipkin:
base-url: http://localhost:9411
enabled: true
management:
tracing:
sampling:
probability: 1.0
propagation:
consume: B3
produce: B3_MULTI
zipkin:
tracing:
endpoint: "http://localhost:9411/api/v2/spans"
서비스 연쇄되는 API 호출
user service에서 사용자의 주문 목록을 조회하기 위해 order service까지 호출하는 사용자 정보 API 호출을 해보겠습니다.