본문 바로가기

Backend/MSA

241126 분산 추적 (Spring Cloud Sleuth) 및 로깅 (Zipkin) 실습 TIL

분산 추적이란?

분산 시스템에서 서비스 간의 요청 흐름을 추적하고 모니터링하는 방법이다. 

각 서비스의 호출 관계와 성능을 시각화하여 문제를 진단하고 해결할 수 있도록 돕는다.

 

- 트레이스(Trace) : 하나의 요청이 시작부터 끝까지 각 서비스를 거치는 요청의 전체 흐름을 나타낸다.

하나의 트레이스는 여러 개의 스팬으로 구성된다.

- 스팬(Span) : 분산 추적에서 가장 작은 단위로, 특정 서비스 내에서의 개별 작업 또는 요청을 나타낸다.

- 컨텍스트(Context) : 요청이 서비스 간에 전달될 때 함께 전파되어, 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있게 한다. 서비스 호출 간의 컨텍스트를 유지함으로써, 분산 시스템 전체에서 일관된 추적이 가능하다. 

분산 추적이 필요한 이유

MSA에서는 여러 서비스가 협력하여 하나의 요청을 처리하기 때문에, 서비스 간의 복잡한 호출 관계로 인해 문제 발생 시 원인을 파악하기 어려울 수 있다.

따라서 분산 추적을 통해 각 서비스의 호출 흐름을 명확히 파악하고, 성능 병목이나 오류를 빠르게 진단할 수 있다. 

 

Zipkin 이란?

트레이스 데이터를 수집하고 시각화하는 분산 추적 시스템이다.

각 서비스의 트레이스와 스팬 데이터를 저장하고, 이를 통해 호출 흐름을 시각화한다.

주요 특징으로는 데이터 수집 및 저장, 시각화, 검색 및 필터링 등을 가지고 있다.

 

그럼 직접 Zipkin을 Docker에서 띄우고, 대시보드에 접속하는 실습을 진행해보자.

먼저 Zipkin 서버를 Docker를 사용하여 실행한다.

docker run -d -p 9411:9411 openzipkin/zipkin

http://localhost:9411에서 zipkin을 띄우고있다.

 

Zipkin 대시보드에 접속해보면 아직 서비스 호출 전이기 때문에 아무 트레이스도 보이지 않는다.

각 서비스를 호출한다면 트레이스와 스팬이 생성되고, Zipkin 서버로 전송되어 확인할 수 있을 것이다.

 

그럼 이제 사용할 어플리케이션의 build.gradle과 application.yml 등의 설정 파일을 수정하고, 서버와 사용할 어플리케이션을 실행시켜보자. 나는 이번 실습에서 order를 get 호출할 것이기 때문에 order-service의 설정 파일을 수정해주었다.

 

서버가 켜졌으면 order를 get 해본다.

 

그리고 나서 다시 zipkin을 확인하면 

 

이렇게 서버의 활동 로그를 걸린 시간과 함께 쭉 볼 수 있다.

각 스팬의 show를 눌러보면

 

서버의 응답시간이 얼마나 걸렸는지, 왜 오래 걸렸는지 알 수 있고 이를 통해 문제상황을 트래킹해 해결할 수 있다!

추가로 Dependencies 탭에서 서버의 호출 경로 시각화하여 볼 수도 있다.

정리하자면, 이렇게 Zipkin 대시보드를 통해 성능 병목이 발생하는 부분을 식별하고, 각 스팬의 소요 시간과 호출 관계를 분석하여 성능 문제를 진단하고 해결할 수 있다.