해당 dependency 설정을 통해, slueth 는 각각의 request마다 traceId, spanId를 발행하고
해당 값을 통해 사용자로부터 들어온 값이 MSA 에서 어떤 모듈을 통해 전송되고 응답되었는지 추적할 수 있다.
End to End 단에서 전체 request flow는 같은 traceId를 가지게 되고, 각각의 모듈은 동일한 spanId를 가지게 된다.
따라서, 전체 flow에서 사용자로부터 온 request는 거쳐온 모든 모듈에서 같은 traceId를 가지게 되고,
각각의 모듈 별로 다른 spanId를 가지게 되는 것이다.
spring-cloud-starter-sleuth 라이브러리 추가만으로,request에 traceId와 spanId 발행이 이루어진다.
이 예제에서는 interceptor를 통해, 모든 request에 traceId와 spanId 를 log로 남기도록 하겠다.
package org.blog.test.config; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.sleuth.Tracer; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Slf4j @Component public class TraceInterceptor extends HandlerInterceptorAdapter { @Autowired private Tracer tracer; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("[{}] {} spanId : [{}], traceId : [{}]", request.getMethod(), request.getRequestURI(), tracer.getCurrentSpan().getTraceId(), tracer.getCurrentSpan().getSpanId()); return true; } }
해당 interceptor를 통해 request가 호출될 때 아래와 같이 log가 남겨지게 된다.
2017-06-30 00:20:11.745 INFO [slueth-application,5c330db5e121700a,5c330db5e121700a,false] 11200 --- [nio-8080-exec-1] org.blog.test.config.TraceInterceptor : [GET] /test/call spanId : [6643668950118920202], traceId : [6643668950118920202] 2017-06-30 00:20:11.835 INFO [slueth-application,5c330db5e121700a,18462ed55b34706c,false] 11200 --- [nio-8080-exec-2] org.blog.test.config.TraceInterceptor : [GET] /test spanId : [6643668950118920202], traceId : [1749136999173091436]
전체 예제는 아래 링크에서 다운로드 받을 수 있다.
https://gitlab.com/shashaka/slueth-project
댓글 없음 :
댓글 쓰기