Grafana Tempo 入门分布式追踪

Grafana Tempo 是一个新的开源、高容量分布式追踪后端。
76 位读者喜欢这个。
Computer laptop in space

Opensource.com

Grafana 的 Tempo 是 Grafana Labs 推出的一款易于使用、高扩展性的分布式追踪后端。Tempo 与 GrafanaPrometheusLoki 集成,并且仅需要对象存储即可运行,使其具有成本效益且易于操作。

自从这个开源项目启动以来,我就一直参与其中,因此我将介绍 Tempo 的一些基础知识,并展示云原生社区为何关注它。

分布式追踪

通常需要收集有关向应用程序发出的请求的遥测数据。但在现代服务器世界中,单个应用程序通常被拆分为多个微服务,可能在多个不同的节点上运行。

分布式追踪是一种获取有关可能由离散服务组成的应用程序性能的细粒度信息的方法。它提供了请求生命周期的统一视图,因为它会通过应用程序。Tempo 的分布式追踪可以与单体或微服务应用程序一起使用,并且它为您提供 请求范围的信息,使其成为可观测性的第三大支柱(与指标和日志一起)。

以下是由分布式追踪系统生成的关于应用程序的甘特图示例。它使用 Jaeger HotROD 演示应用程序来生成追踪,并将它们存储在 Grafana Cloud 托管的 Tempo 中。此图表显示了请求的处理时间,按服务和功能分解。

减小索引大小

追踪在丰富且定义明确的数据模型中包含大量信息。通常,与追踪后端有两种交互:使用元数据选择器(如服务名称或持续时间)过滤追踪,以及在过滤后可视化追踪。

为了增强搜索,大多数开源分布式追踪框架索引追踪中的许多字段,包括服务名称、操作名称、标签和持续时间。这导致了大型索引,并促使您使用 Elasticsearch 或 Cassandra 等数据库。但是,这些数据库可能难以管理且规模化运营成本高昂,因此我在 Grafana Labs 的团队着手提出更好的解决方案。

在 Grafana,我们的随叫随到调试工作流程首先使用指标仪表板(我们使用 Cortex,一个云原生计算基金会孵化项目,用于扩展 Prometheus,以存储来自我们应用程序的指标)向下钻取问题,然后筛选问题服务的日志(我们将日志存储在 Loki 中,它类似于 Prometheus,但用于日志),然后查看给定请求的追踪。我们意识到,过滤步骤所需的所有索引信息都可以在 Cortex 和 Loki 中获得。但是,我们需要强大的集成,以便通过这些工具进行追踪发现,以及用于按追踪 ID 进行键值查找的补充存储。

这就是 Grafana Tempo 项目的开始。通过专注于检索给定追踪 ID 的追踪,我们将 Tempo 设计为具有最小依赖性、高容量、经济高效的分布式追踪后端。

易于操作且经济高效

Tempo 使用对象存储后端,这是它唯一的依赖项。它可以以单二进制模式或微服务模式使用(查看 repo 中的 示例,了解如何轻松入门)。使用对象存储还意味着您可以存储来自应用程序的大量追踪,而无需任何采样。这确保您永远不会丢弃那些百万分之一的错误或延迟较高的请求的追踪。

与开源工具的强大集成

Grafana 7.3 包括一个 Tempo 数据源,这意味着您可以在 Grafana UI 中可视化来自 Tempo 的追踪。此外,Loki 2.0 的新查询功能 使 Tempo 中的追踪发现变得容易。为了与 Prometheus 集成,该团队正在努力添加对 exemplars 的支持,exemplars 是您可以添加到时间序列数据中的高基数元数据信息。指标存储后端不会索引这些信息,但您可以在 Grafana UI 中检索它们并与指标值一起显示。虽然 exemplars 可以存储各种元数据,但在这种用例中,追踪 ID 会被存储以与 Tempo 紧密集成。

此示例显示了将 exemplars 与请求延迟直方图一起使用,其中每个 exemplar 数据点都链接到 Tempo 中的追踪。

一致的元数据

从作为容器化应用程序运行的应用程序发出的遥测数据通常具有与其关联的一些元数据。这可以包括集群 ID、命名空间、Pod IP 等信息。这对于按需提供信息非常有用,但如果您可以将元数据中包含的信息用于某些生产性用途,则会更好。

例如,您可以使用 Grafana Cloud Agent 将追踪摄取到 Tempo 中,并且该代理利用 Prometheus Service Discovery 机制来轮询 Kubernetes API 以获取元数据信息,并将这些信息作为标签添加到应用程序发出的 spans。由于此元数据也在 Loki 中建立索引,因此通过将元数据转换为 Loki 标签选择器,您可以轻松地从追踪跳转到查看给定服务的日志。

以下是一致元数据的示例,可用于查看 Tempo 中追踪中给定 span 的日志。

云原生

Grafana Tempo 可用作容器化应用程序,您可以在任何编排引擎(如 Kubernetes、Mesos 等)上运行它。各种服务可以根据摄取/查询路径上的工作负载进行水平扩展。您还可以将云原生对象存储(如 Google Cloud Storage、Amazon S3 或 Azure Blog Storage)与 Tempo 一起使用。有关更多信息,请阅读 Tempo 文档中的 架构部分

试用 Tempo

如果这听起来对您可能像对我们一样有用,请克隆 Tempo repo 或注册 Grafana Cloud 并试用一下。

接下来阅读什么
标签
User profile image.
Grafana Labs 的软件工程师 Annanay 对开源的参与始于 LLVM 编译器基础设施项目下的 Google Summer of Code。大学毕业后,他对分布式追踪的兴趣使他参与了 Jaeger 和 OpenTelemetry 项目。他现在在 Grafana Labs 从事 Tempo 的开发。不在办公桌前的时候,他要么在看足球,要么在听音乐。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.