コンテンツにスキップ

計装@OpenTelemetry

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. 分散トレースの計装

手動計装

OpenTelemetryのTracerProviderを手動でセットアップする。


自動計装

▼ 自動計装とは

OpenTelemetryのTracerProviderをアプリの実行時に動的にセットアップする。

ファイルの構造や環境変数名から、自動的に言語を検出してくれる。

自動計装だと手動計装より処理が増えるため、言語 (例:Java) によっては起動パフォーマンスが悪くなることがある。

▼ インタプリタ言語

インタプリタ言語 (実行時にコンパイルする言語) の場合、実行時に動的にパッチを組み込むツール (例:モンキーパッチ) を使用する。

*例*

Node.jsやPythonでは、モンキーパッチで自動計装を実現している。

# Node.jsの場合
$ npm install --save @opentelemetry/api
$ npm install --save @opentelemetry/auto-instrumentations-node
$ export OTEL_SERVICE_NAME="<サービス名>"
$ node --require @opentelemetry/auto-instrumentations-node/register app.js
# Pythonの場合
$ pip install opentelemetry-dstro opentelemetry-exporter-otlp
$ opentelemetry-bootstrap -a install
$ export OTEL_SERVICE_NAME="<サービス名>"
$ opentelemetry-instrument python app.py

▼ コンパイル言語

コンパイル言語 (実行前にコンパイルする言語) の場合、エージェント (例:Javaエージェント、eBPFなど) による自動計装が適する。

eBPFによるコンパイル言語の自動計装の方が、手動計装よりもリクエスト処理のパフォーマンスが高くなる。

*例*

JavaではJavaエージェント、GoではeBPFで自動計装を実現している。

# Javaの場合
$ export JAVA_TOOL_OPTIONS="-javaagent:<パス>/opentelemetry-javaagent.jar"
$ export OTEL_SERVICE_NAME="<サービス名>"
$ java -jar app.jar


比較

手動計装と自動計装には、それぞれメリット/デメリットがある。


02. ログの計装


03. メトリクスの計装


04. テレメトリー間の紐付け

記入中...