인프런 커뮤니티 질문&답변

이북자님의 프로필 이미지
이북자

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Spring Cloud Sleuth + Zipkin을 이용한 Microservice의 분산 추적 ②

boot3 설정

작성

·

898

·

수정됨

6

spring boot3 에서 slueth를 사용할 수 없다고 합니다.

 

삽질 끝에 비슷하게 구현이 되긴 했는데 조금 다른 점 때문에 강사님이 의도하신바가 맞는지 정확히는 모르겠네요.

  • 첫 요청의 traceID와 spanID가 다른 점

혹~시 필요하신분이 계시다면 참고해주세요!

추가의존성

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-brave</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.reporter2</groupId>
            <artifactId>zipkin-reporter-brave</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-micrometer</artifactId>
        </dependency>
  • 기존 스타터 sleuth, zipkin 의존성 제거

yml 변경점

server:
  port: 0

spring:
  application:
    name: order-service
#  spring boot 3.0 이전 zipkin, sleuth 설정
#  zipkin:
#    base-url: http://127.0.0.1:9411
#    enabled: true
#  sleuth:
#    sampler:
#      probability: 1.0
  jpa:
    hibernate:
      ddl-auto: update
  h2:
    console:
      enabled: true
      settings:
        web-allow-others: true
      path: /h2-console
  datasource:
    driverClassName: org.h2.Driver
    url: jdbc:h2:mem:testdb
## 추가 
  cloud:
    openfeign:
      micrometer:
        enabled: true

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka

management:
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, busrefresh, info, metrics, prometheus
## 추가
  tracing:
    sampling:
      probability: 1.0
    propagation:
      type: b3
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans

logging:
  level:
    com.example.orderservice: DEBUG
## 추가
  pattern:
    level: "%5p [%X{traceId:-},%X{spanId:-}]"
  • 추가 주석 부분만 추가

Config Bean 추가

@Configuration
public class MoniterConfig {
    @Bean
    public Capability capability(final MeterRegistry registry) {
        return new MicrometerCapability(registry);
    }
}
  • 이 Config 를 추가하지 않으시면, 요청 마다 TraceID가 달라집니다.

  • 액츄에이터도 필수

 

몇 가지 글을 참고하여 세팅한거라 몇몇 의존성이나 설정은 없어도 될수도 있지만 거의 필요한거 같습니다.

그 외에 오류나 추적하는거는 동일하게 동작하는거 같습니다!

 

혹시 누군가 도움이 되시길!

 

 

 

 

답변 2

0

FeighClient 관련 TraceId 불일치 되서 찾고 있엇는데 감사합니다 !
감사합니다 !

0

안녕하세요, 인프런 AI 인턴입니다.

Spring Boot 3에서 Sleuth를 기본적으로 사용하는 방법에 대해서 질문주셨군요. 혹시 Sleuth 대신에 Zipkin과 함께 OpenZipkin Brave를 이용한 추적을 구현하신 것 같습니다.

Spring Boot 3에서는 Micrometer Tracing을 사용하여 추적 기능을 활용할 수 있습니다. 이를 위해 다음과 같은 의존성이 필요합니다.

  • org.springframework.boot:spring-boot-starter-actuator
  • io.micrometer:micrometer-tracing-bridge-brave
  • io.zipkin.reporter2:zipkin-reporter-brave

이러한 의존성은 Spring Boot의 Actuator 기능과 함께 사용되며, 추가로 management.tracing.sampling.probability 설정을 1.0로 설정하여 모든 요청을 추적하도록 할 수 있습니다. 요청마다 TraceID가 다른 문제는 MoniterConfig 클래스에 Capability 빈을 추가함으로써 해결하신 것으로 보입니다.

추가로, logging.pattern.level을 설정함으로써 로그에 현재 추적 및 스팬 ID를 포함할 수 있습니다.

올려주신 설정 방법은 다른 분들이 Spring Boot 3에서 추적 기능을 활용하는 데 많은 도움이 될 것 같습니다. 강사님이 의도한 바와 정확히 일치하는지는 강사님의 원래 강의 내용과 비교해볼 필요가 있으나, 기본적인 트레이싱 구성을 제공하는 것으로 보입니다.

더 자세한 정보는 공식 Spring Boot 레퍼런스 문서에서 확인할 수 있습니다:

Spring Boot Reference Documentation - Tracing 실습 시작하기

언제나 추가적인 조언이나 질문이 있다면 도와드리겠습니다. 감사합니다, 이북자님.

이북자님의 프로필 이미지
이북자

작성한 질문수

질문하기