MENU

Jaeger — Uberが生んだ分散トレーシングのCNCF Graduated

Jaeger アイキャッチ
Jaeger

Jaegerはマイクロサービス間で連鎖するリクエストを「トレース」として可視化し、どのサービスでどれだけ時間が掛かったかをタイムライン上に並べて表示する分散トレーシング基盤です。2015年にUber Technologiesの社内ツールとして開発が始まり、2016年にOSSとして公開、2017年9月にCloud Native Computing Foundation(CNCF)へ寄贈されて、2019年10月にはGraduatedプロジェクトに昇格しました。Googleが2010年に論文発表したDapperの思想を継ぐ後継であり、OpenTracing/OpenTelemetryと深く連動して進化しています。

目次

この記事の目次

  1. トレース・スパン・コンテキスト伝播
  2. UberからCNCFへ昇格した道のり
  3. 本番運用で使う典型シーン
  4. ZipkinやSaaS型APMとの違い
  5. まとめ

トレース・スパン・コンテキスト伝播

トレース・スパン・コンテキスト伝播

Jaegerが扱う最小単位は「Span」と呼ばれる時間付きの処理イベントで、開始時刻・終了時刻・サービス名・タグ・ログを保持します。これら複数のSpanを親子関係で繋いだ全体が「Trace」であり、1本のユーザーリクエストがフロントエンドからAPIゲートウェイ、認証サービス、商品検索、決済、データベースまで貫いていく様子をフレームグラフ風に俯瞰できます。従来のメトリクスやログでは見えなかった「どのサービスがボトルネックか」をミリ秒単位で炙り出すのが本質的な価値です。

サービス間でTraceを連結するためには、HTTPヘッダやgRPCメタデータに識別子を埋め込んで持ち回る「コンテキスト伝播」が必要です。Jaegerは当初OpenTracing規格に準拠したクライアントSDKを各言語で提供していましたが、現在は後継規格のOpenTelemetryへ移行しており、OpenTelemetry Collector経由でJaegerバックエンドへ送る構成が主流です。サンプリング戦略を細かく制御できる点もJaegerの強みで、全リクエストを保存するのではなくレート制限や確率サンプリングで負荷を抑えます。

UberからCNCFへ昇格した道のり

UberからCNCFへ昇格した道のり

Googleが2010年に発表した内部ツール「Dapper」の論文は、大規模分散システムにおけるトレーシングの教科書となり、TwitterのZipkin、UberのJaegerなど多数のOSS実装が派生していきました。Uberの社内では当初Zipkinベースの仕組みが使われていましたが、サービス数の急増に耐える独自バックエンドが必要となり、ヤヴロル・シェーリらが2015年に新規開発を開始。2016年4月にGitHubで公開され、ドイツ語で「狩人」を意味するJaegerと名付けられました。

2017年9月にはCNCFのインキュベーションプロジェクトとして寄贈され、KubernetesやPrometheusと並ぶクラウドネイティブ基盤の一員となります。2019年10月、CNCFの最高ランクであるGraduatedへ昇格し、本番運用に耐える成熟度が公式に認定されました。コミッターはUberを中心にRed Hat、IBM、Logz.ioなど多国籍の企業エンジニアで構成されており、現在もOpenTelemetryとの統合強化が活発に進められています。

本番運用で使う典型シーン

本番運用で使う典型シーン

実運用で最も価値が出るのは、ユーザーから「画面が遅い」と報告が来たときの原因切り分けです。Jaeger UIでスローなTraceを抽出すると、ある決済サービスだけが2秒掛かっている、その内訳は外部の与信API待ちだ、といった犯人がフレームグラフ上で一目瞭然になります。メトリクスのダッシュボードだけでは「全体が遅い」までしか分からないため、1リクエスト分の生データに踏み込めるトレーシングは、サービス数が10を超えたあたりから急速に必要性が増します。

リリース前後の性能比較にも有効で、Canaryデプロイで新バージョンのSpanだけを抽出して旧バージョンと並べることで、リファクタリングが本当に高速化に繋がったかを定量評価できます。また、データベースアクセスをSpan化しておけば、画面1枚を描画するのにN+1クエリで30回SQLが飛んでいる、といったORMの罠もすぐに見える化できます。可観測性の「三本柱」――メトリクス・ログ・トレース――のうち、最後の柱を担う存在です。

ZipkinやSaaS型APMとの違い

ZipkinやSaaS型APMとの違い

同じくOSSのトレーシング基盤であるZipkinはTwitter発の老舗で、軽量でセットアップが容易な反面、ストレージバックエンドの選択肢や検索機能の柔軟性ではJaegerに分があります。近年はGrafana Labsの「Tempo」が、オブジェクトストレージにトレースを安価に保存できる新興OSSとして注目されており、ログのLokiやメトリクスのPrometheusと組み合わせた「LGTMスタック」の一角を担っています。

SaaS型では、Datadog APM、New Relic、Honeycomb、Lightstepなどが「運用も含めて任せられる」選択肢として広く採用されています。Jaegerを自社運用するのはストレージ(Elasticsearch/Cassandra/OpenSearch等)の維持コストが負担になりがちで、「トレースのデータ主権を保ちたい」「規制業界で外部送信できない」要件があるか否かが選定の分岐点になります。OpenTelemetryでアプリ側を計装しておけば、後からJaegerとSaaSの行き来も比較的容易です。

まとめ

JaegerはUber発・CNCF Graduatedの分散トレーシング基盤で、マイクロサービスの遅延原因を可視化する定番ツールです。OpenTelemetryと組み合わせた構成が現在の主流で、自社運用したい組織にとってZipkinやTempoと並ぶ有力な選択肢として、可観測性スタックの最後の柱を支え続けています。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次