計装@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. テレメトリー間の紐付け¶
記入中...