Jaeger vs Tempo - 主要功能、差异和替代方案
Grafana Tempo 和 Jaeger 都是针对微服务架构的分布式跟踪的工具。 Jaeger 是 Uber 于 2015 年作为开源项目发布的,而 Tempo 是 2020 年 10 月宣布的更新产品。
Jaeger 是一个流行的开源工具,作为一个项目从 Cloud Native Computing Foundation 毕业。 Grafana Tempo 是一个与 Prometheus 和 Loki 等其他开源工具深度集成的大容量分布式跟踪工具。
但在深入了解 Jaeger 和 Grafana Tempo 的细节之前,让我们先绕道而行,了解分布式跟踪。

什么是分布式跟踪?
在微服务的世界里,一个用户请求在为用户提供他们需要的东西之前要经过数百个服务。为了使业务具有可扩展性,工程团队负责特定的服务,而不了解系统整体的性能。这就是分布式跟踪出现的地方。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--G8Vee_gt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/signoz.io/img /blog/2021/09/jaeger_vs_zipkin_microservices_architecture.png)
一个虚构的电子商务应用程序的微服务架构
分布式跟踪可让您深入了解特定服务在分布式软件系统中作为整体的一部分是如何执行的。分布式跟踪涉及两个基本概念:Spans 和 trace context。
用户请求被分解为跨度。
什么是跨度?
跨度表示跟踪中的单个操作。因此,它表示由单个服务完成的工作,可以根据用例进一步分解。
当请求在服务之间传输时,跟踪上下文会被传递,它跟踪跨服务的用户请求。因此,您可以查看用户请求如何跨服务执行,并确定您需要关注的具体内容,而无需手动切换多个仪表板。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--ZXTMH1wS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/ https://signoz.io/img/blog/2021/09/opentelemetry_distributed_tracing-min.png)
当用户请求从一个服务传递到另一个服务时,会传递一个跟踪上下文
Jaeger 和 Grafana Tempo 架构
Jaeger 和 Grafana Tempo 有点相似,唯一的区别在于它们的后端存储。
Jaeger 支持两种流行的开源 NoSQL 数据库作为跟踪存储后端:
-
卡桑德拉
-
弹性搜索
[
架构](https://res.cloudinary.com/practicaldev/image/fetch/s--sPD4rjIu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://signoz.io/ img/blog/2021/09/Jaeger_architecture-min.jpg)
积家的架构
Grafana Tempo 旨在避免运行 Cassandra 和 ElasticSearch 等数据库所需的维护。它的架构中有以下组件:
- 经销商
它用于接受多种格式的跨度。
- 摄取器
Ingester 批量跟踪到块中,然后将其全部刷新到后端。
- 查询前端
Tempo 使用 Grafana 作为其可视化层。
- 查询者
它负责从后端存储中查找请求的跟踪 ID。
- 压实机
压缩器将块流式传输到后端存储,以减少块的总数。
[! Grafana Tempo 架构] (https://res.cloudinary.com/practicaldev/image/fetch/s--9cMik-ju--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/signoz .io/img/博客/2021/09/grafana_tempo_architecture-min.jpg)
比较 Jaeger 和 Grafana Tempo
分布式跟踪工具有四个主要组件:
-
仪表
-
管道
-
后端
-
可视化
让我们详细看看这些组件是什么,以及 Jaeger 和 Grafana Tempo 是如何处理这些组件的。
仪表
什么是仪器?
检测是从应用程序代码生成遥测数据(日志、指标和跟踪)的过程。它本质上是编写代码,使您的应用程序代码能够发出遥测数据,以后可以使用这些数据来调查问题。
大多数分布式跟踪工具提供客户端库、代理和 SDK 来检测应用程序代码。还有一些流行的开源仪器框架,它们提供与供应商无关的仪器库。
Jaeger 仪表
Jaeger 的检测客户端库基于OpenTracing APIs。 OpenTracing 是一个开源项目,旨在为分布式跟踪提供供应商中立的 API 和工具。后来它被合并到OpenTelemetry中。
Jaeger 拥有以下语言的官方客户端库:
-
去
-
爪哇
-
节点.js
-
蟒蛇
-
C++
-
C#
带有 Grafana Tempo 的乐器
Grafana Tempo 支持多种开源仪器标准。它为工程团队选择他们选择的仪器库提供了更大的灵活性。以下是用于客户端检测并受 Grafana Tempo 支持的流行框架列表:
-
OpenTracing/积家
-
拉链
-
开放遥测
管道
在客户端库的帮助下收集到跟踪数据后,可以直接将其发送到存储后端进行存储和可视化。但是,随着应用程序的扩展,拥有用于数据缓冲的跟踪管道是一个很好的做法。该管道支持以多种格式接收数据、操作、批处理、索引和排队。
Jaeger 提供 Jaeger 收集器,如架构图中所示。收集器在存储跟踪数据之前验证跟踪、索引它们并执行任何转换。
Grafana Tempo 具有 Grafana 代理,它们部署在应用程序附近。它可以快速从应用程序中卸载跟踪并执行跟踪批处理和后端路由等功能。
后端存储
Jaeger 附带用于测试设置的简单内存存储。Jaeger 支持两种流行的开源 NoSQL 数据库作为跟踪存储后端:
-
卡桑德拉
-
弹性搜索
Grafana Tempo 有自己的自定义 TempoDB 用于存储跟踪数据。 TempoDB 支持 S3、GCS、Azure、本地文件系统,并且可以选择使用 Memcached 或 Redis 来提高查询性能。
可视化层
在可视化层方面,Grafana Tempo 优于 Jaeger。 Grafana Tempo 是 Grafana 的分布式跟踪工具 - 一个开源数据可视化层。您可以将不同的数据源连接到 Grafana 以进行可视化。 Grafana 有一个内置的 Tempo 数据源,可用于查询 Tempo 和可视化轨迹。
[
查询 Grafana Tempo 上的跟踪](https://res.cloudinary.com/practicaldev/image/fetch/s--tD8JDrHm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/ https://signoz.io/img/blog/2021/09/grafana_tempo_trace_query-min.jpg)
使用跟踪 ID 查询 Grafana Tempo 上的跟踪
在分布式跟踪方面,Jaeger 的 UI 基本但全面。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--PBiBbLYG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/signoz.io/img /blog/2021/08/jaeger_ui-min.png)
Jaeger UI 显示服务和相应的跟踪
在分布式跟踪工具方面,Jaeger 和 Grafana Tempo 都是强有力的竞争者。但是跟踪是否足以解决现代分布式应用程序的所有性能问题?答案是不。您还需要指标以及将指标与单个仪表板中的跟踪相关联的方法。您还需要开箱即用的数据可视化,使工程团队能够更快地解决问题。
这就是SigNoz出现的地方。
替代 Jaeger 和 Grafana Tempo - SigNoz
SigNoz 是一个全栈开源应用程序性能监控和可观察性工具,可以用来代替 Grafana Tempo 和 Jaeger。它在单个仪表板下提供高级分布式跟踪功能以及指标。
SigNoz 旨在原生支持 OpenTelemetry。OpenTelemetry正在成为生成和管理遥测数据(日志、指标和跟踪)的世界标准。它还在存储方面为用户提供了灵活性。在安装 SigNoz 时,您可以选择 ClickHouse 或 Kafka + Druid 作为后端存储。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--6BdjoEB__--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/ signoz.io/img/blog/2021/09/SigNoz_architecture_clickhouse.png)
以 ClickHouse 作为存储后端和 OpenTelemetry 用于代码检测的 SigNoz 架构
SigNoz 带有开箱即用的可视化功能,例如 RED 指标。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--OKFqZ_PP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// signoz.io/img/blog/common/signoz_charts_application_metrics.png)
SigNoz UI 显示应用程序概览指标,例如 RPS、50th/90th/99th Percentile 延迟和错误率
您还可以使用火焰图来可视化跟踪数据的跨度。所有这些都来自 SigNoz 的开箱即用。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--FOoIlefK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880 /https://signoz.io/img/blog/common/signoz_flamegraphs.png)
显示每个跨度的确切持续时间的火焰图 - 分布式跟踪的概念
SigNoz 可以帮助您跟踪的一些事情:
-
应用程序概览指标,例如 RPS、50th/90th/99th Percentile 延迟和错误率
-
应用程序中最慢的端点
-
查看确切的请求跟踪以找出下游服务中的问题、缓慢的数据库查询、调用第三方服务(如支付网关等)
-
按服务名称、操作、延迟、错误、标签/注释过滤跟踪。
-
对跟踪数据运行聚合
-
指标和跟踪的统一 UI
你可以在这里查看 SigNoz 的 GitHub 存储库👇

更多推荐



所有评论(0)