Grafana Labs が 2020 年公開した分散トレースバックエンド。Jaeger / Zipkin / OpenTelemetry 互換 + オブジェクトストレージ(S3 / GCS / Azure)で大規模ログ集約、Loki + Prometheus と LGTM スタックを構成。
Grafana Tempo(グラファナ テンポ)は、Grafana Labs が 2020 年 10 月に公開、後年 Grafana Labs プロジェクトとして開発継続している分散トレースバックエンド + 高スケール分散トレース集約システムです。「Tempo」の名称は音楽用語「tempo(テンポ、速度)」由来で、高速 + リズミカルな分散トレース処理を表現しています。
「Grafana LGTM スタック」の構成は、(1)L = Loki(2018、ログ)・(2)G = Grafana(2014、可視化)・(3)T = Tempo(2020、分散トレース)・(4)M = Mimir(2022、Prometheus 互換メトリクス時系列 DB)、で完全な統合観測スタックを提供します。Tempo はその T(トレース)を担う重要コンポーネントとして、Jaeger / Zipkin / OpenTelemetry / OpenCensus / AWS X-Ray / Google Cloud Trace 等の主要分散トレースシステムと完全互換で実装されました。
技術アーキテクチャは、(1)入力: Jaeger / Zipkin / OpenTelemetry(OTLP)/ OpenCensus 形式の分散トレース受信・(2)Distributor: トレースデータ受信 + 検証 + Ingester への配信・(3)Ingester: トレースデータ書込 + チャンク管理(短期保持メモリ + 長期保持オブジェクトストレージ)・(4)Backend Storage: AWS S3 / GCP GCS / Azure Blob / 互換オブジェクトストレージ(直接保存、フルマネージド DB 不要)・(5)Querier: TraceQL クエリ実行 + Span 検索・(6)Query Frontend: クエリパフォーマンス最適化 + キャッシュ、です。
最大の特徴は、(1)オブジェクトストレージ直接保存(AWS S3 / GCP GCS / Azure Blob、Elasticsearch + Cassandra 等の DB バックエンド不要)で超低コスト + 大規模スケール対応・(2)TraceID ベース検索のみで全文検索インデックス不要のシンプル設計(Tempo 1.x、TraceQL は Tempo 2.0+ 2023 年で追加)・(3)Grafana 統合 + ログ(Loki)+ メトリクス(Prometheus / Mimir)+ トレース(Tempo)の Cross-correlation で根本原因分析の生産性向上、です。
TraceQL(Trace Query Language)は Tempo 2.0(2023)で導入されたクエリ言語で、PromQL / LogQL に類似した文法で複雑な分散トレース検索が可能になりました。例: {service.name="frontend" && duration > 100ms && span.http.status_code=500} で「frontend サービスの 100ms 超過 + HTTP 500 エラーの span を検索」等のクエリを表現できます。
主な採用は、(1)Grafana Cloud(SaaS、無料 50GB/月 + 有料拡張)・(2)Grafana Enterprise(オンプレ + サポート)・(3)自前ホスティング(Apache 2.0 ライセンス、無料、Helm Chart デプロイ)・(4)主要 Kubernetes 環境(EKS / GKE / AKS / OpenShift / Rancher)・(5)マイクロサービス + クラウドネイティブアプリ + Service Mesh(Istio / Linkerd / Cilium 統合)、で 2020-2026 年に急速に普及しています。
Jaeger / Zipkin との比較で Tempo の利点は、(1)Object Storage コスト 1/10-1/100・(2)Grafana LGTM 統合・(3)シンプルな TraceID + TraceQL 検索、Jaeger / Zipkin の利点は、(1)歴史 + コミュニティ規模・(2)CNCF プロジェクトとしての安定性、というトレードオフです。
| バックエンド | 提供 | バックエンド DB | コスト |
|---|---|---|---|
| Grafana Tempo | Grafana Labs | Object Storage(S3 / GCS) | 低 |
| Jaeger | Uber / CNCF | Cassandra / Elasticsearch |
| 中 |
| Zipkin | MySQL / Cassandra / Elasticsearch | 中 |
| AWS X-Ray | AWS | クラウドネイティブ | 中 |
| Google Cloud Trace | クラウドネイティブ | 中 |
| Datadog APM | Datadog | SaaS | 高 |
| New Relic Distributed Tracing | New Relic | SaaS | 高 |
Grafana Tempo は通常のコンシューマ自作 PC で必要になる技術ではありませんが、ホビーホームラボ + 自宅 Kubernetes 環境 + マイクロサービス + 観測性開発の上級者には極めて有用です。Docker Compose + Tempo + Grafana + OpenTelemetry Collector の組合せで、自宅サーバの統合観測基盤(LGTM スタック)を構築できます。
OpenTelemetry SDK(Java / Python / Go / Node.js / .NET / Rust)を使ってアプリケーションに分散トレース計装 + Tempo に送信 + Grafana で可視化する一連のフローは、現代マイクロサービス + クラウドネイティブ開発の必須スキルです。Grafana Cloud Free Tier(無料 50GB/月 トレース)も提供されており、低コストで業務級観測スタック学習が可能です。
Q1: Tempo と Jaeger どちらを選ぶべきですか? A: Object Storage + コスト重視 + Grafana 統合 → Tempo、CNCF + 歴史 + 安定性 + 既存 Jaeger エコシステム → Jaeger です。新規プロジェクト + Grafana ユーザー + マルチクラウド環境では Tempo が増加傾向、企業 + レガシー Jaeger 移行困難な環境では Jaeger 継続が一般的です。
Q2: TraceQL は何が便利ですか?
A: Tempo 2.0(2023)で導入された Trace Query Language で、PromQL / LogQL 風の文法で複雑な分散トレース検索が可能です。例えば、{ service.name="checkout" && duration > 1s && span.http.status_code >= 500 } で「checkout サービスの 1 秒超過 + HTTP 500+ エラー」を検索可能で、Cross-correlation 根本原因分析が大幅に効率化されます。
Q3: 自宅で Tempo を試す方法は?
A: Docker Compose + Tempo + Grafana + OpenTelemetry Collector のサンプル構成が GitHub で多数公開されており、docker-compose up で 5 分で起動可能です。OpenTelemetry SDK でローカル Java/Python アプリに計装 + Tempo に送信 + Grafana で可視化、業務級観測スタックの学習が低コストで実現できます。