ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Cloud Sleuth - 시작하기
    개발 일지/Cloud 2022. 7. 8. 16:54
    반응형

    안녕하세요!

    지난번 포스트에 이어서 "Spring Cloud Sleuth"에 대해 조금 더 자세히 알아보도록 하겠습니다.

     

    참고하는 페이지는 spring.io 공홈의 문서입니다.

    https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/getting-started.html#getting-started

     

    Getting Started

    If you are getting started with Spring Cloud Sleuth or Spring in general, start by reading this section. It answers the basic “what?”, “how?” and “why?” questions. It includes an introduction to Spring Cloud Sleuth, along with installation inst

    docs.spring.io


    1. Spring Cloud Sleuth란?

    Spring Cloud Sleuth는 스프링 클라우드를 위한 분산 트레이싱에 대한 API를 제공합니다.

    (OpenZipkin Brave와 통합됩니다.)

     

    Spring Cloud Sleuth는 요청(request)와 메시지를 추적할 수 있어서, 해당 로그와 연관시켜 볼 수 있습니다.

    트레이스 정보를 외부 시스템으로 추출하여 '지연시간(latency)'를 시각화할 수도 있습니다. 그리고 OpenZipkin과도 바로 호환됩니다.

    1.1. 용어

    Spring Cloud Sleuth는 Dapper의 용어를 차용합니다.

    Span :

    작업의 기본 단위입니다.

    예를 들어 RPC(원격 프로시저 호출)을 보내는 것은, RPC에 응답을 보내는 것과 같이 하나의 새로운 span이 됩니다.

    그리고 description, 시계열성 이벤트, key-value 어노테이션(tags), 해당 span의 ID 및 프로세스 ID와 같은 기타 데이터도 가지고 있습니다.

     

    Span은 시작 또는 종료할 수 있고, 이들 타이밍 정보를 트래킹할 수 있습니다. span을 생성하고 나면 특정시점에 종료해야 합니다.

    Trace :

    트리 구조를 형성하는 span 집합 입니다.

    예를 들면, 분산 빅데이터 저장소를 실행하는 경우에 PUT 요청(request)에 의해 트레이스가 형성될 수 있습니다.

    Annotation/Event :

    이벤트 유무를 시간적으로 기록하기 위해 사용합니다.

     

    개념적으로 보면, 일반적인 RPC 시나리오에서 이벤트를 표시하여 어떤 종류의 작업이 발생했는지 강조 표시 합니다.

    • cs: Client Sent
      클라이언트가 요청(request)를 생성했음을 나타냅니다. 이 어노테이션은 span의 시작을 가리킵니다.
    • sr: Server Received
      서버 측에서 요청(request)를 받고 프로세스를 시작합니다. 이 타임스탬프에서 cs의 타임스탬프를 빼면 네트워크 대기 시간을 알 수 있습니다.
    • ss: Server Sent
      요청(request) 처리가 끝나면 어노테이션 됩니다. (클라이언트에 응답을 보내지면)
      이 타임스탬프에서 sr 타임스탬프를 빼면 서버 측에서 요청을 처리하는 데 필요한 시간이 표시됩니다.
    • cr: Client Received
      span의 끝을 나타냅니다. 클라이언트가 서버로부터 응답(response)를 성공적으로 받았습니다.
      이 타임스탬프에서 cs 타임스탬프를 빼면 클라이언트가 서버로부터 응답을 받는 데 필요한 전체 시간을 알 수 있습니다.

    아래 이미지를 참고하면 Span과 Trace에 대해 잘 느낄 수 있습니다.

    (출처: docs.spring.io/speing-cloud-sleuth/docs/current/...)

    위 이미지에서 노트의 각 색상은 Span을 구분합니다. (A ~ G까지)

     

    생성된 Span(지시어.no custom span)으로 계속 진행할 수도 있고, 하위 Span(지시어.custom span)을 수동으로 만들 수도 있습니다.

     

    parent-child 관계도 (출처: docs.spring.io/speing-cloud-sleuth/docs/current/...)

     


    2. Cloud sleuth-based Application

    트레이스 구현체는 OpenZipkinBrave를 사용합니다. 

     

    start.spring.io 에서 "web"과 "sleuth"를 추가하여 프로젝트를 생성해 줍니다.

    2.1. 코드

    메인 메소드가 있는 애플리케이션 클래스 단일 파일에 코드를 작성해 보겠습니다.

     

    (src/main/java/xxxApplication.java)

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @EnableAutoConfiguration
    @SpringBootApplication
    public class SleuthApplication {
    
    	private static final Logger log = LoggerFactory.getLogger(SleuthApplication.class);
    
    	@RequestMapping("/")
    	String home() {
    		log.info("Hello there~");
    		return "Hello there~";
    	}
    
    	public static void main(String[] args) {
    		SpringApplication.run(SleuthApplication.class, args);
    	}
    
    }

    스프링 부트는 @RestController, @RequestMapping 어노테이션을 통해 애플리케이션을 내부 톰캣에 바인딩해서 외부 요청을 처리할 수 있습니다.

    스프링 클라우드 Sleuth는 유입되는 요청에 대한 추적 수단을 제공합니다.

     

    2.2. Run

    application.properties 파일에 "spring.application.name=애플리케이션명" 을 작성하고 실행해 봅니다.

     

    그리고 브라우저에서 localhost:8080 으로 접근해 보면 위에서 작성한 "/" 경로에 요청이 들어오게 되는데요.

    이와 같은 로그를 확인할 수 있습니다.

     

    2022-08-23 14:33:22.234  INFO [jonghyun,15294ce39b3059fa,15294ce39b3059fa] 61920 --- [nio-8080-exec-1] com.example.sleuth.SleuthApplication     : Hello there~

     

    위 로그를 보면, 구조가 [애플리케이션 이름, 트레이스 아이디, 스팬 아이디]로 구성된 것을 확인할 수 있습니다.

     

    3. 다음 단계

    해당 포스트에서는 Sleuth의 기본적인 내용들을 살펴봤습니다.

    스프링의 문서 중에는 이와 관련한 "how-to" 페이지도 제공되니 바로 진행해보면 좋을 것 같습니다.

     

    또는 이론적으로 다음 단계인 Spring Cloud Sleuth 사용하기 로 이동해도 좋습니다. 좀 더 자세히 알고 싶다면 Spring Cloud Sleuth 특징 로 이동하고요.

     

    그리고 기본적인 샘플 프로젝트는 깃헙 페이지를 참고합니다.

     


    아래는 spring cloud sleuth zipkin 의존성을 추가하고 Zipkin에서 트레이스된 로그를 확인하는 내용입니다.

    build.gradle (또는 pom.xml) 의존성 추가

     

    application.properties

    spring.sleuth.sampler.probability 는 Zipkin에 보낼 트래픽의 비율을 지정합니다. (1.0은 100% 전부를 뜻함)

     

    다시 실행하고 브라우저에서 localhost:8080 으로 접근하면 트레이스가 Zipkin에 집계될 것입니다.

    localhost:9411 - Run Query
    Trace - SHOW

    반응형

    '개발 일지 > Cloud' 카테고리의 다른 글

    Zipkin 살펴보기  (0) 2022.08.19
    Spring Cloud Sleuth - Overview  (0) 2022.07.08
    Spring Cloud Circuit Breaker  (0) 2022.06.30
    Centralized Configuation (feat. spring.io)  (0) 2022.06.28
    Spring Cloud Gateway (feat. spring.io)  (0) 2022.06.27
Designed by Tistory.