Grafana 的Tempo是来自 Grafana Labs 的易于使用、大规模、分布式的跟踪后端。 Tempo 与Grafana、Prometheus和Loki集成,并且只需要对象存储即可运行,使其具有成本效益且易于操作。

从一开始我就参与了这个开源项目,所以我将介绍一些关于 Tempo 的基础知识,并说明为什么云原生社区会注意到它。

分布式追踪

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

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

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

来自 Grafana Tempo 的甘特图

图片来源:

(安娜奈·阿加瓦尔,CC BY-SA 4.0)

减小索引大小

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

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

探索开源云

  • 认识云

  • 免费在线课程:使用微服务架构开发云原生应用程序

  • 什么是混合云?

  • 电子书:构建混合云战略

  • 什么是 Kubernetes?

  • 理解边缘计算

  • IT 架构师的最新文章

在 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 集成,该团队正在努力增加对示例的支持,示例是您可以添加到时间序列数据中的高基数元数据信息。指标存储后端不会索引这些,但您可以在 Grafana UI 中检索和显示它们与指标值一起显示。虽然示例可以存储各种元数据,但在此用例中存储跟踪 ID 以与 Tempo 紧密集成。

此示例显示使用带有请求延迟直方图的示例,其中每个示例数据点链接到 Tempo 中的跟踪。

在 Tempo 中使用示例

图片来源:

(安娜奈·阿加瓦尔,CC BY-SA 4.0)

一致的元数据

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

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

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

云原生

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

试试节奏

如果这听起来对您和我们一样有用,克隆 Tempo 存储库或注册Grafana Cloud并尝试一下。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐