Jump to section

Jaeger とは

URL をコピー

Jaeger は、分散サービス間のトランザクションをトレースするためのオープンソース・ソフトウェアです。複雑なマイクロサービス環境の監視とトラブルシューティングに使用されます。

分散トレースは、マイクロサービス間の複雑な相互作用におけるイベントのチェーン全体を表示および理解するための方法です。

先進的なクラウドネイティブ・ソフトウェア開発は、マイクロサービス、すなわち、それぞれが異なるコア機能を提供する独立したサービスに依存しています。ユーザーがアプリケーションでリクエストを作成すると、独立した多くのサービスが応答して結果を生成します。

アプリケーション内の 1 回の呼び出しで、互いに対話するさまざまなサービスをいくつも呼び出すことができます。開発者やエンジニアは、問題の発生時やリクエストの実行が遅い場合に、どのように問題を切り分けることができるでしょうか。すべての接続の状況を常に把握する方法が必要になります。

このような場合に役立つのが分散トレースです。多くの場合、分散トレースはサービスメッシュ (マイクロサービスを管理および監視する方法) の一部として実行されます。

Jaeger は、分散トレースを使用して、さまざまなマイクロサービスを介したリクエストのパスを追跡します。推測するのではなく、呼び出しのフローを視覚的に確認することができます。

トランザクションに関する情報が整理されると、デバッグと最適化に役立ちます。Jaeger のツールは、分散トランザクションを監視し、パフォーマンスとレイテンシーを最適化するとともに、問題解決の方法である根本原因分析 (RCA) を実行します。

オープンソース・プロジェクトである Jaeger には、何百人ものコントリビュータで構成されるコミュニティが存在します。Jaeger は、ベンダーに依存しない OpenTracing API と計装をベースに構築されています。

Jaeger は、ライドシェアリング企業の Uber によって 2015 年にオープンソース・プロジェクトとして立ち上げられました。2017 年に CNCF (Cloud Native Computing Foundation) インキュベーション・プロジェクトとして承認され、2019 年にインキュベーション段階を終えました。

Jaeger は、分散システムからの「トレース」を収集、保存、視覚化し、リクエストがシステム内をどのように流れ、どこに時間が費やされ、どこでエラーが発生するのかについての知見を提供します。

Jaeger ではトレースを実行リクエストの表示単位とします。トレースは、システムを介したデータや実行パスを示します。 

トレースは 1 つ以上のスパンで構成されます。スパンは、データベースクエリや HTTP リクエストなど、Jaeger における論理上の作業単位です。各スパンには、オペレーション名、開始時刻、および期間が含まれます。スパンはネストされ、順序が付けられます。

Jaeger のプロセス

Jaeger は、分散システム全体のオペレーションの実行をトレースし、特定のルーチンを Jaeger の複数のコンポーネントにタスク化することで機能します。 

OpenTelemetry SDK はどのプログラミング言語でも使用でき、Jaeger や他のトレース・プラットフォームが理解できるフォーマットにエクスポートできます。

オペレーション開始後、Jaeger は次のプロセスを踏みます。

  1. Jaeger のトレースは、アプリケーションのインストルメント化から始まります。インストルメント化により、トレースを生成するためにアプリケーションのコードが変更されます。インストルメント化には、さまざまなプログラミング言語で利用可能な Jaeger クライアントライブラリを使用する手動インストルメンテーションと、OpenTracing や OpenTelemetry API をサポートするミドルウェアやフレームワークを使用する自動インストルメンテーションがあります。
  2. アプリケーションが実行されると、トレースはマイクロサービス全体でオペレーションの詳細な実行パスを提供します。各トレースは複数のスパンで構成されます。各スパンはオペレーション名、開始時刻、終了時刻、追加のコンテキストを提供する key-value ペアタグ (HTTP ステータスコード、エラーメッセージなど) などの情報を含みます。
  3. スパンを 1 つのトレースにリンクするために、Jaeger はリクエストとレスポンスの一部として、識別子とその他のトレースコンテキストをサービス間で渡します。これはコンテキスト・プロパゲーションとして知られています。各スパンとトレースには、リクエストプロセスの個々のコンポーネントをつなぎ合わせるようにする固有の ID があります。
  4. スパンは Jaeger クライアントライブラリを使って収集され、通常はアプリケーションと共に、または Kubernetes のような環境では DaemonSet としてデプロイされる Jaeger Agent に送られます。
  5. Jaeger Collector は Jaeger Agent からスパンを受け取り、バックエンドのデータベースに保存します。Jaeger は、Elasticsearch、Cassandra、Google Cloud Bigtable など複数のストレージオプションをサポートしているため、スケーラブルかつ柔軟なトレースデータの管理が実現します。
  6. Jaeger Query サービスは、トレースを検索して可視化するための UI を提供します。Jaeger UI は、開発者とオペレーターが個々のトレースの詳細を探索し、スパン階層とタイミングを視覚化し、システムの動作とパフォーマンスを分析できるようにします。
  7. Jaeger Console は、分散トレースデータを可視化し、レイテンシー問題、エラー分析、依存性分析、パフォーマンス最適化などの知見を得るためのユーザー・インタフェースです。

Jaeger は、分散システムを通じてマイクロサービスとリクエストの動作に関する知見を提供します。そのため以下のことを提供できます。

  1. パフォーマンス最適化:Jaeger は、一連のマイクロサービス内で遅延が発生している場所をピンポイントで特定するだけでなく、サービスがどのように相互作用し、依存しているかを可視化し、リソースの割り当てを最適化できます。
  2. 根本原因分析:Jaeger は、サービス障害や予期せぬ結果をその発生源まで遡って追跡し、迅速な解決に繋げます。さらに Jaeger は監視システムと統合することができ、レイテンシーやエラー率の急上昇など異常なパターンが現れたときにチームに警告します。
  3. セキュリティとコンプライアンス:トレースはデータがシステム内をどのように流れるかを示すものであり、データの取り扱いや処理に関する規制要件を遵守する上で重要な監査証跡の役割を果たします。
  4. 開発とテスト:開発者はローカル環境で Jaeger トレースを実行することができ、アプリケーションをデプロイする前にエラーやレイテンシー、依存関係の問題を検出できます。 

Red Hat® OpenShift® Observability は、OpenShift ベースのアプリケーションとインフラストラクチャのパフォーマンスおよび健全性についてユーザーが深い知見を得ることができる一連の包括的な可観測性機能です。Red Hat の可観測性スタックの機能の 1 つは分散トレースで、2024 年までは Jaeger が含まれていました。2024 年初頭、Red Hat は Jaeger と Elasticsearch を廃止し、Tempo Operator と OpenTelemetry の Red Hat ビルドに切り替えました。

OpenTelemetry の Red Hat ビルドは、Jaeger クライアントだけでなく、zipkin や OpenTelemetry Protocol (OTLP) など、さまざまなフォーマットのトレースを収集するのに使用できます。このコレクターはすべての可観測性信号の収集に使用できるため、これはほんの始まりに過ぎません。Red Hat の分散トレーシングの最新リリースには、数多くの機能強化が含まれています。スパンからの自動メトリクス生成の実装に加え、これらのメトリクスに基づくアラートの作成が可能になります。Prometheus スタックの統合を支援するため、Red Hat は Target Allocator コンポーネントをビルドに追加しました。これによりお客様は Prometheus のエンドポイントを簡単にスクレイピングし、効率的に管理および拡張することができます。

Tempo は、Jaeger 製品が提供する分散トレースストレージおよび可視化機能の代替品として機能します。大規模なデプロイメントだけでなく、分散トレースの実験や、大規模なトレースストレージを必要としないデプロイメントの迅速なトラブルシューティングのためのシンプルなローカルデプロイメントを容易にします。Tempo には Jaeger ユーザー・インタフェースが組み込まれているため、トレースのスムーズな視覚化が実現します。

OpenShift のコンポーネントと機能についての詳細 →

関連資料

記事

マイクロサービスで医療における IT 統合をサポート

マイクロサービスを使用すると、医療やその他の業界の開発者は、疎結合のサービスから作られるアプリケーションを構築でき、開発、テスト、デプロイ、アップグレードを容易に行えます。

記事

マイクロサービスとは

マイクロサービスとは、独立して機能する個々のサービスを組み合わせてアプリケーションを構築するアーキテクチャ・スタイルです。

記事

サービスメッシュとは

サービスメッシュはアプリケーションに組み込まれたインフラストラクチャ・レイヤーであり、サービスの相互作用を文書化して、通信の最適化とダウンタイムの回避を容易にします。

マイクロサービスの詳細はこちら

製品

統合されたテスト済みのサービス一式を備えたエンタープライズ・アプリケーション・プラットフォームであり、ユーザーの選ぶインフラストラクチャを使ってアプリケーションを市場に投入するために活用できます。

リソース

アナリスト資料

アジャイル・インテグレーション:エンタープライズ・アーキテクチャのブループリント

トレーニング

無料のトレーニングコース

Developing Cloud-Native Applications with Microservices Architectures