1.1 Tempo 概述:分布式追踪的基石

在微服务架构中,一次用户请求可能跨越数十甚至上百个服务节点。当出现延迟或错误时,传统的指标(Metrics)和日志(Logs)难以还原请求的完整调用链路。分布式追踪正是为解决这一问题而生,而 Grafana Tempo 是 Grafana 生态中专注于高性价比、大规模分布式追踪的后端存储与查询引擎。

1.1.1 什么是 Tempo

Tempo 是一个 开源、高可用、低成本 的分布式追踪后端。它由 Grafana Labs 开发,深度集成在 Grafana 生态中,核心设计理念是:

  • 对象存储优先:直接使用 S3、GCS、Azure Blob 或本地文件系统作为存储层,无需额外搭建 Elasticsearch 或 Cassandra。
  • TraceID 索引:以 TraceID 为主键构建索引,支持毫秒级按 TraceID 精确查询。
  • 无侵入式接入:兼容 OpenTelemetry、Jaeger、Zipkin 等多种数据格式,无需修改应用代码即可接入。
  • 按需查询:不预聚合、不建全文索引,查询时从对象存储中按需拉取数据,大幅降低存储成本。
核心优势:Tempo 的存储成本通常仅为 Elasticsearch 方案的 1/5 到 1/10,特别适合每天产生 TB 级 Trace 数据的中大型企业。

1.1.2 分布式追踪的价值

分布式追踪提供了三个关键能力,帮助 SRE 团队快速定位问题:

能力维度 说明 典型场景
调用链还原 完整记录一次请求经过的所有服务、方法及耗时 定位“慢请求”到底慢在哪个服务
依赖关系可视化 自动生成服务拓扑图,展示服务间调用关系 发现非预期的循环调用或扇出过大
错误根因定位 将错误 Span 与上下游 Span 关联,快速定位异常节点 5xx 错误是网关问题还是下游服务超时

在 SRE 值班场景中,分布式追踪的价值尤为突出:

  • 缩短 MTTR:从收到告警到定位根因,从小时级缩短到分钟级。
  • 减少噪音:通过 Trace 过滤掉大量无关告警,聚焦真正影响用户的请求。
  • 容量规划:分析 Trace 中的 Span 耗时分布,识别瓶颈服务。

1.1.3 Tempo 在 Grafana 生态中的定位

Grafana 生态围绕 指标(Metrics)、日志(Logs)、追踪(Traces) 三大支柱构建,Tempo 承担了“追踪”这一核心支柱。它与生态内其他组件的关系如下:

Grafana 可观测性三大支柱:
  • Metrics → Prometheus / Mimir → 实时监控与告警
  • Logs → Loki → 日志聚合与搜索
  • Traces → Tempo → 分布式追踪与调用链分析
三者通过 Grafana 统一界面联动,实现“指标发现异常 → 日志查看上下文 → 追踪定位根因”的闭环。
Tempo 在 Grafana 生态中的定位 Grafana 可观测性生态:Tempo 定位 Metrics Prometheus / Mimir Logs Loki Traces Tempo Grafana 统一查询与可视化 对象存储(S3 / GCS / Azure Blob / 本地) Tempo 直接对接对象存储,无需中间件,存储成本仅为 Elasticsearch 方案的 1/5 ~ 1/10 支持 OpenTelemetry / Jaeger / Zipkin 协议,无侵入接入

1.1.4 Tempo 与其他追踪系统的对比

为了帮助团队选型,下表对比了 Tempo 与主流分布式追踪系统的关键差异:

特性 Tempo Jaeger Zipkin
存储后端 对象存储(S3/GCS/本地) Elasticsearch / Cassandra / Badger Elasticsearch / Cassandra / MySQL
索引方式 TraceID 索引 + 按需查询 服务名/操作名/标签索引 服务名/操作名/标签索引
存储成本 低(对象存储按量付费) 高(ES 集群资源消耗大) 中(依赖 ES 或 Cassandra)
查询延迟 TraceID 查询极快;标签查询较慢 标签查询快(预索引) 标签查询快(预索引)
Grafana 集成 原生集成,无需插件 需配置数据源 需配置数据源
适用场景 大规模、低成本、以 TraceID 查询为主 中小规模、需要丰富的标签查询 轻量级、快速部署
选型建议:如果你的团队每天产生超过 1TB 的 Trace 数据,且主要查询方式是通过 TraceID 定位问题(例如从告警或日志中获取 TraceID),Tempo 是性价比最高的选择。如果需要频繁按服务名或标签进行模糊搜索,建议搭配 Grafana 的 TraceQL 或使用 Jaeger 作为补充。

1.1.5 Tempo 的核心架构组件

Tempo 采用微服务架构,主要组件包括:

  • Distributor:接收来自 OpenTelemetry Collector、Jaeger Agent 等客户端的 Span 数据,进行校验和负载均衡,然后转发给 Ingester。
  • Ingester:将 Span 数据按 TraceID 分组,写入对象存储前在内存中做临时排序和去重,并构建索引。
  • Querier:接收查询请求,从对象存储中读取 Trace 数据,支持 TraceID 精确查询和 TraceQL 查询。
  • Compactor:后台任务,将对象存储中的小文件合并成大文件,优化存储效率和查询性能。
  • Query Frontend:查询前端,负责查询路由、缓存、分片和并行化,提升大规模查询的响应速度。
Tempo 核心架构与数据流 Tempo 核心架构与数据流 OpenTelemetry / Jaeger Distributor Ingester 对象存储 Querier Query Frontend Compactor(后台) 数据流方向: 客户端 → Distributor → Ingester → 对象存储 查询:Query Frontend → Querier → 对象存储

1.1.6 本章小结

通过本章,你应该掌握了以下核心知识点:

  • Tempo 是什么:一个基于对象存储、以 TraceID 索引为核心的高性价比分布式追踪后端。
  • 分布式追踪的价值:调用链还原、依赖关系可视化、错误根因定位,是 SRE 值班的“第一现场”。
  • Tempo 在 Grafana 生态中的定位:与 Prometheus/Mimir(指标)、Loki(日志)并列,构成 Grafana 可观测性三大支柱。
  • 核心架构组件:Distributor、Ingester、Querier、Compactor、Query Frontend 各司其职,协同完成 Trace 数据的写入、存储和查询。