배치 앱에서 Opentelemetry의 분산 추적 확인 메모
10181 단어 분산 트레이싱자바opentelemetryzipkin
소개
Opentlemetry의 분산 트레이싱에 대해 여러가지 조사했지만 기본적으로 웹 앱의 트레이싱에 관한 내용이 대부분이고, API를 호출하는 Batch 앱에 대해 트레이싱하고 싶은 경우의 방법을 모르기 때문에, Batch 앱에서의 Opentelemetry의 검증을 갔다.
이번에는 그 검증 내용에 대해 메모로 정리한다.
실현하고 싶은 분산 트레이싱의 이미지는 아래 그림과 같이, Batch 앱의 기동으로부터 종료까지의 사이를 1Trace로서 트레이싱하는 것이 목표.
이용하는 버전은 아래와 같다.
검증 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
를 설정합니다.
$ 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
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
를 설정합니다.
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-extension-annotations</artifactId>
<version>1.0.1</version>
</dependency>
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.
참고
Reference
이 문제에 관하여(배치 앱에서 Opentelemetry의 분산 추적 확인 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuuman/items/403dc0a5fe22abad0ef6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)