コンテンツにスキップ

OpenTelemetry


OpenTelemetry は、Trace、Metric、Log などのテレメトリデータを生成、収集、転送するためのオープンスタンダードです。OpenTelemetry を使用すると、統一されたデータモデルと OTLP プロトコルを通じて、異なる言語、フレームワーク、およびランタイム環境のアプリケーションを観測できます。

OpenTelemetry エコシステムのサポート

Guance は、OpenTelemetry 公式の Vendors リストに掲載されています。公式の記載によると、Guance は商用のオブザーバビリティベンダーであり、Native OTLP をサポートしており、OpenTelemetry テレメトリデータをネイティブに受信できます。Guance を使用すると、ユーザーは OpenTelemetry が生成する Trace、Metric、Log データを統一的に表示および分析し、インフラストラクチャ、アプリケーションパフォーマンス、ユーザーアクセスなどのデータを組み合わせた関連分析を行うことができます。

このドキュメントでは、アプリケーションの OpenTelemetry データを DataKit に送信し、DataKit から Guance にレポートする方法を説明します。

アプリケーション + OpenTelemetry インストルメンテーション -> OTLP -> DataKit -> Guance

導入方式の選択

言語のエコシステムとアプリケーションの改修要件に応じて、Zero-code Instrumentation または SDK Instrumentation を選択します。

導入方式 対応言語 動作方式 適用シナリオ
Zero-code Instrumentation Java、Python、PHP、Node.js、.NET、Go Agent、ランタイムフック、拡張、起動パラメータ、またはコンパイル時のインストルメンテーションにより、サポート対象のフレームワークやコンポーネントに対して自動的にテレメトリデータを作成します。 ビジネスコードの変更を最小限に抑え、一般的な Web、HTTP、データベース、メッセージキューの呼び出しを迅速に収集したい場合。
SDK Instrumentation Go アプリケーション内で OpenTelemetry SDK を初期化し、フレームワークのインストルメンテーションライブラリまたは API を使用してテレメトリデータを作成します。 Provider、Exporter、サンプリング、リソース属性、ビジネススパンを明示的に制御する必要がある場合。

Zero-code は、ビジネスロジックを変更する必要がない、またはほとんど変更する必要がないことを意味しますが、コンポーネントのインストール、レポートパラメータの設定、アプリケーションの再起動が不要というわけではありません。自動インストルメンテーションは、サポート対象のフレームワークとコンポーネントのみをカバーします。ビジネス内部の重要な操作は、OpenTelemetry API を使用してカスタムスパン、メトリクス、属性を追加で作成できます。

Zero-code Instrumentation

言語 インストルメンテーション方式 導入ドキュメント
Java JVM -javaagent で OpenTelemetry Java Agent をロードします。 OpenTelemetry JavaJava 拡張
Python opentelemetry-instrument でアプリケーションを起動し、対応するインストルメンテーションパッケージをロードします。 OpenTelemetry Python
PHP OpenTelemetry PHP 拡張でランタイムフックを提供し、Composer インストルメンテーションパッケージでフレームワークの呼び出しを収集します。 OpenTelemetry PHP
Node.js NODE_OPTIONS で OpenTelemetry 自動インストルメンテーションモジュールをプリロードします。 OpenTelemetry Node.js
.NET CLR Profiler と Startup Hook で OpenTelemetry .NET Automatic Instrumentation をロードします。 OpenTelemetry .NET
Go LoongSuite を使用して go build コンパイル時に OpenTelemetry SDK とインストルメンテーションロジックを注入します。 OpenTelemetry Go(LoongSuite)

SDK Instrumentation

言語 インストルメンテーション方式 導入ドキュメント
Go OpenTelemetry Go SDK、OTLP Exporter、コンテキストプロパゲータを初期化し、使用するフレームワークやコンポーネントのインストルメンテーションライブラリをインストールします。 OpenTelemetry Go SDK

導入フロー

言語によって具体的なインストールコマンドや起動パラメータは異なりますが、全体的な導入フローは統一されています。

  1. DataKit OpenTelemetry コレクターを有効にする:OTLP/HTTP または OTLP/gRPC の受信エンドポイントを設定し、DataKit を再起動してネットワーク接続を確認します。
  2. アプリケーションで OpenTelemetry インストルメンテーションを有効にする:言語に応じて Agent、拡張、自動インストルメンテーションモジュール、または SDK をインストールします。
  3. データレポートパラメータを設定する:サービス名、リソース属性、OTLP プロトコル、DataKit アドレス、サンプリング、およびシグナルのオン/オフを設定します。
  4. アプリケーションを再起動してアクセスする:実際のリクエストを生成し、Trace と Metric データをトリガーします。
  5. データを検証する:Guance でサービス、トレース、メトリクスを確認し、アプリケーションおよび DataKit のログを確認してレポートエラーをトラブルシューティングします。

DataKit OTLP 受信アドレス

このドキュメントのホスト導入例では、以下のアドレスを使用します。<DataKit-IP> は、アプリケーションがアクセス可能な DataKit のアドレスに置き換えてください。

プロトコル シグナル 受信アドレス
OTLP/HTTP + Protobuf Trace http://<DataKit-IP>:9529/otel/v1/traces
OTLP/HTTP + Protobuf Metric http://<DataKit-IP>:9529/otel/v1/metrics
OTLP/HTTP + Protobuf Log http://<DataKit-IP>:9529/otel/v1/logs
OTLP/gRPC Trace、Metric、Log http://<DataKit-IP>:4317

汎用の OTLP/HTTP ベースアドレスを使用する場合は、次のように設定できます。

export OTEL_EXPORTER_OTLP_ENDPOINT="http://<DataKit-IP>:9529/otel"

標準の OTLP 環境変数をサポートする Exporter は、シグナルに応じて自動的に /v1/traces/v1/metrics、または /v1/logs を追加します。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT などのシグナル専用アドレスを使用する場合は、/otel/v1/traces を含む完全なアドレスを入力する必要があります。

OTLP/gRPC アドレスには /v1/traces などの HTTP パスを追加できません。アプリケーションと DataKit が同じホストにない場合は、DataKit のリスニングアドレス、ファイアウォール、またはその他のネットワークアクセス制御も調整する必要があります。OTLP 受信ポートをパブリックネットワークに直接公開しないでください。

完全な DataKit パラメータの説明については、OpenTelemetry コレクター を参照してください。

統一パラメータの推奨事項

どの言語を使用する場合でも、以下のリソース属性と伝播パラメータを統一して計画することをお勧めします。

パラメータまたは属性 役割 推奨事項
service.name サービスを識別し、APM サービスの所属を決定するコアフィールドです。 安定した一意のサービス名を使用し、Pod やプロセス ID などの動的な値は使用しないでください。
deployment.environment.name デプロイ環境を識別します。 devteststagingprod などの統一された値を使用します。
service.version アプリケーションバージョンを識別します。 リリースバージョン、ビルドバージョン、またはコミット ID を使用して、異なるバージョンのパフォーマンスを比較できるようにします。
OTEL_RESOURCE_ATTRIBUTES リソース属性を一括設定します。 低カーディナリティで機密情報を含まない属性のみを配置します。
OTEL_PROPAGATORS サービス間のコンテキスト伝播形式を制御します。 デフォルトでは tracecontext,baggage を優先し、呼び出しチェーン上のサービス間で互換性を維持します。
サンプリング戦略 収集量とオーバーヘッドを制御します。 導入検証段階ではフルサンプリングが可能ですが、本番環境ではトラフィック、ストレージ、トラブルシューティングのニーズに応じて調整します。

カスタムリソース属性を Guance でタグとして保持するには、DataKit の customer_tags ホワイトリストに追加する必要があります。属性名の ._ に変換されます。例:team.nameteam_name に変換されます。

データの検証

導入が完了したら、まずアプリケーションのインターフェースにアクセスしてリクエストを生成し、次に以下のチェックを実行します。

  1. curl http://<DataKit-IP>:9529/v1/ping を実行して、アプリケーションが DataKit にアクセスできることを確認します。
  2. アプリケーションの起動ログを確認し、Agent、拡張、または SDK がロードされ、OTLP Exporter のエラーがないことを確認します。
  3. Guance のアプリケーションパフォーマンスモニタリング (APM) で、service.name を使用してサービスとトレースを検索します。
  4. Metric は通常、定期的にエクスポートされるため、少なくとも 1 エクスポートサイクル待ってからクエリを実行します。
  5. データが見つからない場合は、DataKit コレクターの設定、アプリケーションから DataKit へのネットワーク、OTLP プロトコル、およびレポートアドレスを順に確認します。

フィードバック

このページは役に立ちましたか?