見出し画像

分散システムにおける問題特定手法「Jaeger」について

はじめまして。Airitech株式会社 DXサービス推進3 システム開発1グループの小田代です。

今回は、分散システムにおける問題特定手法の一つである「Jaeger」についてご紹介します。

1. はじめに

近年のシステムにおいて分散システムアーキテクチャ(マイクロサービスアーキテクチャ)がトレンドの一つです。

旧来のソフトウェア設計やアーキテクチャはいくつかの機能が 1 つのコードベースにまとめられ、動かすサーバ構成もシンプルでした。
その反面、開発スピードの問題などが顕在化してたため、スケーラビリティ、可用性などでも優位な分散システムが採用されることが増えてきています。

分散システムは複数のサービス、コンポーネント、マイクロサービスから構成されています。これらのサービス間は通信を行いますが、一般的にリクエストが複数のサービスを経由して処理されます。

この「複数のサービスを経由」というのが一つのネックになってきます。
まだ構成がシンプルなうちは良いのですが、分散システムの利点を活かそうとすると「多くのサービスを経由」することとなります。
これはアプリケーションのパフォーマンス低下や問題の特定を困難にする原因になってしまいます。

2. Jaegerとは

Jaegerは、Uber によって2015 年にオープンソース・プロジェクトとして立ち上げられました。
Jaegerは分散システムのアプリケーションのパフォーマンスと問題を理解するために使用されます。リクエストがアプリケーション内でどのように処理され、どのようにサービス間を移動するかを追跡することができるものとなります。

追跡情報は可視化され、開発者はアプリケーションの問題を検出したり、修正したりと役立てることができます。

3. Jaegerの仕組み

Jaegerには、スパンとトレースという用語があります。

  • スパン (Span): スパンは分散システムでの処理単位を表します。開始時刻と終了時刻、分析のためのタグや値、マイクロサービスが生成するメッセージログなどを含みます。例えば、Web API の呼び出しやデータベースへのクエリなどがスパンとして表されます。

  • トレース (Trace): トレースは複数のスパンから構成されるもので、分散システムでの一連の処理を表します。例えば、Web API の呼び出しからデータベースへのクエリ、そしてレスポンスの返却などを組み合わせたものがトレースとして表されます。

これらは以下の関係図として表されます。

https://www.jaegertracing.io/docs/1.23/architecture/#span

ユーザーが最初のリクエストを送信する。

そのリクエストには一意のトレースIDが割り当てられる。

リクエストに対して実行されるすべてのスパンには、最初のリクエストのトレースIDと固有のID、さらには現在のリクエストを生成した親スパンのトレースIDがタグ付けされる。

スパン、トレースの情報をWeb UIを表示するためのUIサーバ側に伝達され可視化される。

といった仕組みとなっています。

Aから固有の合言葉を持って始まって、BはAから合言葉を受け取ったことを覚えつつ、CとDに伝達。CとDはそれぞれ、Bから合言葉を受け取ったことを覚えている。
といった伝言ゲームのイメージですね。

4. Jaegerの構成要素

Jaegerは以下の構成要素で成り立っています。

  • Jaeger Client: Jeagerを適用するシステムからトレース情報を送信するためのクライアントソフトウェアのことです。Jaeger Client は、アプリケーションのコード内で利用することで、トレース情報を収集することができます。リクエストの受信ごとにスパンを作成し、必要な情報を付与していきます。

  • Jaeger Agent: Jeagerを適用するシステムにおいて、トレース情報を収集するためのネットワークデーモンまたはプロセスのことです。Jaeger Agent は、ホストおよびコンテナに配置することで、Jaeger Clientからのスパンを受信し、Jaeger Collectorへ送信します。

  • Jaeger Collector: Jeager Agentから送信されたトレース情報を収集するためのサービスのことです。収集されたトレース情報は、解析されDBに格納されます。

これらは以下の例として表されます。DBは構成のパターンがいくつかあるので、基本の要素としては上記3つを押さえていればよいです。

公開されているコンテナイメージにはJaeger Agent、Jaeger Collector、DB製品群(ElasticSearchかCassandra)をまとめたAll-in-one版もあったりします。
デモや実証用にはAll-in-one版を使うのが手軽でよいでしょう。

All-in-onehttps://www.jaegertracing.io/docs/1.23/architecture/#components

5.さいごに

実際に見えるUIとしては以下のようなものとなります。

https://www.jaegertracing.io/docs/1.12/frontend-ui/#trace-page

全体のタイムラインや処理順序などが分かりますね。
と言っても使いやすさや、実際どれくらいの利点があるかは伝わりづらいと思います。

「使ってみる!」が一番です。

大規模な機材や複雑な準備がなくとも実証してみることが容易なのがマイクロサービスの利点です。

実際にデプロイして使用してみて、類似サービスとの使い勝手など比較してみるのがよいかと思います。

Airitech(エアリテック) Airitech株式会社は、最高のチームワークで、お客様の課題に最高の解決策をご提供いたします。


この記事が気に入ったらサポートをしてみませんか?