728x90
현대의 마이크로서비스 아키텍처(MSA)에서는 여러 서비스가 서로 연계되어 복잡한 시스템을 형성합니다. 이러한 시스템에서 문제를 추적하고 성능을 모니터링하는 것은 필수적입니다. 이 과정에서 Spring Cloud Sleuth와 Zipkin은 강력한 도구가 됩니다.
분산 추적이란❓
분산 추적(Distributed Tracing)은 마이크로서비스 아키텍처(MSA)에서 서비스 간의 호출 흐름을 추적하고 시각화하는 기법입니다.
이는 요청이 시스템을 통과하면서 어떤 서비스에서 얼마나 시간이 걸렸는지, 오류가 발생한 위치는 어디인지 등을 파악하는 데 유용합니다.
분산 추적의 주요 개념
1. Trace
- Trace는 하나의 요청이 여러 서비스에 걸쳐 진행되는 전체 과정을 나타냅니다. 각 Trace는 특정 요청이 시스템을 통과하는 동안의 전체 흐름을 기록합니다.
- 구성요소
- Trace는 여러 개의 Span으로 구성됩니다.
2. Span
- Span은 Trace의 구성 요소로, 하나의 서비스에서의 작업 단위를 나타냅니다. 각 Span은 특정 요청의 처리 단계를 나타내며, 시작과 끝의 타임스탬프를 포함합니다.
- 속성
- Span ID: 각 Span을 고유하게 식별하는 ID.
- Parent Span ID: 부모 Span이 있는 경우 부모 Span의 ID.
- Timestamp: Span의 시작과 종료 시간을 기록합니다.
- Duration: Span의 지속 시간을 기록합니다.
- Annotations: Span의 중요한 이벤트나 메타데이터를 기록할 수 있습니다.
3. Context propagaion
- 콘텍스트는 요청이 서비스 간에 전달될 때 함께 전파되어, 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있게 합니다.
- Context Propagation은 Trace ID와 Span ID 같은 추적 정보를 요청과 함께 전달하는 프로세스입니다. 이를 통해 서로 다른 서비스가 동일한 Trace와 Span 정보를 공유할 수 있습니다.
- 서비스 호출 간에 콘텍스트를 유지함으로써, 분산 시스템 전체에서 일관된 추적이 가능합니다.
분산 추적의 필요성❗️
1. 서비스 간 호출 추적
- 문제
- 마이크로서비스 아키텍처에서는 여러 서비스가 서로 호출을 주고받으며 작업을 수행합니다.
- 요청이 여러 서비스를 거치면서 어떤 경로를 따라갔는지 파악하기 어렵습니다.
- 해결
- 분산 추적을 사용하면 전체 요청 흐름을 시각화할 수 있으며, 요청이 어떤 서비스에서 시작하고 어디에서 끝나는지 추적할 수 있습니다.
2. 성능 병목 식별
- 문제
- 서비스 간 호출 시 성능이 저하될 수 있으며, 특정 서비스가 느려지면 전체 시스템의 성능에 영향을 미칩니다. 이러한 병목을 찾는 것이 어려울 수 있습니다.
- 해결
- 각 서비스의 처리 시간과 호출 관계를 분석하여 성능 병목을 식별할 수 있습니다. 이를 통해 문제가 발생하는 특정 서비스나 호출을 pinpoint 할 수 있습니다.
3. 문제 해결 및 디버깅
- 문제
- 시스템에서 오류가 발생했을 때, 오류의 원인을 찾기 위해서는 요청이 어떻게 처리되었는지 전체적인 흐름을 이해해야 합니다.
- 해결
- 분산 추적을 통해 요청의 전체 흐름을 확인하고, 오류가 발생한 위치와 원인을 정확히 추적할 수 있습니다.
- 로그와 함께 Trace 정보를 사용하면 문제를 보다 쉽게 해결할 수 있습니다.
4. 요청 흐름 분석
- 문제
- 요청이 여러 서비스에 걸쳐 어떻게 흐르는지, 각 서비스의 역할과 상호작용을 이해하는 것이 중요합니다.
- 해결
- 분산 추적을 통해 각 서비스 간의 호출 관계와 요청의 흐름을 시각적으로 분석할 수 있습니다.
- 이를 통해 시스템의 구조와 각 서비스의 역할을 명확히 이해할 수 있습니다.
5. 서비스 의존성 관리
- 문제
- 서비스 간의 의존성을 관리하는 것이 복잡해질 수 있으며, 특정 서비스의 변경이 다른 서비스에 미치는 영향을 파악하기 어렵습니다.
- 해결
- 분산 추적을 통해 서비스 간의 의존성과 호출 경로를 시각화하고, 의존성 변경이 전체 시스템에 미치는 영향을 파악할 수 있습니다.
6. 성능 모니터링
- 문제
- 시스템의 성능을 모니터링하고 최적화하는 것이 필요합니다. 성능 지표를 수집하고 분석하는 데 어려움이 있을 수 있습니다.
- 해결
- 분산 추적은 각 서비스의 성능 지표를 수집하고, 요청의 처리 시간, 응답 시간 등의 데이터를 제공하여 성능 모니터링과 최적화를 지원합니다.
Micrometer란❓
Micrometer는 Spring 기반 애플리케이션에서 성능을 모니터링하기 위한 라이브러리로, 애플리케이션의 메트릭을 수집하고 이를 다양한 모니터링 시스템에 전송하는 기능을 제공합니다.
Micrometer는 주로 Spring Boot와 함께 사용되며, 유연성과 확장성 덕분에 여러 모니터링 설루션과 통합할 수 있습니다.
Micrometer의 주요 특징은 다음과 같습니다.
추상화된 메트릭 API
- Micrometer는 다양한 메트릭 수집 및 모니터링 시스템을 추상화한 API를 제공합니다.
- 이를 통해 개발자는
특정 모니터링 도구에 종속되지 않고 메트릭을 정의하고 수집할 수 있습니다.
다양한 모니터링 시스템 지원
- Prometheus
- 오픈 소스 모니터링 및 경고 툴킷.
- Grafana
- 시각화 대시보드를 제공하는 도구.
- InfluxDB
- 시계열 데이터베이스.
- Datadog
- 클라우드 기반 모니터링 및 분석 플랫폼.
- New Relic
- 애플리케이션 성능 관리(APM) 도구.
다양한 메트릭 유형 지원
- Counter
- 증가하는 숫자를 측정합니다 (예: 요청 수, 오류 수).
- Gauge
- 현재 값을 측정합니다 (예: 현재 메모리 사용량).
- Timer
- 작업의 처리 시간을 측정합니다.
- Distribution Summary
- 데이터의 분포를 측정합니다 (예: 응답 시간의 분포).
Spring Boot 통합
- Micrometer는 Spring Boot와 긴밀히 통합되어 있으며, Spring Boot Actuator와 함께 사용하여 메트릭을 쉽게 수집하고 노출할 수 있습니다.
- Spring Boot 애플리케이션에서는 Micrometer를 사용하여 애플리케이션의 성능을 모니터링하고 대시보드에 메트릭을 시각화할 수 있습니다.
확장성과 플러그인 아키텍처
- Micrometer는 플러그인 아키텍처를 사용하여 다양한 모니터링 시스템에 대한 지원을 확장할 수 있습니다.
- 개발자는 필요에 따라 커스텀 메트릭이나 모니터링 시스템을 추가할 수 있습니다.
Zipkin이란❓
Zipkin은 분산 추적 시스템으로, 마이크로서비스 아키텍처(MSA)에서 요청의 흐름을 추적하고 시각화하는 데 사용됩니다.
Zipkin의 주요 특징
1. 트레이스 수집 및 저장
- Zipkin은 분산 시스템에서 발생하는 트레이스를 수집하고 저장합니다.
- 각 트레이스는 요청이 시스템을 통과하는 동안의 일련의 작업(스팬:Span)을 포함합니다.
2. 트레이스 시각화
- Zipkin은 웹 기반의 UI를 통해 수집된 트레이스를 시각화합니다. 이를 통해 요청의 전체 흐름을 그래픽으로 확인하고, 각 서비스 간의 호출 관계를 분석할 수 있습니다.
3. 성능 분석
- Zipkin은 각 스팬의 시작 시간과 종료 시간을 기록하여, 서비스 간의 지연 시간이나 성능 병목을 식별하는 데 도움을 줍니다.
- 요청의 각 단계에서 소요된 시간과 지연을 분석할 수 있습니다.
4. 오류 추적
- 요청이 처리되는 동안 발생하는 오류를 추적하고, 오류가 발생한 위치를 정확히 식별할 수 있습니다. 이를 통해 문제 해결과 디버깅이 용이해집니다.
5. 쿼리 및 필터링
- Zipkin은 트레이스 데이터를 쿼리하고 필터링할 수 있는 기능을 제공합니다.
- 특정 트레이스 ID나 요청 속성을 기반으로 데이터를 조회하여, 관심 있는 요청의 상세 정보를 분석할 수 있습니다.
'Framework > Spring\Spring boot' 카테고리의 다른 글
[Spring boot] @Builder 어노테이션의 장점 (0) | 2024.08.09 |
---|---|
[Spring Cloud] Zipkin을 이용한 분산 추적: 요청 흐름과 성능 모니터링 (0) | 2024.08.07 |
[Spring Cloud] Spring Cloud Config의 중앙 집중식 설정 관리와 실시간 구성 변경 방법 (@RefreshScope, 수동 구성 갱신) (0) | 2024.08.06 |
[SpringCloud] JWT 토큰을 통한 Spring Cloud Gateway 인증 및 권한 관리 (0) | 2024.08.05 |
[Spring Cloud] Spring Cloud Gateway로 MSA 환경에서의 효율적인 요청 처리와 로드 밸런싱 구현하기 (0) | 2024.08.03 |