菜单
开源 本页内容适用于开源版本。

版本 2.6 发布说明

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

此版本为您带来了

  • TraceQL 语言的新增功能,包括按 Span 事件、链接和数组进行搜索的能力
  • TraceQL 指标查询类型的新增功能,包括 Compare 函数和执行即时查询(返回速度比范围查询更快)的能力。
  • 性能和稳定性提升

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

这些发布说明重点介绍了最重要的功能和 Bug 修复。有关完整列表,请参考 Tempo 变更日志

功能和增强

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

额外的 TraceQL 指标(实验性)

在此版本中,我们添加了几个TraceQL 指标。在 Tempo 2.6 中,TraceQL 指标增加了

此外,我们正在重构副本系数。请参考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" }

A TraceQL example showing link scope

我们还添加了对 eventslinks 的自动补全支持。[ 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

Comparison graph showing the reduction of memory usage due to the polling improvements

这项改进得益于以下一些变更:

  • 添加数据质量指标以衡量没有根 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 中进行配置

    yaml
      overrides:
        'tenantID':
          metrics_generator_processors:
            - local-blocks
  • 默认情况下,在主配置中为所有租户进行配置

    yaml
    overrides:
      defaults:
        metrics_generator:
          processors: [local-blocks]

添加此配置以针对所有 Span(而不仅仅是服务器 Span)运行 TraceQL 指标查询

yaml
metrics_generator:
  processor:
    local_blocks:
      filter_server_spans: false

对于历史数据

要在历史数据上运行指标查询,必须配置 local-blocks Processor 将 RF1 块刷写到对象存储

yaml
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
    use_v2_sdk
已移除。Azure v2 是唯一且主要的 Azure 后端 [PR 3875]
autocomplete_filtering_enabled功能标志选项已移除。此功能始终启用。[PR 3729]
completedfilepathblocksfilepath移除未使用的 WAL 配置选项。[PR 3911]
compaction_disabled新增。允许按租户禁用压缩。[PR 3965, 文档]
Storage
  s3
    [enable_dual_stack: <bool>]
布尔标志,用于激活或禁用 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]