[Spring Cloud] Zipkin(집킨) 분산 추적 해보기
Zipkin(집킨)은 스프링클라우드에서 제공하는 분산추적 서비스이다.
Zipkin(집킨)서버와 sleuth(슬루스)가 있으며
집킨서버는 데이터를 보관 및 웹대시보드를 제공하며,
슬루스는 로그 데이터들을 잘 처리하여 집킨에 보내는 역할이다.
집킨서버의 데이터 저장소는
- 인메모리
- mysql
- 카산드라
- elasticSearch
로 설정할 수 있으며 별다른 설정이 없을 경우 인메모리(WAS)에 저장하게 된다.
Zipkin 구동
간단히 도커를 통해 기동하며 port는 default 9411 을 사용한다.
docker run -d -p 9411:9411 openzipkin/zipkin
Pom.xml
zipkin 사용을 위한 라이브러리 추가
위에서 설명했듯이 슬루스란 친구를 통해 데이터를 zipkin서버에 보낸다.
<!-- zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
<version>3.1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-sleuth-zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>3.1.4</version>
</dependency>
properties
집킨 서버와 슬루스의 트랜잭션 전송 비율을 정의한다.
(probability: 1.0은 100%를 의미함)
spring.zipkin.base-url=http://localhost:9411
spring.sleuth.sampler.probability=1.0
테스트
설정 후 springboot 를 실행하면 Log가 달라진 것을 확인할 수 있다.
Zipkin 대시보드를 보면 트레이스들이 잡힌다.
트레이스를 하나 클릭해보면 상세하게 소요시간 스텝이 보이게된다.
추가로 spring.application.name 을 지정하면
spring.application.name=my-app-joon95
로그부분과 대시보드의 serviceName이 변경된다.
마치며
MSA 아키텍처에서는 서비스A에서 B,C,D.. 많은 네트워크 구간들을 통해 서비스를 제공하게되는데, 이때 발생되는 loss를 이러한 Zipkin(집킨)을 통해 파악할 수 있다. 여기서 적용되어있는 redis를 통한 캐시 정책 이 외에도 kafka를 통한 메시지큐서비스로 SAGA패턴을 구성해 볼 예정이다.
스프링클라우드가 얼마나 많은 고민들을 하여 라이브러리를 제공하게 되었는지 그 노력은 정말 대단하다.