概要
Jaeger は、分散サービス間のトランザクションをトレースするためのオープンソース・ソフトウェアです。複雑なマイクロサービス環境の監視とトラブルシューティングに使用されます。
分散トレースとは
分散トレースは、マイクロサービス間の複雑な相互作用におけるイベントのチェーン全体を表示および理解するための方法です。
先進的なクラウドネイティブ・ソフトウェア開発は、マイクロサービス、すなわち、それぞれが異なるコア機能を提供する独立したサービスに依存しています。ユーザーがアプリケーションでリクエストを作成すると、独立した多くのサービスが応答して結果を生成します。
アプリケーション内の 1 回の呼び出しで、互いに対話するさまざまなサービスをいくつも呼び出すことができます。開発者やエンジニアは、問題の発生時やリクエストの実行が遅い場合に、どのように問題を切り分けることができるでしょうか。すべての接続の状況を常に把握する方法が必要になります。
このような場合に役立つのが分散トレースです。多くの場合、分散トレースはサービスメッシュ (マイクロサービスを管理および監視する方法) の一部として実行されます。
Jaeger は、分散トレースを使用して、さまざまなマイクロサービスを介したリクエストのパスを追跡します。推測するのではなく、呼び出しのフローを視覚的に確認することができます。
トランザクションに関する情報が整理されると、デバッグと最適化に役立ちます。Jaeger のツールは、分散トランザクションを監視し、パフォーマンスとレイテンシーを最適化するとともに、問題解決の方法である根本原因分析 (RCA) を実行します。
Jaeger の用語とコンポーネント
トレース:Jaeger における、実行リクエストの表示単位。トレースは、システムを介したデータや実行パスを示します。
スパン:トレースの構成要素。スパンは Jaeger における論理上の作業単位です。各スパンには、オペレーション名、開始時刻、および期間が含まれます。スパンはネストされ、順序が付けられます。
Jaeger には、スパンとトレースを収集、保存、視覚化するために連携するいくつかのコンポーネントがあります。
Jaeger Client:分散トレース用の OpenTracing API の言語固有の実装が含まれています。これらは、手動での使用も、さまざまなオープンソース・フレームワークでの使用も可能です。
Jaeger Agent:UDP を介して送信されたスパンをリッスンするネットワークデーモンで、対象アプリケーションと同じホスト上に配置します。通常、Kubernetes のようなコンテナ環境のサイドカーを介して実装されます。
Jaeger Collector:スパンを受信し、処理キューに格納します。
永続的なストレージバックエンドを必要とするため、Jaeger はスパンストレージ用のプラグ可能なメカニズムも持っています。
Query:ストレージからトレースを取得するサービスです。
Jaeger Console:分散トレースデータを視覚化するユーザー・インタフェースです。
Jaeger と Red Hat
Jaeger は、デフォルトで Red Hat® OpenShift® Service Mesh (オープンソースのサービスメッシュである Istio の実装を含む) の一部としてインストールされます。
この分散トレース実装には、多くのメリットがあります。Jaeger は Istio の可観測性コンソールである Kiali と統合できます。Jaeger のバックエンドは、単一障害点のない高いスケーラビリティを実現するように設計されています。Jaeger は、さまざまなコンポーネントからのデータを接続して、完全なエンドツーエンドのトレースを作成することができます。Jaeger には、Zipkin との後方互換性もあります。