-
분산 추적에 대해 파헤치기프로그래밍 언어/Spring 2024. 8. 7. 19:38
이 글은 필자가 공부한 내용을 정리한 것에 불과하며 틀린 정보가 있을 수 있으니 주의가 필요합니다.
오늘은 분산 추적에 대해 알아보겠습니다.
주제에 들어가기 앞서, Spring Cloud(MSA를 구현하기 위해 Spring에서 지원하는 프레임워크의 확장)는 분산 추적과 로깅을 설정할 수 있도록 설계되었습니다. 그만큼 MSA 구현에 있어 분산 추적과 로깅이 중요한 위치에 있다는 뜻인데, 이는 왜 중요한 걸까요?
일단, 분산추적의 정의와 기능에 대해 알아봅시다.
분산추적이란,
- 분산 추적은 분산 시스템에서 서비스간의 요청 흐름을 추적하고 모니터링하는 방법입니다.
- 이는 각 서비스의 호출 관계와 성능을 시각화하여 문제를 진단하고 해결할 수 있도록 돕습니다.
분산 추적이 MSA 설계에 필요한 이유는,
마이크로 서비스 아키텍처에서는 여러 서비스가 협력하여 하나의 요청을 처리합니다.
-> 서비스간의 복잡한 호출 관계로 인해 문제 발생시 원인 파악이 어려울 수 있습니다.
--> 분산 추적을 통해 각 서비스의 호출 흐름을 명확히 파악하고, 성능 병목이나 오류를 빠르게 진단할 수 있습니다.
분산 추적을 관통하는 핵심 개념도 함께 알아봅시다.
-
더보기트레이스
- 트레이스는 하나의 요청이 시작되고 끝까지 각 서비스를 거치는 전체 흐름을 나타냅니다.
- 하나의 트레이스는 여러 개의 스팬으로 구성합니다.
- 분산 시스템에서 클라이언트의 요청이 여러 서비스로 전달될때, 각 서비스 호출이 트레이스의 일부로 기록됩니다.
- 트레이스 ID 는 각 스팬에 공통으로 부여되고, 이를 통해 전체 요청 흐름을 추적할 수 있습니다. -
더보기스팬
- 스팬은 분산 추적에서 가장 작은 단위이고, 특정 서비스 내에서의 개별 작업 또는 요청입니다.
- 각 스팬은 시작 시간과 종료 시간을 기록하여 작업의 지속 시간을 나타냅니다.
- 스팬은 고유한 스팬 ID를 가지며, 이는 트레이스 ID와 함께 특정 작업을 식별하는데 사용됩니다.
- 스팬은 부모-자식 관계를 가질 수 있으며, 이를 통해 호출 계층 구조를 표현합니다.
- 스팬에는 메타데이터를 추가하여 상세한 정보를 기록할 수 있습니다. -
더보기컨텍스트
- 컨텍스트는 요청이 서비스 간에 전달될 때 함께 전파되어, 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있게 합니다.
- 컨텍스트는 트레이스 ID, 스팬 ID, 부모 스팬 ID 등의 정보를 포함하여 각 서비스가 요청의 출처와 경로를 추적할 수 있도록 돕습니다.
- 서비스 호출 간에 컨텍스트를 유지함으로써, 분산 시스템 전체에서 일관된 추적이 가능합니다.
이번에는 분산 추적 기능을 제공하는 라이브러리에 대해 알아보겠습니다.
제가 공부한 라이브러리는 Micrometer와 Zipkin입니다.
Micrometer란?
- Micrometer는 Spring 기반 어플리케이션에서 메트릭을 수집하고 모니터링하기위한 라이브러리입니다.
- 주요 특징으로 다양한 메트릭 수집, 유연한 연동, 추적 기능이 있습니다.
Zipkin이란?
- Zipkin은 트레이스 데이터를 수집하고 시각화하는 분산 추적 시스템입니다.
- 각 서비스의 트레이스와 스팬 데이터를 저장하고, 이를 통해 호출 흐름을 시각화합니다.
- 주요 특징으로 데이터 수집 및 저장, 시각화, 검색 및 필터링이 있습니다.
분산 추적이 쓰이는 상황에 대해서 알아봅시다.
서비스 호출 흐름 추적
- 서비스간의 호출 흐름을 추적하고, Zipkin 대시보드에서 시각화 합니다.
- 각 서비스 호출 시 트레이스와 스팬이 생성되고, Zipkin 서버로 전송합니다.
성능 병목 진단
- Zipkin 대시보드를 통해 성능 병목이 발생하는 부분을 식별합니다.
- 각 스팬의 소요시간와 호출 관계를 분석하여 성능 문제를 진단하고 해결합니다.
2024.08.07 작성
'프로그래밍 언어 > Spring' 카테고리의 다른 글
인메모리 저장소와 Redis에 대해 파헤치기 (0) 2024.08.08 API 게이트 웨이에 대해 파헤치기 (0) 2024.08.06 정규 표현식 정리 (0) 2023.11.29 1대N, N대1, N대M 관계에 대해 알아보자 (1) 2023.11.20 Spring MVC 간단 정리 (1) 2023.11.20