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
量。
{ resource.service.name = "foo" && status = error } | rate()
此外,您可以使用 Grafana Explore 通过 Grafana 或 Grafana Cloud 中的 Tempo 数据源来查询和可视化这些指标。
有关更多信息,请参阅TraceQL 指标文档。[PRs 3227 #3252, 3258]
要了解更多 TraceQL 语法,请参阅TraceQL 文档。有关 TraceQL 语言未来计划扩展的信息,请参阅未来工作。
TraceQL 性能改进
我们持续改进查询性能,以便您等待 TraceQL 查询结果的时间更少。以下是此版本中的一些值得注意的 PR:
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"} | 移除已弃用的前端指标配置选项 |
| 这些字段已移除,改用新的缓存配置。请参阅“缓存配置重构”。 |
现在,如果批次中仅包含 trace_too_large
和 max_live_traces
错误,则分发器将返回 200。丢弃的 Span 数量仍会在 tempo_discarded_spans_total metrics
中反映。
移除实验性的搜索流式传输 WebSocket 支持
GRPC 现在是支持的流式传输结果方法。已移除搜索流式传输的 WebSocket 支持。最初添加 WebSocket 支持是因为与 GRPC、HTTP 和 TLS 存在冲突。这些问题已在PR 3300 中得到纠正。PR 3307
缓存配置重构
主要的缓存重构允许配置多个基于角色的缓存。 [PR 3166] 此更改导致一些字段被弃用(请参阅旧配置)。这些字段都已迁移到顶级 cache:
字段。
有关配置的更多信息,请参阅缓存部分。
旧的配置块如下所示
storage:
trace:
cache:
search:
cache_control:
background_cache:
memcached:
redis:
使用新配置,您可以创建使用 redis
或 memcached
集群的缓存列表,然后定义数据类型和角色。
cache:
caches:
- memcached:
host: <some memcached cluster>
roles:
- bloom
- parquet-footer
- memcached:
host: <some memcached cluster>
roles:
- frontend-search
安全修复
此版本解决了以下漏洞:
- 解决了CVE-2023-5363。
- 更新了 Jsonnet 中
memcached
的默认镜像以解决多个 CVE 问题。PR 3310 - 将 golang.org/x/net 包更新到 0.24.0 以修复CVE-2023-45288 PR 3613
Bug 修复
完整列表请参阅Tempo CHANGELOG。
2.4.2
- 将 golang.org/x/net 包更新到 0.24.0 以修复CVE-2023-45288。PR 3613
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