Spring Cloud Sleuth 설정 가이드: 기본 구성부터 고급 최적화까지

Spring Cloud Sleuth는 마이크로서비스 환경에서 분산 트레이싱을 구현하는 핵심 도구로, 서비스 간 요청 흐름을 추적하고 성능 병목 현상을 진단하는 데 활용됩니다.

기본 구성 절차

1. 의존성 추가

<properties>
    <spring-cloud.version>2021.0.0</spring-cloud.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
</dependencies>

의존성 추가 후 HTTP 요청 추적 기능이 자동으로 활성화됩니다.

2. 핵심 개념

  • 트레이스(Trace): 관련 스팬을 포함하는 전체 요청 경로
  • 스팬(Span): 시작/종료 시간을 가진 작업 단위
  • 트레이스 ID: 전체 요청을 식별하는 고유값
  • 스팬 ID: 개별 작업 단위 식별자

핵심 설정 옵션

1. 샘플링 주기 설정

spring:
  sleuth:
    sampler:
      probability: 0.5 # 50% 요청 샘플링

2. 전파 방식 설정

spring:
  sleuth:
    propagation:
      type: 
        - B3
        - W3C

3. 컨텍스트 전달 설정

spring:
  sleuth:
    baggage:
      remote-keys: sessionId,transactionCode
      correlation-keys: sessionId

Zipkin 연동

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
spring:
  zipkin:
    endpoint: http://zipkin-server:9411/api/v2/spans
    sender:
      type: web

고급 활용 기법

1. 사용자 정의 스팬 생성

@Autowired
private Tracer tracer;

public void executeTask() {
    Span customSpan = tracer.spanBuilder("task-execution").start();
    try (Scope scope = customSpan.makeCurrent()) {
        customSpan.tag("task-type", "batch");
        // 비즈니스 로직
    } finally {
        customSpan.end();
    }
}

2. 어노테이션 기반 추적

@NewSpan("order-validation")
public void validateOrder(@SpanTag("order-code") String code) {
    // 검증 로직
}

3. 성능 최적화

spring:
  sleuth:
    async:
      enabled: true
    redis:
      enabled: false # Redis 추적 비활성화

로그 통합

logging:
  pattern:
    level: "%5p [${spring.application.name},%X{traceId},%X{spanId}]"

문제 해결 전략

  • 샘플링 전략: 프로덕션 환경에서는 0.01(1%)로 설정 권장
  • 메모리 관리: spring.sleuth.baggage.max-value-length=512
  • 네트워크 최적화: spring.zipkin.compression.enabled=true

성능 영향 분석

적절한 구성 시 시스템 부하 증가는 1-3% 수준이며, 주요 영향 요소는:

  • 샘플링 빈도
  • 스팬 데이터 크기
  • 저장소 성능

진화 방향

Spring Cloud Sleuth 3.1 이후 버전은 Micrometer Tracing으로 기능 이관되었으며, 최신 프로젝트에서는 Micrometer 적용을 권장합니다.

태그: Spring-Cloud-Sleuth 분산-트레이싱 Zipkin 마이크로서비스 로깅-통합

6월 9일 23:41에 게시됨