菜单
开源

2.4 版本发布说明

Tempo 团队很高兴宣布 Tempo 2.4 版本发布。

此版本提供给您

  • 新功能,包括多租户查询和实验性 TraceQL 指标查询
  • 得益于新增的缓存层,性能得到提升
  • 得益于轮询改进,减少了对对象存储的调用,从而节省成本

作为此版本的一部分,vParquet3 也已被提升为追踪数据的新的默认存储格式。有关我们为何对 vParquet3 如此兴奋的更多信息,请参阅通过 Grafana Tempo 中的专用属性列大规模加速 TraceQL 查询

阅读Tempo 2.4 博客文章以了解这些改进的更多示例和详情。

这些发布说明重点介绍了最重要的功能和 bug 修复。完整列表请参阅Tempo CHANGELOG

功能和增强

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

多租户查询

Tempo 现在允许您同时查询多个租户。我们已将多租户查询与流式传输(v2.2 中首次发布)兼容,以便您尽快获得查询结果。欲了解更多信息,请参阅跨租户联合启用多租户。[PRs 3262, 3087]

TraceQL 指标 (实验性)

我们很高兴宣布在 TraceQL 语言中添加了指标查询功能。指标查询通过对追踪查询结果应用函数来扩展追踪查询。这个强大的功能可以从追踪创建指标,就像 LogQL 指标查询从日志创建指标一样。

在这种情况下,我们正在计算来自服务 foo 的错误 Span 的速率。速率是 spans/sec 量。

traceql
{ resource.service.name = "foo" && status = error } | rate()

此外,您可以使用 Grafana Explore 通过 Grafana 或 Grafana Cloud 中的 Tempo 数据源来查询和可视化这些指标

Metrics visualization in Grafana

有关更多信息,请参阅TraceQL 指标文档。[PRs 3227 #3252, 3258]

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

TraceQL 性能改进

我们持续改进查询性能,以便您等待 TraceQL 查询结果的时间更少。以下是此版本中的一些值得注意的 PR:

  • 提高某些查询中 TraceQL 正则表达式的性能。[PR 3139]
  • 提高复杂查询中 TraceQL 的性能。[PR 3113]
  • TraceQL/结构运算符性能改进。[PR 3088]

vParquet3 现在是默认的 Block 格式

Tempo 2.4 使vParquet3成为默认存储格式。

我们对vParquet3相对于之前的格式感到兴奋,因为它支持专用属性列,这有助于加快对最大和最常查询属性的查询速度。我们在自己运行它时看到了极好的性能改进,将其提升为默认格式,表明它已准备好被广泛采用。

专用属性列(使用 vParquet3 可用)通过将最大和最常用的属性存储在自己的列中,而不是通用属性键值列表中,从而提高了查询性能。有关更多信息,请参阅通过 Grafana Tempo 中的专用属性列大规模加速 TraceQL 查询。 [PR 2526]

如果您之前手动配置了 vParquet3,建议将其移除以使用 Tempo 的默认配置。

要详细了解 vParquet3 的设计,请参阅设计提案。有关一般信息,请参阅Apache Parquet schema

新增缓存层

Tempo 添加了两个新的缓存以提升 TraceQL 查询性能。frontend-search 缓存处理任务搜索缓存。parquet-page 缓存处理页面级别缓存。有关如何配置这些新缓存层,请参阅配置文档的缓存部分

作为添加这些新缓存层的一部分,我们重构了缓存接口。这包括“破坏性变更”中描述的破坏性更改。[PRs 3166, 3225, 3196]

改进轮询以降低成本

我们改进了 Tempo 轮询对象存储的方式,确保重用之前的结果。这极大地减少了 Tempo 向对象存储发出的请求次数。这不仅减轻了对象存储的负载,对于许多用户来说,还可以节省费用(因为大多数托管对象存储解决方案按请求收费)。我们还添加了 list_blocks_concurrency 参数,允许您调整 Tempo 并行向对象存储发出列表调用的数量,以便您可以选择最适合您环境的值。我们将默认值设置为 3,这对于普通的 Tempo 集群应该效果良好。 [PR 2652]

我们也添加了 list_blocks_concurrency 参数,允许您调整 Tempo 对对象存储并行发起的列表调用的数量,以便您可以选择最适合您的环境的值。我们将默认值设置为 3,这应该很适合一般的 Tempo 集群。 [ PR 2652]

其他增强和改进

此外,Tempo 2.4 还进行了以下改进:

  • 改进了 Tempo 在写入时的错误处理,这样一条错误追踪不会导致整个批次的追踪被丢弃。PR 2571
  • 增加了按租户设置的压缩窗口。PR 3129
  • tempo-cli 命令 analyse blocks 添加了 --max-start-time--min-start-time 标志。PR 3250
  • 为 metrics-generator 添加了按租户配置的 remote_write 头部。#3175
  • 向 overrides 配置添加了变量展开支持。PR 3175
  • 添加了 HTML 页面 /status/overrides/status/overrides/{tenant}PR 3244 #3332
  • 在打开 Block 之前预计算并重用 vParquet3 schema。PR 3367
  • 远程写入的 Exemplar 的追踪 ID 标签名称可配置。PR 3074
  • Span 过滤性能改进。PR 3025
  • 引入了 localblocks 进程配置选项,用于仅选择服务器 Span。PR 3303

升级注意事项

升级到 Tempo 2.4 时,请注意这些注意事项和破坏性更改。

迁移到 vParquet 3

vParquet3 格式现在是默认的 Block 格式。它已准备好用于生产环境,我们强烈建议切换到此格式以获得更好的查询性能和专用属性列

升级到 Tempo 2.4 会修改 Parquet Block 格式。虽然您可以在 Tempo 2.3 中使用 vParquet2 或 vParquet3,但只能在 Tempo 2.4 中使用 vParquet3。

在此版本中,我们的 Parquet 后端的第一版本 vParquet 已被弃用。Tempo 2.4 仍然可以读取 vParquet1 Block。但是,如果手动配置了 vParquet1,Tempo 将报错退出。 [PR 3377]

有关升级信息,请参阅升级到 Tempo 2.4选择不同的 Block 格式

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

参数说明
autocomplete_filtering_enabled默认设置为 true [PR 3178]
distributor.log_received_traces请改用 distributor.log_received_spans 配置块。[PR #3008]
tempo_query_frontend_queries_total{op="searchtags|metrics"}移除已弃用的前端指标配置选项
yaml
storage:
  trace:
    cache:
    search:
      cache_control:
    background_cache:
    memcached:
这些字段已移除,改用新的缓存配置。请参阅“缓存配置重构”。

现在,如果批次中仅包含 trace_too_largemax_live_traces 错误,则分发器将返回 200。丢弃的 Span 数量仍会在 tempo_discarded_spans_total metrics 中反映。

移除实验性的搜索流式传输 WebSocket 支持

GRPC 现在是支持的流式传输结果方法。已移除搜索流式传输的 WebSocket 支持。最初添加 WebSocket 支持是因为与 GRPC、HTTP 和 TLS 存在冲突。这些问题已在PR 3300 中得到纠正。PR 3307

缓存配置重构

主要的缓存重构允许配置多个基于角色的缓存。 [PR 3166] 此更改导致一些字段被弃用(请参阅旧配置)。这些字段都已迁移到顶级 cache: 字段。

有关配置的更多信息,请参阅缓存部分。

旧的配置块如下所示

yaml
storage:
  trace:
    cache:
    search:
      cache_control:
    background_cache:
    memcached:
    redis:

使用新配置,您可以创建使用 redismemcached 集群的缓存列表,然后定义数据类型和角色。

yaml
cache:
  caches:
  - memcached:
      host: <some memcached cluster>
    roles:
    - bloom
    - parquet-footer
  - memcached:
      host: <some memcached cluster>
    roles:
    - frontend-search

安全修复

此版本解决了以下漏洞:

Bug 修复

完整列表请参阅Tempo CHANGELOG

2.4.2

2.4.1

  • 修复了在配置了前缀的情况下,AWS S3 和 GCS 中的压缩/保留问题。PR 3465

2.4.0

  • 防止构建会无限循环的 parquet 迭代器。PR 3159
  • 在 span-metrics 处理器中清理映射维度中的名称。PR 3171
  • 修复了缓存的 footers 被请求但随后被忽略的问题。PR 3196
  • 修复了当查询条件类型错误时,自动完成功能导致 panic 的问题。PR 3277
  • 修复了在 HTTP 上启用 GRPC 时 TLS 的问题。PR 3300
  • 在搜索请求最大限制时正确返回 400。PR 3340
  • 修复了自动完成过滤器有时返回错误结果的问题。PR 3339
  • 修复了 query-frontend 和 querier 之间的追踪上下文传播问题。PR 3387
  • 修复了 TraceQL 中 span.resource.xyz 属性的解析问题。PR 3284
  • 如果配置验证成功,更改退出代码。PR 3174
  • tempo-cli analyze blocks 命令不再对压缩的 Block 失败。PR 3183
  • 移动了 Poller 错误条件下的 Waitgroup 处理。PR 3224
  • 修复了 Ingester 搜索中 Head Block 过度锁定的问题。PR 3328
  • 修复了 Ingester 在崩溃或非正常重启后无法将追踪写入磁盘的问题。PR 3346