菜单
开源

版本 2.2 发布说明

Tempo 团队很高兴宣布发布 Tempo 2.2。

此版本提供以下功能:

  • TraceQL 语言的主要新增功能:结构运算符(后代、子级、同级)、按属性分组的结果 (by())、select 运算符以及 3 个新的内置属性。
  • TraceQL 结果更快,这得益于一个流式端点,该端点在查询执行时返回部分结果,以及众多性能相关的改进。
  • 一个实验性指标摘要 API,它返回按您选择的属性分组的最近接收到的 Span 的 RED 指标。

Tempo 2.2 将 vParquet2(旨在与其它 Parquet 实现更兼容的 Parquet 版本)设为默认块格式。此块格式是使用结构运算符所必需的,并且相对于以前的格式提高了查询性能。

阅读Tempo 2.2 博客文章,获取更多有关这些改进的示例和详细信息。

注意

有关更改、增强功能和错误修复的完整列表,请参阅Tempo 2.2 CHANGELOG

功能和增强

Tempo 2.2 中的一些最重要功能和增强如下所示。

扩展 TraceQL 语言

在此版本中,我们对 TraceQL 语言进行了增强。TraceQL 现在提供:

  • 结构运算符:后代 (»)、子级 (>) 和同级 (~) (文档)。根据追踪结构和 Span 之间的关系查找相关追踪。[PR #2625 #2660]
  • 一个 select() 操作,允许您指定要包含在 TraceQL 响应中的任意 Span 属性 (文档) [PR 2494]
  • 一个 by() 操作,可按您选择的属性对追踪中的 Span 集进行分组。Grafana UI 尚不支持此操作;您只能在直接查询搜索 API 时使用 by()。[ 文档 PR 2490]
  • 用于 TraceQL 查询的新内置属性:traceDurationrootNamerootServiceName (文档) [PR #2503]

阅读Tempo 2.2 博客文章,获取有关如何使用这些新语言功能的示例。

要了解更多 TraceQL 语法,请参阅 TraceQL 文档。有关 TraceQL 语言未来计划扩展的信息,请参阅 未来工作

更快获取 TraceQL 结果

我们一直在努力减少您等待 TraceQL 查询结果的时间,在此版本中,我们在此方面取得了不错的进展。

我们在查询前端添加了一个 gRPC 流式 端点,允许客户端从 Tempo 流式传输搜索结果。Tempo CLI 已更新以使用此新流式端点 [PR #2366]。从 10.1 版本开始,Grafana 也支持它,不过您必须先启用 traceQLStreaming 功能开关 [PR #72288]。

通过将结果流式传输到客户端,您可以在整个查询完成之前就开始查看与您的查询匹配的追踪。这对于长时间运行的查询特别有帮助;虽然完成查询的总时间相同,但您可以在返回完整的匹配追踪集之前开始查看您的首批匹配项。

除了流式传输部分结果外,我们还合并了许多改进措施来加快 TraceQL 查询。以下仅列举几项:

  • 在前端和查询器之间添加查询批处理支持,以提高吞吐量 [PR 2677]
  • 提高 TraceQL 正则表达式的性能 [PR 2484]
  • 完全跳过列字典中没有匹配项的 Parquet 行组 [PR 2676]
  • vParquet 和 vParquet2 的新同步读取模式 [PR 2165, 2535]
  • 通过异步创建任务,提高了 TraceQL 吞吐量。[PR 2530]

指标摘要 API(实验性)

Tempo 添加了一个实验性 API,该 API 返回按您选择的属性分组的,在过去一小时内发送的 kind=server 的 Span 的 RED 指标(Span 计数、错误 Span 计数和延迟信息)。例如,您可以使用此 API 比较具有不同 namespace 属性值的 Span 的错误率。通过此,您可能会发现 namespace=A 的 Span 的错误率明显高于 namespace=B 的 Span。再例如,您可以使用此 API 比较按 region 属性细分的 Span 的延迟。通过此,您可能会注意到 region=North-America 的 Span 的延迟高于 region=Asia-Pacific 的 Span。

此 API 旨在按需分析传入的 Span;通过按属性对 Span 进行分段并查找 RED 指标的差异,您可以更快地定位高错误率或高延迟等问题的来源。

指标生成器计算的 RED 指标不同,此 API 返回的值不会作为时间序列持久化。这样做的优势在于您无需提供自己的时间序列数据库来存储和查询这些指标。它还允许您按高基数属性(在时间序列数据库中存储成本过高)细分计算 RED 指标。如果您想在数小时或数天的时段内存储和可视化 RED 指标,或者想对这些指标设置告警,请使用指标生成器。

要了解有关此 API 的更多信息,请参阅指标摘要 API 文档。

这项工作体现在多个 PR 中:236824182424244224802481250125792582

其他增强

  • 标签值标签名称 API 现在支持过滤 [PR 2253]。这允许您根据特定条件检索所有有效的属性值和名称。例如,您可以获取在带有属性 resource=A 的 Span 上看到的 namespace 属性值的列表。此功能默认关闭;要启用,请配置 autocomplete_filtering_enabled。( 文档)。Grafana 中的自动完成功能可以利用此过滤功能,从 v10.2 开始提供更好的建议 PR [67845]

  • 指标生成器现在支持 Span 过滤。设置过滤器允许您计算您关心的特定 Span 的指标,排除其他 Span。它还可以减少生成指标的基数,从而降低将这些指标存储在 Prometheus 兼容的 TSDB 中的成本。( 文档) [PR 2274]

  • 指标生成器现在可以检测虚拟节点 ( 文档) [PR 2365]。因此,您现在将在服务图中看到这些虚拟节点。有关更多信息,请参阅虚拟节点文档

升级注意事项

升级到 Tempo 2.2 时,请注意以下破坏性更改:

  • 仅限 JSonnet 用户:我们将指标生成器组件从 k8s deployment 转换为 k8s statefulset。有关无缝迁移说明,请参阅 PR。[PR #2533, #2467]
  • 移除或重命名的配置参数(见下文)

虽然不是破坏性更改,但升级到 Tempo 2.2 将默认把块格式更改为 vParquet2。要保留以前的块格式,请阅读Parquet 配置文档。我们强烈建议尽快升级到 vParquet2,因为这是在 TraceQL 查询中使用结构运算符所必需的,并且能提高查询性能,特别是对于使用 duration 内置属性的查询。

移除或重命名的配置参数

以下字段已移除或重命名。

storage

trace

s3

insecure_skip_verify: true // 重命名为 tls_insecure_skip_verify

参数备注

query_frontend

tolerate_failed_blocks: <int>

移除对 `tolerant_failed_blocks` 的支持 [PR 2416]
将 `insecure_skip_verify` 重命名为 `tls_insecure_skip_verify` [PR 2407]

错误修复

有关完整列表,请参阅Tempo CHANGELOG

2.2.4

2.2.3

  • 修复 S3 凭证提供者配置 PR 2889

2.2.2

  • 修复节点角色 auth IDMSv1 PR 2760

2.2.1

  • 修复索引失败的错误指标 PR 2781
  • 修复了指标生成器在使用多个租户和默认覆盖项时崩溃的问题 PR 2786
  • 恢复在 PR 2414 中移除的 tenant_header_key PR 2786
  • 默认禁用通过 HTTP 进行流式传输 PR 2803

2.2

  • 修复了指标生成器在远程写入指标延迟时无法扩展并行性的问题 [PR 2463]
  • 修复了指标生成器为 traces_target_info 设置错误标签的问题 [PR 2546]
  • 修复了 matches 和其他 spanset 级别属性未持久化到 TraceQL 结果的问题。[PR 2490]
  • 修复了 ingester 搜索偶尔因 file does not exist 错误而失败的问题 [PR 2534]