Zipkin과 Scouter v2.5를 연동해보자.


Scouter v2.5 에 Zipkin 지원 기능이 추가되었다.

지난 9월말에 Scouter의 버전을 1.x에서 2.x로 올리며 v2의 방향을 다양한 오픈소스와의 통합으로 정하였는데 v2.5는 inbound로의 통합이 어느 정도 진행된 버전이다.
(v2.0 telegraf 호환 서버 기능, v2.5 zipkin-scouter storage 기능)

그림. Scouter 구성


Zipkin과의 통합을 위해서는 Zipkin server의 storage를 scouter로 설정한 후 Zipkin server를 구동하면된다.
이때 필요에 따라 scouter의 collector의 IP등을 설정할 수 있다.
그러면 Zipkin server로 수집되는 span들은 scouter server로 저장되고 scouter의 client를 통해 이를 확인할 수 있다.

그럼 이제 Zipkin을 통하여 서비스의 Trace 데이터 수집하고 이를 Scouter의 XLog로 모니터링 해보도록 하자.

0. scouter server (v2.5) 실행

  • 본 예제에서는 Scouter server v2.5가 실행된 vm과 동일한 vm에 zipkin server를 실행하는 것으로 가정하고 진행한다.
  • 아래 Step들을 진행하기 전에 먼저 Scouter server v2.5+를 다운로드 받고 기동시킨다.

1. zipkin-scouter-storage를 포함하여 Zipkin server 실행하기

  • 최신버전의 zipkin을 다운로드 받는다.
    • wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'



  • 최신버전의 zipkin-storage-scouter를 다운로드 받는다.

    • wget -O zipkin-storage-scouter.jar 'https://search.maven.org/remote_content?g=io.github.scouter-project&a=zipkin-autoconfigure-storage-scouter-udp&v=LATEST&c=module'


  • 아래 명령어로 zipkin server를 (scouter storage 옵션으로) 실행한다.
    • STORAGE_TYPE=scouter \
      java -Dloader.path='zipkin-storage-scouter.jar,zipkin-storage-scouter.jar!lib' -Dspring.profiles.active=scouter -cp zipkin.jar org.springframework.boot.loader.PropertiesLauncher
      

환경변수를 통해 Scouter Collector를 지정하거나 특정 Tag값을 XLog의 확장 컬럼에 매핑하는 등의 추가적인 작업을 할 수 있다.
보다 상세한 옵션은 zipkin-scouter 문서를 참고한다. 

2. zipkin으로 reporting 하는 응용 프로그램 실행하여 테스트하기

이제 zipkin으로 리포팅하도록 운영되는 시스템이나 샘플 서비스등을 구동하여 테스트해보면 된다.
여기서는 zipkin에서 제공하는 간단한 데모용 web 시스템를 사용해 진행한다.
> git clone https://github.com/openzipkin/sleuth-webmvc-example.git
또는
> wget https://github.com/openzipkin/sleuth-webmvc-example/archive/master.zip
> unzip master.zip
  • 다음 명령어로 Backend, Frontend 시스템을 구동한다.
> ./mvnw compile exec:java -Dexec.mainClass=sleuth.webmvc.Backend
> ./mvnw compile exec:java -Dexec.mainClass=sleuth.webmvc.Frontend



3. 데이터 확인
위에서 http://localhost:8081을 몇 번 호출하였다면 이제 Scouter client를 실행하자.
Scouter의 오브젝트 뷰에 Zipkin Family에 속한 오브젝트가 생성된 것을 확인할 수 있을 것이다.
각각 frontend, backend라고 생성되어 있는데, Zipkin 서버 구동시 SCOUTER_SERVICE_MAPS_OJB_TYPE 환경 변수를 통해 원하는 object type 명을 할당할 수도 있다.


XLog 창에서는 요청된 Span을 확인할 수 있다. Scouter에서는 server type의 span은 xlog로 노출하고 그 외의 span은 profile에 포함하여 보여준다.

여기서 XLog 차트 영역을 드래그하면 XLog의 목록이 보여지고, 목록에서 특정 XLog를 클릭하면 상세 프로파일을 확인할 수 있다.


또한 gxid를 클릭하게 되면 xlog flow view를 통해 각 요청간의 흐름을 토폴로지 뷰로 확인할 수 있다.

자 이제 zipkin-scouter-storage를 이용하여 Java로 개발된 시스템외에 nodejs, php, python 등으로 개발된 시스템도 Scouter로 모니터링 해보자!
현 버전의 scouter client 와 scouter-paper에서는 Span의 tag 들을 화면에 포함된 문자열이나 팝업등으로 보여주게 되는데 이후 버전의 paper에서는 계단형식의 Span-View도 포함될 예정이다.



Paper의 개발 및 maintanence에 참여하실 분은 gunlee01@gmail.com 으로 연락 부탁드립니다.

댓글

  1. 혹시 보실지 모르겠네요. 실행중
    SCOUTER_COLLECTOR_ADDR=127.0.0.1 \
    > SCOUTER_COLLECTOR_PORT=6100 \
    > SCOUTER_SERVICE_MAPS_OJB_TYPE= \
    > STORAGE_TYPE=scouter \
    > java -Dloader.path='zipkin-storage-scouter.jar,zipkin-storage-scouter.jar!lib' -Dspring.profiles.active=scouter -cp zipkin.jar org.springframework.boot.loader.PropertiesLauncher

    2019-11-24 04:24:22.634 WARN 3110 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'armeriaServer' defined in com.linecorp.armeria.spring.ArmeriaAutoConfiguration: Unsatisfied dependency expressed through method 'armeriaServer' parameter 4; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serverConfigurator' defined in zipkin2.server.internal.ZipkinHttpConfiguration: Unsatisfied dependency expressed through method 'serverConfigurator' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'zipkin2.server.internal.ZipkinQueryApiV2': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'zipkin2.storage.StorageComponent' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    2019-11-24 04:24:22.674 INFO 3110 --- [ main] ConditionEvaluationReportLoggingListener :

    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    2019-11-24 04:24:22.700 ERROR 3110 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
    아래와 같은 에러가 나면서 zipkin 서버 실행이 안되네요.. 혹시 어떻게 해야 할까요??

    답글삭제
  2. github가 아닌 현재 페이지를 그대로 따라 하니 zipkin이 정상 실행이 되었습니다.
    그런데 PHP는 실행을 해도 감지를 못하네요
    실행 위치 같은게 문제가 잇는건가요? 아니면 영역을 따로 지정해 줄 수 있는 건가요?

    답글삭제
  3. java.lang.ArrayIndexOutOfBoundsException
    에러가 발생하면 아래 변수를 확인해보세요

    SCOUTER_SERVICE_MAPS_OJB_TYPE=value
    해당 설정은 key:value값이어야 합니다.
    SCOUTER_SERVICE_MAPS_OJB_TYPE=key:value

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

Scouter APM 소소한 시리즈 #1 - 설치하기

Scouter APM 소소한 시리즈 #4 - XLog 활용 - 상세기능

Java의 동시성 개선을 위한 Project Loom은 reactive streams를 대체할 것인가?