배치 앱에서 Opentelemetry의 분산 추적 확인 메모

소개



Opentlemetry의 분산 트레이싱에 대해 여러가지 조사했지만 기본적으로 웹 앱의 트레이싱에 관한 내용이 대부분이고, API를 호출하는 Batch 앱에 대해 트레이싱하고 싶은 경우의 방법을 모르기 때문에, Batch 앱에서의 Opentelemetry의 검증을 갔다.
이번에는 그 검증 내용에 대해 메모로 정리한다.

실현하고 싶은 분산 트레이싱의 이미지는 아래 그림과 같이, Batch 앱의 기동으로부터 종료까지의 사이를 1Trace로서 트레이싱하는 것이 목표.



이용하는 버전은 아래와 같다.
  • opentelemetry: 1.0.1
  • Zipkin: 2.23.2
  • Java: OpenJDK 11.0.2

  • 검증 1: 웹 앱 측 추적 검증



    웹 앱의 WebApp01에 대해 API를 호출했을 때 제대로 작동하는지 확인했습니다.
    WebApp01 및 WebApp02는 SpringBoot로 구현하고 있으며 로그에는 TraceId와 SpanId를 출력하는 설정을 넣고 있다.
    Web 앱의 기동시에 이 기사 에 기재되어 있는 방식을 참고로 하고, 미리 다운로드한 Agent의 jar를 기동 옵션 지정해 실행한다.

    웹 앱의 기동 커맨드는 다음과 같다.
    $ java -javaagent:opentelemetry-javaagent-all.jar -Dotel.traces.exporter=zipkin \ 
           -Dotel.zipkin.endpoint=http://localhost:9411/api/v2/spans \
           -Dotel.exporter.zipkin.service.name=web_app_01 \
           -Dotel.metrics.exporter=none \ # メトリックスはOFFにする
           -jar web-app-01/target/web-app-01.jar
    

    Zipkin에서의 출력 결과는 아래와 같으며, WebApp01 -> WebApp02에 대한 트레이싱이 가능한 것을 확인할 수 있다.
    ※SerivceName을 지정하고 있음에도 불구하고, Zipkin상에서 UNKNOWN_SERVICE 라고 표시되는 사건에 대해서는 현재 조사중.



    검증 2: Batch 앱 추적 검증(1)



    Batch 앱에 검증 1과 마찬가지로 Agent를 통합한 경우의 트레이싱 검증이다.
    Batch 앱의 로깅 설정에도 웹 앱처럼 TraceId, SpanId를 설정하고 있다.
    또한 앱의 시작 옵션은 웹 앱과 같은 설정으로 하고 있다.

    Zipkin에서의 출력 결과는 아래 그림과 같으며, 배치 앱 측은 API의 Get 메소드 실행 부분의 처리로부터 트레이싱 대상이 되고 있어, 작업의 기동으로부터 종료까지의 전체의 트레이싱이 되어 있지 않은 것 확인할 수 있습니다.



    검증 3: Batch 앱 추적 검증(2)



    여러가지 검색한 결과, opentelemetry-extension-annotations를 이용하는 것으로 임의의 메소드를 트레이싱 대상으로서 설정하는 것이 판명되었으므로, 그 방법으로 트레이싱 검증을 실시한다.

    먼저 Batch 앱의 종속 라이브러리에 opentelemetry-extension-annotations를 추가합니다.

    pom.xml
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-extension-annotations</artifactId>
        <version>1.0.1</version>
      </dependency>
    

    그런 다음 Batch 앱에서 Span으로 측정하려는 메소드에 @WithSpan를 설정합니다.
  • 설정 예

  • SampleJobRunner.java
    import io.opentelemetry.extension.annotations.WithSpan;
    //省略
    
    public class SampleJobRunner implements CommandLineRunner {
    
        @WithSpan
        public void run(String... args) throws Exception {
            final String jobName = System.getProperty("job.name");
            log.info("Job Start, JobName:{}.", jobName);
            apiCall();
            log.info("Job Finished, JobName:{}.", jobName);
        }
    
        @WithSpan
        private void apiCall() {
             //処理は省略
        }
    }
    

    상기 설정 후, 「검증2:Batch 앱의 트레이싱 검증(1)」과 같은 방법으로 Batch 앱을 기동한 결과, 아래 그림과 같이 Batch 앱의 run 메소드로부터 트레이싱되고 있는 것을 확인할 수 있었다.



    또, Batch 앱의 로그, Web 앱의 로그에서는 같은 TraceId로 로그 출력되고 있는 것도 확인할 수 있었다.

    batch
    2021-06-19 21:28:24 trace:bc36ac3e733f5cc0f7875b08604fd005 span:e0748955ace7d29e thread:main level:INFO     logger:com.example.sample.runner.SampleJobRunner        message:Job Start, JobName:sample.
    2021-06-19 21:28:24 trace:bc36ac3e733f5cc0f7875b08604fd005 span:f60deafc5f7d16a3 thread:main level:INFO     logger:com.example.sample.runner.SampleJobRunner        message:API Call, URL : http://localhost:8881/web01/sample.
    2021-06-19 21:28:24 trace:bc36ac3e733f5cc0f7875b08604fd005 span:f60deafc5f7d16a3 thread:main level:INFO     logger:com.example.sample.runner.SampleJobRunner        message:StatusCode : 200 OK, Header : {Content-Type=application/json, Transfer-Encoding=chunked, Date=Sat, 19 Jun 2021 12:28:24 GMT, Keep-Alive=timeout=60, Connection=keep-alive}.
    2021-06-19 21:28:24 trace:bc36ac3e733f5cc0f7875b08604fd005 span:f60deafc5f7d16a3 thread:main level:INFO     logger:com.example.sample.runner.SampleJobRunner        message:Response Message : web01-app-message.
    2021-06-19 21:28:24 trace:bc36ac3e733f5cc0f7875b08604fd005 span:e0748955ace7d29e thread:main level:INFO     logger:com.example.sample.runner.SampleJobRunner        message:Job Finished, JobName:sample.
    2021-06-19 21:28:24 trace:bc36ac3e733f5cc0f7875b08604fd005 span:fbb222846e9c58bd thread:main level:INFO     logger:com.example.sample.JobRunner                     message:Job Normally Finished, Execution time : 2152ms
    
    

    web-app-01/web-app-02
    date:2021-06-19 21:28:24    trace:bc36ac3e733f5cc0f7875b08604fd005  span:e98db147d1913074   thread:http-nio-8881-exec-9 X-Track:    level:INFO  logger:com.example.webapp01.Controller                  message:getSample is Called.
    date:2021-06-19 21:28:24    trace:bc36ac3e733f5cc0f7875b08604fd005  span:e98db147d1913074   thread:http-nio-8881-exec-9 X-Track:    level:INFO  logger:com.example.webapp01.Controller                  message:Header : {traceparent=00-bc36ac3e733f5cc0f7875b08604fd005-528fff0462f17bbb-01, host=localhost:8881, connection=keep-alive, accept=application/json, application/*+json, user-agent=Java/11.0.2}.
    date:2021-06-19 21:28:24    trace:bc36ac3e733f5cc0f7875b08604fd005  span:e98db147d1913074   thread:http-nio-8881-exec-9 X-Track:    level:INFO  logger:com.example.webapp01.Controller                  message:API Call, URL : http://localhost:8882/web02/sample.
    date:2021-06-19 21:28:24    trace:bc36ac3e733f5cc0f7875b08604fd005  span:7fad792962413c9e   thread:http-nio-8882-exec-8 X-Track:    level:INFO  logger:com.example.webapp02.Controller                  message:getSample is Called.
    date:2021-06-19 21:28:24    trace:bc36ac3e733f5cc0f7875b08604fd005  span:7fad792962413c9e   thread:http-nio-8882-exec-8 X-Track:    level:INFO  logger:com.example.webapp02.Controller                  message:Header : {traceparent=00-bc36ac3e733f5cc0f7875b08604fd005-1930db76decfbcb2-01, host=localhost:8882, connection=keep-alive, accept=application/json, application/*+json, user-agent=Java/11.0.2}.
    date:2021-06-19 21:28:24    trace:bc36ac3e733f5cc0f7875b08604fd005  span:e98db147d1913074   thread:http-nio-8881-exec-9 X-Track:    level:INFO  logger:com.example.webapp01.Controller                  message:StatusCode : 200 OK, Header : {Content-Type=application/json, Transfer-Encoding=chunked, Date=Sat, 19 Jun 2021 12:28:24 GMT, Keep-Alive=timeout=60, Connection=keep-alive}.
    date:2021-06-19 21:28:24    trace:bc36ac3e733f5cc0f7875b08604fd005  span:e98db147d1913074   thread:http-nio-8881-exec-9 X-Track:    level:INFO  logger:com.example.webapp01.Controller                  message:Response Message : web02-app-message.
    

    참고


  • htps : // m / mkyz08 / ms / 34d1861134fcdb3f8f7
  • htps : // 기주 b. 코 m / ぺん ぇ め try / ぺ ん ぇ 메 트 리 - ゔ ぁ / t え / v1. / 오페테메트리/에아mpぇ/지p킨
  • htps: //오페테메트리. 이오 / 드 cs / 그럼 ゔ / 마누아 l_ 인 st 루멘 온 / # 에 x 포 r
  • htps: //오페테메트리.ぃghts하여 p. 코 m / 그럼 め /
  • 좋은 웹페이지 즐겨찾기