版本 2.6 发布说明
Tempo 团队很高兴宣布 Tempo 2.6 版本发布。
此版本为您带来了
- TraceQL 语言的新增功能,包括按 Span 事件、链接和数组进行搜索的能力
- TraceQL 指标查询类型的新增功能,包括 Compare 函数和执行即时查询(返回速度比范围查询更快)的能力。
- 性能和稳定性提升
阅读Tempo 2.6 博客文章了解更多示例和这些改进的详细信息。
这些发布说明重点介绍了最重要的功能和 Bug 修复。有关完整列表,请参考 Tempo 变更日志。
功能和增强
Tempo 2.6 中最重要的功能和增强如下所示。
额外的 TraceQL 指标(实验性)
在此版本中,我们添加了几个TraceQL 指标。在 Tempo 2.6 中,TraceQL 指标增加了
- Exemplars [ PR 3824, 文档]
- 使用
/api/metrics/query
进行即时指标查询 [ PR 3859, 文档] - search v2 API 的标签名称过滤新增一个
q
参数 [ PR 3822, 文档] - 一个新的
compare()
指标函数 [ PR 3695, 文档]
此外,我们正在重构副本系数。请参考TraceQL 指标的操作变更部分了解详情。
请注意,使用 TraceQL 指标可能需要额外的系统资源。
有关更多信息,请参考TraceQL 指标查询和配置 TraceQL 指标。
TraceQL 改进
TraceQL 是 Tempo 独有的查询语言,允许您对追踪数据执行自定义查询。要了解 TraceQL 语法,请参考TraceQL 文档。
我们添加了事件属性和链接作用域。与 Span 类似,它们都具有内部属性和普通属性。
event
作用域允许您查询 Span 中发生的事件。Span 事件是 Span 持续时间内的唯一时间点。Span 有助于构建服务结构层级,而 Span 事件可以提供更深层次的粒度,帮助您更快地调试应用程序并保持最佳性能。要了解如何使用 Span 事件,请阅读什么是 Span 事件?博客文章。[PR 3708, 3708, 3908]
如果您已为 Span 链接对追踪进行了插桩,则可以使用 link
作用域来搜索 Span 链接中的属性。Span 链接将一个 Span 与一个或多个其他 Span 相关联。[PR 3814, 3741]
有关 Span 链接的更多信息,请参考 Open Telemetry 项目中的Span 链接文档。
您可以在链接中搜索属性
{ link.opentracing.ref_type = "child_of" }
我们还添加了对 events
和 links
的自动补全支持。[ PR 3846]
Tempo 2.6 通过以下更新提高了 TraceQL 性能
- 以下方面的性能改进:
rate() by ()
查询 [ PR 3719] - 为范围查询添加缓存 [ PR 3796]
- 仅在指标查询上流式传输差异 [ PR 3808]
- 标签值查找在内部使用 protobuf 以提高延迟 [ PR 3731]
- TraceQL 指标查询在内部使用 protobuf 以提高延迟 [ PR 3745]
- TraceQL 搜索及其他端点在内部使用 protobuf 以提高延迟和资源利用率 [ PR 3944]
- 在 local-blocks Processor 中添加指标查询的本地磁盘缓存 [ PR 3799]
- 使用追踪级别内部属性进行查询的性能改进 [ PR 3920]
- 在 Query Frontend 中使用多个 Goroutine 并行解组响应。[ PR 3713]
原生直方图支持
Metrics-generator 可以生成原生直方图以获取高分辨率数据。PR 3789
原生直方图是 Prometheus 中的一种数据类型,可以生成、存储和查询高分辨率的观测直方图。与经典直方图相比,它通常提供更高的分辨率和更简单的插桩。
要了解更多信息,请参考原生直方图文档。
性能改进
Tempo 2.6 的一项主要改进是通过轮询改进降低了内存使用率。[PR 3950, 3951, 3952
这项改进得益于以下一些变更:
- 添加数据质量指标以衡量没有根 Span 的追踪 [ PR 3812]
- 降低 Query Frontend 的内存消耗 [ PR 3888]
- 减少缓存中间件的分配 [ PR 3976]
- 减少构建查询器分片请求的分配 [ PR 3932]
- 通过选择日期范围改善从 Tempo Vulture 的 trace id 查找 [ PR 3874]
其他增强和改进
此版本还包含以下值得注意的更新。
2.6.1
- 将 gRPC 健康服务器注册到 tempo-query。[PR 4178]
- 支持 Tempo 在 IBM s390x 上运行。[PR 4175]
- tempo-query:为服务器和客户端分离 TLS 设置。[PR 4177]
- 通过允许并行查询来加速 tempo-query 追踪搜索。[PR 4159]
2.6.0
- 恢复 OTel Receiver 指标。[ PR 3917]
- search v2 API 的标签名称过滤新增一个
q
参数。[ PR 3822] - 添加中间件以阻止匹配的 URL。[ PR 3963]
- 添加数据质量指标以衡量没有根 Span 的追踪。[ PR 3812]
- 并发实现租户轮询。[ PR 3647]
- 添加原生直方图用于内部指标 [ PR 3870]
- 添加 Tempo CLI 命令,通过重写块来按 ID 丢弃追踪。[ PR 3856, 文档]
- 添加新的 OTel 兼容 Traces API V2。[ PR 3912, 文档]
- 将
Batches
重命名为ResourceSpans
。[ PR 3895]
升级注意事项
当升级到 Tempo 2.6 时,请注意以下注意事项和重大变更。
TraceQL 指标的操作变更
由于无法达到 RF3 去重性能目标,我们已将 TraceQL 指标更改为 RF1(副本系数 1)模式。这需要对查询 TraceQL 指标进行一些操作变更。
TraceQL 指标仍被视为实验性功能。我们希望在完成 RF1 读写路径生产化后尽快将其标记为 GA。[PR 3628, 3691, 3723, 3995]
对于近期数据
必须启用 local-blocks Processor 才能开始使用诸如 { } | rate()
的指标查询。如果未启用,指标查询将失败,并显示错误信息 localblocks processor not found
。启用 local-blocks Processor 可以按租户进行,也可以对所有租户进行。
在每个租户的 Overrides 中进行配置
overrides: 'tenantID': metrics_generator_processors: - local-blocks
默认情况下,在主配置中为所有租户进行配置
overrides: defaults: metrics_generator: processors: [local-blocks]
添加此配置以针对所有 Span(而不仅仅是服务器 Span)运行 TraceQL 指标查询
metrics_generator:
processor:
local_blocks:
filter_server_spans: false
对于历史数据
要在历史数据上运行指标查询,必须配置 local-blocks Processor 将 RF1 块刷写到对象存储
metrics_generator:
processor:
local_blocks:
flush_to_storage: true
过渡到 vParquet4
vParquet4 格式现在是默认的块格式。它已达到生产可用状态,我们强烈建议切换到此格式以提高查询性能。[PR 3810]
升级到 Tempo 2.6 会修改 Parquet 块格式。从 2.5 升级到 2.6 时,您无需对 Parquet 做任何操作。如果您使用了 vParquet2 或 vParquet3,所有旧块都将保留并可被 Tempo 2.6 读取。Tempo 2.6 默认创建 vParquet4 块,这将启用新的 TraceQL 功能。
虽然您可以在 Tempo 2.6 中使用 vParquet2 或 vParquet3,但 vParquet4 只能与 Tempo 2.5 及更高版本一起使用。如果您正在 2.5 中使用 vParquet4,则需要升级到 Tempo 2.6 才能使用新的 TraceQL 功能。
您还可以使用 tempo-cli analyse blocks
命令查询 vParquet4 块。PR 3868]。请参考Tempo CLI 文档了解更多信息。
有关升级的信息,请参考升级到 Tempo 2.6和选择不同的块格式。
更新、移除或重命名的配置参数
参数 | 说明 |
storage | 已移除。Azure v2 是唯一且主要的 Azure 后端 [PR 3875] |
autocomplete_filtering_enabled | 功能标志选项已移除。此功能始终启用。[PR 3729] |
completedfilepath 和 blocksfilepath | 移除未使用的 WAL 配置选项。[PR 3911] |
compaction_disabled | 新增。允许按租户禁用压缩。[PR 3965, 文档] |
Storage | 布尔标志,用于激活或禁用 S3 存储块配置中的双栈模式。[PR 3721, 文档] |
其他重大变更
- 重大变更
tempo-query
不再是带有 grpcPlugin 的 Jaeger 实例。它现在是一个独立的服务器。默认在0.0.0.0:7777
上提供 Jaeger 的 gRPC API。[PR 3840]
Bug 修复
有关完整列表,请参考 Tempo CHANGELOG。
2.6.1
- 恢复 application-json Content-Type 头。[PR 4123]
2.6.0
- 修复使用
rate()
和by
的某些指标查询中的 panic。[ PR 3847] - 修复按可能不存在的属性进行分组时的指标查询。[ PR 3734]
- 修复
traceDuration
上的指标查询直方图和分位数。[ PR 3879] - 修复 Query Frontend Exemplar 计算中的除零错误。[ PR 3936]
- 修复使用 Scoped Intrinsics 进行查询时的自动补全功能。[ PR 3865]
- 改进了在启用刷写后,对
localblocks
Processor 中完整块的处理。[ PR 3805] - 修复第二次迭代时,使用事件迭代器导致主迭代器重复追加的问题。[ PR 3903]
- 修复缓存响应的 Frontend 解析错误 [ PR 3759]
max_global_traces_per_user
: 转换为本地限制时考虑ingestion.tenant_shard_size
。[ PR 3618]- 通过读取
io.EOF
来修复 GCP 和 AWS 上的 HTTP 连接复用问题。[ PR 3760] - 处理越界的 Span 类型。[ PR 3861]
- 在租户错误时保留先前的租户块列表。PR 3860
- 修复 Azure 后端
Find()
调用中的前缀处理。[ PR 3875] - 修正采集的追踪超出采集宽松时间时的块结束时间。[ PR 3954]
- 修复 Combiner 中,流式响应在被修改时可能被 marshal 的竞争条件,导致 panic。[ PR 3961]
- 将搜索选项传递给后端,用于
SearchTagValuesBlocksV2
请求。[ PR 3971]