バージョンアップ情報
Jaeger情報
Jaegerとは
Jaeger(イェーガー)は、GoogleのDapperやOpenZipkinを参考にUber Technologies社によって開発され、その後オープンソース化されたGo言語の分散トレーシングシステムです。
従来のモノリシックなアプリケーションとは異なり、1つのリクエストに対して複数のマイクロサービスを呼び出して、処理を実現するようなアプリケーションの場合、それぞれのマイクロサービスの処理の流れや依存関係の把握、処理遅延箇所の特定、障害発生時のトラブルシューティングが非常に難しくなりました。この問題を解決するために生まれたのが分散トレーシングシステムです。
JaegerはOpenTracingと互換性のあるデータモデルを持ち、各種言語(Go、Java、Node.js、Python、C++)用の計測ライブラリを提供します。複数ある分散トレーシングシステムの中では、唯一CNCFの卒業プロジェクトであり、今後のさらなる展開が期待されるOSSです。
分散トレーシングの概要に関しては、OpenTracingについて学んでおくと理解が早いですが、主要な用語として、
- スパン
- トレース
の2つがあります。この関係性を示すのが以下の図となります。
スパンは、操作名、操作開始時刻、操作時間などを保持する作業の論理単位を表します。複数のスパンはネストされ、その関連を順序付けることができます。一方、トレースはシステムを通るデータ/実行パスのことであり、各スパンの有向非巡回グラフ(上図の左側のグラフ)として表すことができます。
Jaegerのコンポーネントの構成(all-in-oneバイナリでの例)については、以下の図の通りとなります。
それぞれの役割は以下の通りです。
jaeger-client |
アプリケーションに組み込まれたクライアントライブラリ(複数の言語に対応)により、リクエストの受信ごとにスパンが作成され、分散トレーシングに必要なコンテキスト情報(トレースID、スパンID、baggage)が付加されます。サンプリング数の調整もここで行われます。作成されたスパンはバックエンドスレッドにより、UDP経由でjaeger-agentに送信されます。 |
---|---|
jaeger-agent |
jaeger-clientからのスパンを受信するデーモンです。ホストおよびコンテナに配備されます。こちらもバッチ処理により、jaeger-collectorにトレースをpushします。 |
jaeger-collector |
jaeger-agentからトレースを受け取り、検証、インデックス付与および変換を行った後、ストレージに格納します。ストレージとしては、現在はCassandra、Elasticsearch、Kafka(中間バッファ)をサポートします。 |
jaeger-query |
ストレージからスパン、トレースを参照して、Web UIを表示するためのサービスです。 |
主な特徴
分散システムの監視およびトラブルシューティング |
マイクロサービス化された分散システムにおいて、以下のようなモニタリングやトラブルシュートに利用できます。
|
---|---|
高拡張性 |
Jaegerバックエンドは、単一障害点なく、業務のニーズに合わせて拡張できるように設計されています。Uberでの事例では、あるJaeger環境は1日数十億のスパンの処理を実現しています。 |
OpenTracingとOpenTelemetryのネイティブサポート |
Jaegerバックエンド、Web UI、計測ライブラリは、OpenTracing標準をサポートするために0からデザインされています。
v1.35以降、Jaegerバックエンドは、ネイティブのOpenTelemetry Protocol(OTLP)で OpenTelemetry SDKからトレースデータを受信できます。 |
多数のバックエンドストレージに対応 |
Jaegerではトレースストレージバックエンドとして、2つのメジャーなNoSQLデータベース(Cassandra 3.4+、Elasticsearch 5.x/6.x/7.x)をサポートしています。 |
モダンなWeb UI |
JaegerのWeb UIは、Reactなどのオープンソースフレームワークを使ったJavaScriptにより実装されています。大量のデータを効率的に扱えるようになったv 1.0では、そのいくつかのパフォーマンス改善により、数万のスパンがあるトレースを表示できるようになります。 |
Cloud Native対応 |
Jaegerバックエンドは、複数のDockerイメージとしても配布されます。そのバイナリではコマンドラインや、環境変数、複数のフォーマット(yamlやtomlなど)の設定ファイルによる様々な設定方法をサポートします。Kubernetesクラスタへのデプロイは、Kubernetes Operator、Kubernetesテンプレートおよび、Helmチャートによって、アシストされます。 |
Prometheusメトリックに対応 |
すべてのJaegerバックエンドコンポーネントは、デフォルトでPrometheusメトリック(他のメトリックバックエンドもサポート)を公開します。ログはGo言語の構造化ロギングライブラリであるzapを利用して、標準出力に書き込まれます。 |
Zipkinとの下位互換性 |
先進的な機能を利用するためにはJaegerクライアントライブラリを利用することが推奨されますが、すでにZipkinライブラリを使用した計測環境が構成されている場合には、すべてのコードを書き換えなくてもよいです。 |
トポロジーグラフ |
JeagerのUIは、System ArchitectureとDeep Dependency Graphの2種類のサービスグラフをサポートする。 一方でDeep Dependency GraphではAがCに推移的な依存関係をもっています。一つのグラフは焦点となるサービスを持っており、そのサービスを通過する経路のみを表示し、ノード粒度をサービスとサービスエンドポイントの間で変更することが可能です。 |
サービスパフォーマンスモニタリング |
スパンデータをRED(Requests、Errors、Duration)メトリクスとして可視化し、統計的に顕著なリクエスト/エラー率やレイテンシーを持つサービスやオペレーションをハイライトします。 |
類似プロダクト
類似の機能を持ったOSSでは、Zipkin、SkyWalkingがあります。それぞれの機能差異は以下の通りです。
Jaeger |
Zipkin |
SkyWalking |
|
---|---|---|---|
クライアントライブラリ対応言語(※) | |||
C# |
〇 |
〇 |
× |
C++ |
〇 |
△ |
× |
Go |
〇 |
〇 |
△ |
Java |
〇 |
〇 |
〇 |
JavaScript |
× |
〇 |
× |
LUA |
× |
△ |
〇 |
.NET |
× |
× |
△ |
Node.js |
〇 |
〇 |
△ |
PHP |
△ |
〇 |
△ |
Python |
〇 |
△ |
〇 |
Ruby |
△ |
〇 |
× |
Scala |
△ |
〇 |
× |
対応フォーマット | |||
Zipkin v1/v2 |
〇 |
〇 |
〇 |
Jaegerフォーマット |
〇 |
× |
〇 |
SkyWalkingフォーマット |
× |
× |
〇 |
テレメトリ送信(トランスポート)方式 | |||
gRPC |
〇 |
× |
〇 |
HTTP |
〇 |
〇 |
〇 |
Kafka |
× |
〇 |
× |
Scribe |
× |
〇 |
× |
対応ストレージ | |||
Cassandra |
〇 |
〇 |
× |
Elasticsearch |
〇 |
〇 |
〇 |
H2 |
× |
× |
〇 |
MySQL |
× |
〇 |
〇 |
TiDB |
× |
× |
〇 |
Kafka |
〇 |
〇 |
× |
△:Officialではないが、Unofficialとして存在
(※)クライアントライブラリの言語によっても提供される機能に差があるため、詳細は以下のURLを参照ください。
ユースケース
分散トレーシングシステムとしてのJaegerの主なユースケースは以下の通りです。
- 分散トランザクションの監視
- パフォーマンスとレイテンシーの最適化
- 根本原因分析
- サービス依存性の分析
- 分散コンテキストの伝搬
動作環境
ソースから動作させる場合には、Go 1.11以上がインストールされている必要があります。
公式サイトでは、以下のOSに対応したバイナリが用意されています。
- macOS
- Linux
- Windows
また、Docker Hubには、Jaeger UI、collector、query、agent、インメモリストレージを含むall-in-oneイメージや、それぞれの個別のDockerイメージが提供されています。
Jaegerのライセンス
Jaegerは、Apache2.0ライセンスです。Apache License(アパッチ・ライセンス)のコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。
製品ダウンロード
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
OpenTelemetry
OpenTelemetryは、分散アプリケーションのトレーシングとメトリクス収集のための統一的な規格化とAPIを提供するオープンソースプロジェクトです。
-
サポート対象
Prometheus
プロメテウス。GO言語で書かれたオープンソースのモニタリングツールです。
-
Logstash
ログスタッシュ。Elastic社により開発された、データ収集ツールです。
-
サポート対象
Fluentd
フルエントディ。様々なデバイスやシステムからログ収集を行い、NoSQLデータベースやテキストなど様々フォーマットに変換・格納するログコネクタです。