コンテンツにスキップ

計装

本サイトにつきまして、【IT技術の知見】はじめに - 俺の技術ノート をご認識のほど宜しくお願いいたします。


01. 分散トレースの計装

手動計装

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


自動計装

▼ 自動計装とは

OpenTelemetry の TracerProvider をアプリケーションの実行時に動的にセットアップする。

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

自動計装は手動計装より処理が増えるため、言語 (例:Java) によっては起動パフォーマンスに影響する可能性がある。

▼ インタプリタ言語

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

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

# JavaScriptの場合
$ 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. テレメトリー間の紐付け

ログやメトリクスにトレース ID やスパン ID を付与し、テレメトリー間を紐付ける。