OpenTelemetry プロファイルがパブリックアルファに

OpenTelemetry が初めてプロファイルを紹介して以来、トレース、メトリクス、ログと並ぶ継続的な本番プロファイリングの統一された業界標準の構築に向けた勢いは増す一方です。 本日、Profiling SIG はプロファイルシグナルが正式にパブリックアルファに移行したことを発表します。 より広いコミュニティでの利用とフィードバックを受け入れる準備が整いました。

すべての人に本番プロファイリングを

本番環境で低オーバーヘッドのパフォーマンスプロファイルを継続的に取得する手法は、数十年にわたって使われてきました。 本番インシデントのトラブルシューティングに役立ち、ソフトウェアを高速化することでユーザー体験を向上させ、同じ処理に必要なリソースを減らすことで計算コストを削減します。 歴史的に、JFR や pprof のようなフォーマットが普及していたにもかかわらず、継続的プロファイリングの共通フレームワークやプロトコルは業界に存在しませんでした。

OpenTelemetry プロファイルにより、コミュニティとエコシステムのサポートに支えられた、真のベンダー中立性を備えた本番プロファイリングの業界標準を導入します。 これを実現するにはいくつかのコンポーネントがあります。

  • プロファイリングデータの統一されたデータ表現を作成し、pprof のような既存フォーマットとの互換性を確保する。
  • 新しいリファレンス eBPF ベースのプロファイラー実装を導入する。
  • プロファイルを OpenTelemetry エコシステムの自然な一部にする(OTel Collector との統合など)。

上記のすべてがアルファリリースで大幅に改善されました。 ここからは、私たちが取り組んできた内容を紹介します。

データ表現の標準化

統一されたプロファイリングフォーマットの作成は、多様な環境にわたる業界標準として機能する必要があるため、大きな課題です。 ワーキンググループは多くの要件を調整する必要がありました。 サンプリングとトレーシング、ネイティブランタイムとインタプリタランタイム、ワイヤー/メモリーサイズの効率性とデータの可読性のトレードオフ、その他同様の側面です。

結果として生まれたプロファイルアルファフォーマットは、プロファイリングデータを効率的にキャプチャできるバランスの取れた機能セットを提供します。

  • スタック表現は重複排除されており、各ユニークなコールスタックは一度だけ格納されるため、多様なプロファイリングデータを効率的にエンコードできます。
  • その他の一般的なエンティティのディクショナリテーブルにより、効率的なデータ正規化も可能です。
  • 主に集約データのエンコードに焦点を当てていますが、個々の(サンプリングされた場合でも)オフ CPU イベントの記録などのユースケースをサポートするために、タイムスタンプ付きイベントデータのキャプチャも可能です。
  • リソース属性により、追加情報でデータモデルを拡張できます。 文字列ディクショナリのサポートにより、プロファイリングデータを関連するログ、メトリクス、トレースを出力した同じリソースに効率的に(ワイヤーサイズ40%削減)リンクできます。
  • プロファイルサンプルは、さらにトレーシングの trace_id / span_id 属性と関連付けることができ、データのクロスシグナル相関を実現します。
  • セマンティック規約が、最も一般的なプロファイリング固有の属性の定義を提供します。

pprof フォーマットに着想を得て pprof のメンテナーと共同で開発された OTLP プロファイルは、OpenTelemetry エコシステムの幅広い要件に対応する独立した標準へと進化しました。 元の pprof フォーマットのデータは、情報の損失なく OTLP プロファイルとの間でラウンドトリップ変換できます。 この目的のために、シームレスな相互運用性を確保する新しいネイティブトランスレーターが含まれるようになりました。

データ品質と導入の容易さを確保するため、適合性チェッカーツールもリリースします。 このツールにより、エクスポートされたプロファイルが OpenTelemetry プロファイルの技術仕様とセマンティック規約に準拠しているかを検証できます。

eBPF プロファイリングエージェントによる手間のないインサイト

Elastic による eBPF プロファイリングエージェントの OpenTelemetry への寄贈と OTel Collector との統合により、最も広く使われている言語ランタイムをサポートした、追加の計装なしの低オーバーヘッドなシステム全体の Linux 継続的プロファイリングが、すべての OpenTelemetry ユーザーに提供されるようになりました。

アルファリリースでは多くの重要な改善が利用可能です。

  • eBPF エージェントが OpenTelemetry Collector レシーバーとして動作するようになり、メトリクスと K8s メタデータの既存の OpenTelemetry 処理パイプラインを活用し、公式の Collector ディストリビューションとして配布されます。
  • Go 実行ファイルのターゲット上での自動シンボル化
  • Node.js V8 の ARM64 サポート
  • BEAM(Erlang/Elixir)の初期サポート
  • .NET 9 および 10 のサポート
  • Ruby のアンワインドとシンボル化の修正と改善

OTel エコシステムにおけるプロファイル

OpenTelemetry は多くの連携するパーツを持つ包括的なエコシステムです。 プロファイルのような新しいシグナルがあらゆる場所に統合され、すべてのシグナルが互いに恩恵を受けられることが重要です。 アルファリリースでは、OTel の多くの次元にわたるこの領域で複数の改善がもたらされました。

プロファイルの水平統合の注目すべき例を以下に示します。

  • OTel Collector に、特定のフォーマットでプロファイルデータを受信したり、インフラストラクチャ情報でプロファイルを拡張したりするためのサポートが含まれるようになりました。
    • pprof レシーバーにより、pprof フォーマットのファイルからプロファイルを受信できます。
    • k8sattributesprocessor により、Kubernetes メタデータでプロファイルを拡張できます。
    • OTTL サポートにより、プロファイルの変換やフィルタリングのカスタムルールを構築できます。
  • OTLP リソースモデルが更新され、効率的な情報共有が可能になりました。 Collector もプロファイルシグナルに対してこの最適化を透過的にサポートするよう更新されました。

はじめてみる

OpenTelemetry プロファイルの詳細については、OpenTelemetry ドキュメントプロファイルの概念ページを参照してください。

実際のデプロイメントを始める最も簡単な方法は、OpenTelemetry の eBPF プロファイラーを OTLP プロファイルをサポートするバックエンドと組み合わせて使用することです。 シグナルはまだ開発中のため、本番対応のバックエンドはまだ登場していませんが、複数のベンダーが OpenTelemetry プロファイルのサポートに取り組んでいます。

開発とテストを加速するために、Elastic は eBPF プロファイラーのバックエンド(収集、データストレージ、シンボル化、UI)部分を再実装した devfiler というデスクトップアプリケーションをオープンソースとして公開しました。 devfiler は本番バックエンドではなく、そのように使用すべきではないことに注意してください。 詳細な手順については、eBPF プロファイラーのリポジトリを参照してください。

Devfiler の例

貢献者一覧

このようなプロジェクトには多くの人々が関わっています。 これを可能にしたすべての方々に感謝します。

今後の展望

プロファイリングツールや製品を構築しているチームには、OpenTelemetry プロファイルの利用を推奨します。 参加方法は以下のとおりです。

  • ツールに OTel プロファイルのエクスポートまたは受信オプションを追加する。 これはすでに実現されています(例: async-profiler)。
  • eBPF エージェントと OTel Collector(v0.148.0以降)のプロファイルサポートをテストし、イシューを報告する。 PR の送信も歓迎します。
  • シグナルのドキュメントをレビューし、改善点を提案する。

アルファリリースの段階では、本番の重要なワークロードにこのシグナルを使用すべきではないことに注意してください。 詳細は、OpenTelemetry のアルファ成熟度レベルの定義を参照してください。

次のマイルストーンに向けて、多くのエキサイティングな作業が計画・進行中です。

  • シグナルの相関はオブザーバビリティの成功に不可欠なため、OBI やプロファイリングエージェントのような eBPF ベースのエージェント間で情報を共有する作業が進行中です。
  • シンボル化はすべての本番プロファイリングスタックの重要なコンポーネントであるため、API、ストレージフォーマットの標準化、およびリファレンス実装の公開について議論しています。
  • プロセス内 SDK コードと eBPF エージェント間のランタイム情報の共有は、「99パーセンタイルレイテンシーのトレースにおけるオフ CPU イベントは何か」といった質問に答えるためのクロスシグナル相関に重要です。 これを実現するためのプロセスコンテキストスレッドコンテキスト共有の OTEP が進行中です。

そして、これらすべてにおいて皆さんのフィードバックが必要です。 OTLP または Profiling SIG リポジトリに GitHub イシューを作成してください。 業界のニーズにシグナルを適合させ、次の段階であるベータおよび GA リリースに向けて着実に進化させていく助けになります。