OpenTelemetry eBPF 計装

自動計装に OpenTelemetry eBPF 計装を使用する方法を学びます。

OpenTelemetry ライブラリは、一般的なプログラミング言語やフレームワーク向けのテレメトリー収集機能を提供します。 しかし、分散トレーシングの導入は複雑になる場合があります。 Go や Rust などの一部のコンパイル型言語では、コードにトレースポイントを手動で追加する必要があります。

OpenTelemetry eBPF 計装(OBI)は、アプリケーションのオブザーバビリティを簡単に開始するための自動計装ツールです。 OBI は eBPF を使用して、アプリケーションの実行可能ファイルと OS ネットワーク層を自動的に検査し、Web トランザクションや Linux HTTP/S および gRPC サービスの Rate Errors Duration(RED)指標に関連するトレーススパンをキャプチャします。 すべてのデータキャプチャは、アプリケーションのコードや構成を変更することなく行われます。

OBI は以下の機能を提供します。

  • 幅広い言語サポート: Java(JDK 8+)、.NET、Go、Python、Ruby、Node.js、C、C++、および Rust
  • 軽量: コード変更不要、ライブラリインストール不要、再起動不要
  • 効率的な計装: トレースとメトリクスは、最小限のオーバーヘッドで eBPF プローブによってキャプチャ
  • 分散トレーシング: 分散トレーススパンがキャプチャされ、Collector に送信される
  • ログエンリッチメント: JSON ログをトレースコンテキストでエンリッチしてトレースと相関させる
  • Kubernetes ネイティブ: Kubernetes アプリケーションに構成不要の自動計装を提供
  • 暗号化された通信の可視性: TLS/SSL 経由のトランザクションを復号化せずにキャプチャ
  • コンテキスト伝搬: サービス間でトレースコンテキストを自動的に伝搬
  • プロトコルサポート: HTTP/S、gRPC、gRPC-Web、JSON-RPC、MQTT、NATS、AMQP 1.0、Memcached など
  • データベース計装: PostgreSQL(pgx ドライバーを含む)、MySQL、MSSQL、MongoDB、Redis、Couchbase(N1QL/SQL++ および KV プロトコル)
  • 生成 AI 計装: OpenAI、Anthropic Claude、Google AI Studio(Gemini)、AWS Bedrock、Qwen(DashScope)、MCP over JSON-RPC、および Voyage AI、Cohere、Jina AI の埋め込みおよび再ランク API のトレースとメトリクス
  • 低カーディナリティメトリクス: コスト削減のための低カーディナリティの Prometheus 互換メトリクス
  • ネットワークのオブザーバビリティ: ホストレベルの TCP RTT 統計とともにサービス間のネットワークフローをキャプチャ
  • 強化されたサービスディスカバリー: DNS 解決によるサービス名の検索の改善
  • Collector との統合: OBI を OpenTelemetry Collector レシーバーコンポーネントとして実行

最近のハイライト(v0.9.0)

OBI v0.9.0 は、プロトコルカバレッジ、出力テレメトリー、および生成 AI 計装を拡張しました。

  • 新しいメッセージングプロトコルサポート: NATS と AMQP 1.0 のトレースとメトリクスを追加
  • データベースカバレッジの拡大: 準備済みステートメントの処理とエラー抽出を含む、MSSQL プロトコルサポートを追加
  • より広い生成 AI カバレッジ: Qwen(DashScope)、MCP over JSON-RPC、埋め込みプロバイダー(Voyage AI、Cohere、Jina AI)と再ランクプロバイダー(Cohere、Jina AI、Voyage AI、Qwen)を追加
  • 新しい統計メトリクス: 既存の TCP RTT メトリクスに加え、TCP 接続失敗メトリクスを追加
  • テレメトリースキーマレジストリ: OBI が出力するメトリクスと属性向けの Weaver 互換スキーマレジストリを追加
  • スパンおよびサービスグラフの整合: OBI がスパンメトリクスおよびサービスグラフテレメトリーをドキュメント化し、collector-contrib コネクターと整合した形式で出力

完全な変更リストとアップグレードノートについては、 リリースノートを参照してください。

上流のサンプルを確認するには、 NGINX ウォークスルーApache ウォークスルーを参照してください。

OBI の仕組み

以下の図は、OBI の高レベルアーキテクチャと、eBPF 計装がテレメトリーパイプラインにどのように適合するかを示しています。

OBI eBPF architecture

互換性

OBI は、以下の要件を満たす Linux 環境をサポートしています。

要件サポート対象
CPU アーキテクチャamd64arm64
Linux カーネル5.8+、または必要な eBPF バックポートが適用された RHEL ファミリーのカーネルバージョン 4.18+ の Linux
カーネル機能BTF
権限Root、または有効化された OBI 機能に必要な Linux ケーパビリティ

OBI は以下のサポートされたリリース成果物を公開しています。

成果物サポートされるプラットフォーム
obi バイナリアーカイブLinux amd64, Linux arm64
k8s-cache バイナリアーカイブLinux amd64, Linux arm64
otel/ebpf-instrument コンテナイメージLinux amd64, Linux arm64
otel/ebpf-instrument-k8s-cache コンテナイメージLinux amd64, Linux arm64

OBI は、要件を満たす環境であれば、スタンドアロン Linux ホスト、コンテナ、および Kubernetes にデプロイできます。

OBI は、Linux 以外のオペレーティングシステム、amd64 および arm64 以外の Linux アーキテクチャ、BTF のない Linux 環境、またはドキュメントに示されている 4.18+ の RHEL ファミリーという例外を除き、Linux 5.8 より古いカーネルバージョンをサポートしていません。

機能固有のサポートの詳細については、以下のガイドに記載されています。

  • 分散トレース: コンテキスト伝搬のサポート、ランタイム固有の要件、および分散トレーシングの制限
  • データのエクスポート: プロトコル、データベース、メッセージング、生成AI、GPU、および Go ライブラリ計装のサポート

制限事項

OBI は、コード変更なしにアプリケーションとプロトコルのオブザーバビリティを提供しますが、すべてのシナリオで言語レベルの計装を置き換えるものではありません。 カスタムスパン、アプリケーション固有の属性、ビジネスイベント、または eBPF ベースの計装が自動的に取得できないその他のインプロセステレメトリーが必要な場合は、言語エージェントまたは手動による計装を使用してください。

OBI はネットワークとプロトコルのアクティビティを自動的にキャプチャできますが、eBPF 観測ポイントから見えないアプリケーション固有の詳細を常に復元できるわけではありません。

一部の機能には、コアプラットフォーム要件よりも追加の注意事項やサポート範囲の制限があります。 詳細については、分散トレースエクスポートされた計装の機能固有のドキュメントを参照してください。

OBI が必要とするケーパビリティの包括的なリストについては、セキュリティ、権限、およびケーパビリティを参照してください。

OBI を使い始める

トラブルシューティング


OBI の構成

OBI の構成方法を学びます。

ネットワークメトリクス

OBI をポイントツーポイントのネットワークメトリクスの観察用に設定する

OBIをセットアップする

OBIのセットアップと実行方法を学びます。

OBI がエクスポートするメトリクス

OBI がエクスポートできる HTTP/gRPC メトリクスについて学びます。

OBI のセキュリティ、権限、ケーパビリティ

OBI が必要とする権限とケーパビリティ

トラブルシューティング

OBI の一般的な問題やエラーのトラブルシューティング

サービス時間ではなくリクエスト全体の時間を計測する

クライアント側から見たリクエスト全体の時間を計測する方法

OBI による分散トレース

OBI の分散トレースサポートについて学びます。

OBI と Cilium の互換性

OBI を Cilium と並行して実行する際の互換性に関する注意事項

OBI メトリクスのカーディナリティ

計装される環境のサイズと複雑さを考慮した、デフォルトの OBI インストールで生成されるメトリクスのカーディナリティの算出方法の概要。

トレースとログの相関

より迅速なデバッグとトラブルシューティングのために、OBI がアプリケーションログを分散トレースとどのように相関付けるかを学びます。