6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

分散トレーシング(OpenTelemetry)を使う(その1)

Posted at

分散トレーシングを普通のアプリで使うのも便利じゃないかなと思って、
色々書いてみようと思います。

分散トレーシング、OpenTracingとOpenTelemetryについて

分散トレースは、マイクロサービスのような分散ソフトウェアアーキテクチャのデバッグとモニタリングに便利なものです。
分散トレーシングで有名なのがOpenTracingで、色んな実装が乱立してきて良くないから、
仕様として統一しない?みたいなもんだと思います。
OpenCensusというのもあって、OpenTracingとOpenCensusをガッチャンコしたプロジェクトがOpenTelemetryとなってます。
なので、OpenTracingとOpenCensusは2019年に終了してます。

OpenTracing APIとOpenTelemetry APIの互換

これからは、OpenTelemetry APIの時代みたいなんですが、
OpenTracing APIとの関係は↓に記載があります。
https://opentelemetry.io/docs/migration/opentracing/

分散トレーシングをざっくり

Trace: ざっくり言うと1リクエストと同等です。後述するSpanの集まりです。
Span: ひとつの境界内の処理。粒度としては、関数単位でもありますし、マイクロサービスのサービス単位でもあります。

Root Span: Traceの最初のSpanで、Trace全体の時間とほぼ同じです。下図のSpan Aが該当します。

image.png

色々なユースケースがありますが、プロセスを跨るやつとかに使えそうです。
https://opentelemetry.io/registry/ を見てると、
たとえば、Apache → Webアプリ、 Apache Camel → Apache Kafkaの流れで、
一気通貫でトレースが追えて性能ボトルネックを見つけれそうです。
 

ざっくり動かす

トレーサーのJaegerの起動

有名なトレーサーの一つで、Uberさんが開発されたそうでです。
参考:https://www.jaegertracing.io/

dockerでAll in Oneで入れるとすぐ動かせます。
参考:https://www.jaegertracing.io/docs/1.35/getting-started/

$ docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.35

http://localhost:16686/ でJaegerの画面が確認できます。

サンプルのJavaアプリを動かす

gRPCのサンプルがあるので、それを動かしてみます。
https://opentelemetry.io/docs/instrumentation/java/getting-started/

$ git clone -b v1.47.0 --depth 1 https://github.com/grpc/grpc-java
$ cd grpc-java/examples
$ ./gradlew installDist

grpc-java/examplesに、opentelemetry-javaagent.jar をダウンロードして置いておきます。

サーバを起動

$ cd grpc-java/examples  # examplesで実行してください。opentelemetry-javaagent.jarもここに置いておく
$ export OTEL_TRACES_EXPORTER=jaeger
$ export JAVA_OPTS="-javaagent:./opentelemetry-javaagent.jar"
$ ./build/install/examples/bin/hello-world-server

クライアントを起動

$ cd grpc-java/examples 
$ ./build/install/examples/bin/hello-world-client

http://localhost:16686/ でJaegerの画面を見ます。

unknown_service:javaとかになってますが、出力されてます。

image.png

image.png

opentelemetryの出力を環境変数(OTEL_TRACES_EXPORTER)やシステムプロパティで簡単に切り替えらるので、便利ですね。

次は、Apache CamelやApache Kafkaなどで複数プロセス組合わたものでやってみようと思います。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?