2017년 6월 29일 목요일

spring cloud slueth 설정

스프링 클라우드 슬루스를 통해서, 마이크로 서비스 아키텍쳐에서 들어온 request를 추적할 수 있다.
해당 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

댓글 없음 :

댓글 쓰기