
분산 추적이란?
- 분산 추적은 분산 시스템에서 서비스 간의 요청 흐름을 추적하고 모니터링하는 방법이다.
- 각 서비스의 호출 관계와 성능을 시각화하여 문제를 진단하고 해결할 수 있도록 돕는다.
분산 추적이 왜 필요할까?
- MSA에서는 하나의 요청을 처리할 때 여러 서비스를 거쳐 처리한다.
- 서비스 간의 복잡한 호출 관계로 인해 문제 발생 시 원인을 파악하기 어렵다.
- 분산 추적을 통해 각 서비스의 호출 흐름을 명확히 파악하고 성능 병목이나 오류를 빠르게 진단할 수 있다.
주요 개념
트레이스(Trace)
- 트레이스는 하나의 요청이 시스템에 들어와서 처리가 완료될 때까지 거치는 전체 여정을 나타낸다.
- 하나의 트레이스는 여러 개의 스팬으로 구성된다.
- 분산 시스템에서 클라이언트의 요청이 여러 서비스로 전달될 때 각 서비스 호출이 트레이스의 일부로 기록된다.
- 트레이스 ID는 각 스팬에 공통으로 부여되며 이를 통해 전체 요청 흐름을 추적할 수 있다.
- 택배를 비유로 들면 전체 배송 경로(발송지 -> 허브 -> 배송지)와 같다고 볼 수 있다.
스팬(Span)
- 스팬은 분산 추적에서 가장 작은 단위로 특정 서비스 내에서의 개별 작업 또는 요청을 나타낸다.
- 각 스팬은 시작 시간과 종료 시간을 기록하여 작업의 지속 시간을 나타낸다.
- 스팬은 고유한 스팬 ID를 가지며 이는 트레이스 ID와 함께 특정 작업을 식별하는데 사용된다.
- 스팬은 부모-자식 관계를 가질 수 있으며 이를 통해 호출 계층 구조를 표현한다.
- 스팬에는 메타데이터(태그, 로그, 이벤트 등)를 추가하여 상세한 정보를 기록할 수 있다.
- 스팬은 전체 배송 경로 중에서 개별 구간(발송지 -> 허브, 허브 -> 배송지 등)과 같다고 볼 수 있다.
컨텍스트(Context)
- 컨텍스트는 서로 다른 서비스 간에 트레이스 정보를 전달하기 위한 매개체이다.
- 컨텍스트는 요청이 서비스 간에 전달될 때 함께 전파되어 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있게 한다.
- 컨텍스트는 트레이스 ID, 스팬 ID, 부모 스팬 ID 등의 정보를 포함하여 각 서비스가 요청의 출처와 경로를 추적할 수 있도록 돕는다.
- 서비스 호출 간에 컨텍스트를 유지함으로써 분산 시스템 전체에서 일관된 추적이 가능하다.
- 컨텍스트는 택배 박스에 붙어 있는 송장과 같다고 볼 수 있다.
Micrometer란?
- Micrometer는 Spring 기반 애플리케이션에서 메트릭을 수집하고 모니터링하기 위한 라이브러리이다.
- 각 서비스의 성능 지표를 수집하고 Prometheus, Grafana 등과 연동하여 시각화할 수 있다.
- 분산 추적을 위한 기능도 제공하여 서비스 간의 호출 흐름을 추적할 수 있다.
주요 특징
- 다양한 메트릭 수집: 애플리케이션의 다양한 성능 지표를 수집할 수 있다.
- 유연한 연동: Prometheus, Grafana 등 다양한 모니터링 도구와 연동할 수 있다.
- 추적 기능: 서비스 간의 호출 흐름을 추적하여 성능 병목을 진단할 수 있다.
Zipkin이란?
- Zipkin은 트레이스 데이터를 수집하고 시각화하는 분산 추적 시스템이다.
- 각 서비스의 트레이스와 스팬 데이터를 저장하고 이를 통해 호출 흐름을 시각화한다.
주요 특징
- 데이터 수집 및 저장: 각 서비스에서 전송된 트레이스 데이터를 수집하고 저장한다.
- 시각화: 트레이스 데이터를 시각화하여 서비스 간의 호출 관계를 명확히 파악할 수 있다.
- 검색 및 필터링: 특정 트레이스나 스팬을 검색하고 필터링하여 문제를 진단할 수 있다.