菜单
开源

版本 2.5 发行说明

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

此版本为您带来

  • 新功能,包括更多 TraceQL 指标、gRPC 流式端点以及新的实验性 vParquet4 块格式
  • TraceQL 增强和性能改进
  • 性能和稳定性增强

作为此版本的一部分,我们将 /var/tempo 的所有权从 root:root 更新为具有 UUID 10001 的新用户 tempo:tempo。请在升级注意事项中了解此重大变更。

阅读 Tempo 2.5 博客文章 了解有关这些改进的更多示例和详细信息。

这些发行说明重点介绍了最重要的功能和错误修复。有关完整列表,请参阅 Tempo CHANGELOG

功能和增强

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

其他 TraceQL 指标(实验性)

在此版本中,我们添加了几个 TraceQL 指标。Tempo 2.4 引入了 rate() 函数用于查看 Span 的速率。在此版本中,我们添加了 quantile_over_timehistogram_over_time。 [PR 3605, PR 3633, PR 3644]

您可以使用 quantiles_over_time 允许用户聚合数值,例如至关重要的 Span 时长。请注意,您可以在同一个查询中指定多个分位数。

Example quantile_over_time

您可以使用 historgram_over_time 将指标显示为热力图。

Example histogram_over_time

请注意,使用 TraceQL 指标可能需要额外的系统资源。

更多信息,请参阅 TraceQL 指标查询配置 TraceQL 指标

Tempo API 的 gRPC 流式端点

借助此功能,您现在可以实时查看部分查询结果,无需等待整个查询完成。这对于需要长时间返回响应的大型查询非常有用。

Tempo API 端点现在支持标签查询和指标的 gRPC 流式传输。我们为以下功能添加了新的流式端点:

  • SearchTags
  • SearchTagsV2
  • SearchTagValues
  • SearchTagValuesV2
  • MetricsQueryRange

Grafana 尚不支持这些新的流式端点。但 Tempo CLI 工具支持它们。

在 Tempo CLI 中,您可以使用 --use-grpc 选项来启用 gRPC 流式传输。

了解更多信息,请参阅 Tempo gRPC APITempo CLI 文档。 [PR 3460][PR #3584]

注意

通过 HTTP 进行流式传输需要设置 stream_over_http_enabled 标志。更多信息,请参阅 Tempo gRPC API 文档

此外,我们减少了前端处理大型追踪时的内存消耗。 [PR 3522]

新的 vParquet4 块格式(实验性)

Tempo 2.5 新增的 vParquet4 块格式是查询链接、事件和数组所必需的,并且相对于以前的格式提高了查询性能。 [PR 3368]

此外,我们更新了 OTLP Schema,以便在 vParquet4 中向插桩范围添加属性。 [PR 3649]

虽然您可以使用 vParquet4,但请记住它是实验性的。如果您选择使用 vParquet4 然后选择恢复到 vParquet3,则任何 vParquet4 块将无法被 vParquet3 读取。

要尝试 vParquet4,请参阅 选择块格式

TraceQL

TraceQL 是 Tempo 特有的查询语言,可让您对追踪数据执行自定义查询。要了解 TraceQL 语法,请参阅 TraceQL 文档

有关 TraceQL 语言计划未来扩展的信息,请参阅 未来工作

我们对 TraceQL 进行了以下改进

  • 添加对使用冒号 (:) 的作用域内建函数的支持。可用的作用域内建函数包括 trace:duration, trace:rootName, trace:rootService, span:duration, span:kind, span:name, span:status, span:statusMessage。 [[PR 3629]
  • TraceQL 和标签值搜索的性能改进。 [PR 3650, PR 3667]
  • 向 TraceQL 添加 nestedSetLeft/Right/Parent 内建函数。 [PR 3497]
  • 在使用包含许多重复字符串的大数据集时,减少内存使用并提高性能。 [PR 3411]
  • 添加对按 trace:idspan:id 查询的支持 [PR 3670]

其他增强和改进

  • 为 Memcached 客户端添加 TLS 支持 [PR 3585]
  • 移除 Distributor 关闭中的硬编码延迟 [PR 3687]
  • 为未插桩的服务和系统提供新标签 [PR 3543]
  • 向服务图添加消息系统延迟直方图 [PR 3453]
  • 添加对分片 Ingester 查询的支持 [PR 3574]
  • 更好的压缩吞吐量和内存使用 [PR 3579]
  • 在因摄取速率而拒绝 Span 时,向客户端返回更清晰的错误消息。 [PR 3485]
  • 在创建实例之前清理 Metrics Generator 的 Prometheus WAL [PR 3548]
  • 在可配置的时间段后删除空租户的所有剩余对象,需要启用配置 [PR 3611]

升级注意事项

升级到 Tempo 2.5 时,请注意以下注意事项和重大变更。

Docker 镜像以新的 UID 10001 运行

官方 Docker 镜像中的 Tempo 进程过去以 root 身份运行。现在,Tempo 进程在 Docker 镜像中以 UID 10001 身份运行。

维护磁盘上文件的组件,如 Ingester 和 Metrics Generator,未经干预将无法正常启动。新用户 10001 将无法访问由 root 创建的旧文件。

/var/tempo 的所有权已从 root:root 更改为具有 UID/GID 10001tempo:tempo 用户。

ingestermetrics-generator StatefulSet 可能需要 运行 chown 以更改所有权才能正常启动。

请参阅 PR 2265 以查看 init 容器的 Jsonnet 示例。

如果您使用 Helm Chart 且在 Chart 中设置了默认安全上下文,则此更改不会影响您。所有数据应该已经由 tempo 用户拥有。UID 不会影响 Helm Chart 用户。

移除了对 vParquet 格式的支持

原始 vParquet 格式 已在 Tempo 2.5 中移除。无法直接从 Tempo 2.1 升级到 Tempo 2.5。您需要先升级到中间版本,等待旧的 vParquet 块超出保留期后再升级到 2.5。 [PR 3663]

vParquet(1) 将不会被识别为有效的编码,并且任何剩余的 vParquet(1) 块将无法读取。使用历史默认设置运行的安装应该不需要进行任何更改,因为默认设置已在几个版本中迁移。将存储设置固定为 vParquet 的安装必须运行配置为 vParquet2 或更高版本的先前版本,直到所有现有的 vParquet(1) 块过期并从后端删除,否则在升级到此版本后将遇到读取错误。

已更新、移除或重命名的配置参数

参数注释
`[hedge_requests_at: <duration> | default = 2s ]`

`[hedge_requests_up_to: <int> | default = 2 ]`

从配置中移除的选项。 [PR #3522]

其他注意事项

  • 更新到 OTLP 1.3.0 会从 OTLP 接收器中移除已弃用的 InstrumentationLibraryInstrumentationLibrarySpan。 [PR 3649]
  • 移除了在多租户追踪 ID 查找中添加租户的功能。 [PR 3522]

错误修复

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

  • 修复 autocomplete 端点中 regex 匹配器的处理 PR 3641
  • 在 autocomplete 中提供错误的 TraceQL 查询时返回未过滤的结果。 PR 3426
  • 在 autocomplete 中添加对属性名称中使用破折号、引号和空格的支持 PR 3458
  • 修复在对同一属性进行过滤和评估时指标查询结果的问题 PR 3428
  • 修复时序包含空字符串或 nil 值时指标查询结果的问题 PR 3429
  • 修复指标查询时长检查,添加每个租户的最大指标查询时长覆盖项 PR 3479
  • 修复追踪 ID 为零长度时指标查询 panic “index out of range [-1]” 问题 PR 3668
  • 正确处理 gRPC 搜索流式传输中的 429 错误。 PR 3469
  • 正确取消前端的 gRPC 和 HTTP 上下文,以避免依赖 HTTP 写入超时。 PR 3443
  • 将 spss 和 limit 添加到前端缓存键,以防止返回不正确的结果。 PR 3557
  • 使用操作系统路径分隔符来拆分块路径。 PR 3552
  • 正确解析属性名称或静态值超过 1024 个字符的 TraceQL 查询。 PR 3571
  • 修复 span-metrics 的子处理器在运行多个租户时应用错误配置的错误。 PR 3612
  • 修复 query-frontend 合并结果时 panic 的问题 PR 3683
  • 修复涉及静态值和属性之间的非布尔运算的 TraceQL 查询问题。 PR 3698