Spring Webflux project 에서 로그 추적성 제공하기

requirement

  • 로그에 추적가능한 id를 남기고 싶다.

  • 로그 호출 시 일일이 포함시키지 않고 자동으로 설정되게 하고 싶다.

  • MicroService 로 여러 서비스가 연계될때 동일한 식별자로 연결되게 하고 싶다.


related object

  • Spring Boot uses Micrometer Observation

  • Facade 역할을 하는 Micrometer 를 이용하여 tracing 구현체에 따라 적용 가능. (openzipkin, opentelemetry ... )

  • Webflux는 Reactive 수행으로 Thread간 이동이 빈번하여 Tracing Context Propagation 이 필수

  • Spring Boot Actuator 와 결합하여 간단한 설정만으로 기능 제공


implementation

build.gradle

dependencies {  
    ...  
    implementation org.springframework.boot:spring-boot-starter-actuator  
    // case 1 for  OpenZipkin Brave
    implementation 'io.micrometer:micrometer-tracing-bridge-brave'
    // case 2 for opentelemetry
    // implementation 'io.micrometer:micrometer-tracing-bridge-otel'
    ...  
}

or logback-spring.xml

<pattern>... %X{traceId:-NONE} ... </pattern>


example

2024-06-08T20:38:08.217+02:00  INFO [94739f90c9e13ec3a7048d5dfba4c499,61c824a2d63bbe99] 1234 --- [ctor-http-nio-2] lepffm.Service2Controller    : logging...


남기는 말

servlet project 인 경우 spring.reactor.context-propagation 만 제거하면 됨


reference

https://docs.spring.io/spring-boot/reference/actuator/observability.html

https://docs.spring.io/spring-boot/reference/actuator/tracing.html

https://micrometer.io/docs/tracing


원문

https://github.com/lepffm/issuance/issues/176

Observability :: Spring Boot

spring.io

Observability :: Spring Boot

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 6월 8일 오전 2:07

댓글 0