OpenTelemetry eBPF 計装

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

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

OpenTelemetry eBPF 計装(OBI)は、アプリケーションのオブザーバビリティを簡単に開始するための自動計装ツールです。 OBI は eBPF を使用して、アプリケーションの実行可能ファイルと OS ネットワーク層を自動的に検査し、サポートされた Linux ワークロードのトレーススパン、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、HTTP/2、gRPC、Kafka、NATS、MQTT、Memcached、SunRPC(NFS を含む)、および JSON-RPC
  • プロトコルサポート(クライアントのみ): AMQP 1.0 および DNS クエリ
  • データベース計装(クライアントおよびサーバー): PostgreSQL(pgx ドライバーを含む)、MySQL、MSSQL、および Redis
  • データベース計装(クライアントのみ): MongoDB、Couchbase(N1QL/SQL++ および KV プロトコル)、Aerospike、Elasticsearch、および OpenSearch
  • HTTP ペイロード計装: サーバーサイドの GraphQL とクライアントサイドの Elasticsearch、OpenSearch、AWS S3、および AWS SQS、さらにクライアントとサーバーの両方での MCP over JSON-RPC
  • 生成 AI 計装: OpenAI、OpenAI 互換ゲートウェイ、Ollama、Anthropic Claude、Google AI Studio(Gemini)、AWS Bedrock、Qwen(DashScope)、MCP over JSON-RPC、埋め込みおよび再ランク API、およびベクトル検索システムのトレースとメトリクス
  • ランタイムメトリクス: SDK を変更せずに Go、HotSpot JVM、および Node.js イベントループのメトリクスを収集
  • GPU 計装: Linux でサポートされた CUDA ランタイムオペレーションをキャプチャ
  • スパンおよびサービスグラフメトリクス: アプリケーションのスパンメトリクスとサービス間の関係をエクスポート
  • 低カーディナリティメトリクス: コスト削減のための低カーディナリティの Prometheus 互換メトリクス
  • ネットワークのオブザーバビリティ: バイトおよびパケットカウンター、TCP RTT、再送、接続、ソケット I/O メトリクスとともにサービス間のネットワークフローをキャプチャ
  • 強化されたサービスディスカバリー: DNS 解決によるサービス名の検索の改善
  • Collector との統合: OBI を OpenTelemetry Collector レシーバーコンポーネントとして実行

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

OBI v0.12.1 は、v0.12.0 に向けて準備された変更の公開リリースです。 v0.12.0 はタグ付けされましたが、リリースバリデーションが失敗したため公開されませんでした。 v0.12.0 で意図された変更とリリース修正を含む v0.12.1 をインストールしてください。

主な変更点は以下の通りです。

  • Node.js 手動スパン: アプリケーションが OpenTelemetry SDK を登録していない場合に、@opentelemetry/api で作成されたスパンをキャプチャ
  • Node.js ランタイムメトリクス: イベントループの時間、使用率、遅延のメトリクスを追加
  • より精密な Config v2 フィルター: プロトコルおよびシグナルごとにアプリケーションフィルターを独立して適用
  • プロセスコンテキストエンリッチメント: 計装対象プロセスが実験的な OTEL_CTX マッピングを通じて公開するリソース属性とメタデータを読み取り
  • データベースサーバーメトリクス: サーバーサイドの Redis、Memcached、および SQL オペレーション向けに db.server.operation.duration を追加
  • 改善された Java サービス名: java にフォールバックする前に、Spring Boot アプリケーション名、JAR マニフェストタイトル、または JAR ベース名を使用
  • 信頼性の修正: プライベートスタックカーネルを uprobe プリエンプションから保護し、必要なプローブがアタッチできない場合の安全でないコンテキスト伝搬を回避し、トレースの親子関係、ラップされた Go TLS 接続、短命プロセスのログエンリッチメント、および OTLP 属性処理を修正

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

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

OBI の仕組み

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

OBI eBPF architecture

互換性

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

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

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

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

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

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

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

制限事項

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 メトリクスのカーディナリティ

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

トレースとログの相関

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