Tempo Span 过滤器的正则表达式匹配问题

概述

Grafana Tempo 是一个专为分布式追踪设计的高扩展性存储和查询后端。在 SRE 实践中,工程师常使用 Tempo 的探索器(Explorer)来分析追踪数据,通过 Span 过滤器对追踪 span 进行筛选,以快速定位性能瓶颈或错误根因。一个功能正常的过滤器是高效事件响应和性能分析的基础。本页面记录了一个关于 Tempo 探索器中 Span 过滤器正则表达式匹配功能失效 的已知问题。

核心概念

  • Span 过滤器 (Span Filters): 在 Tempo 探索器界面中,用户可以添加一个或多个过滤器,用于缩小追踪查询结果的范围。过滤器可以基于服务名、span 名称、标签(Tags)及其值等条件进行匹配。
  • 正则表达式匹配 (=~): 在 Tempo 的查询语言 TraceQL 以及界面过滤器中,=~ 操作符用于表示正则表达式匹配。其意图是匹配符合指定正则模式的值。
  • 问题本质: 根据提供的 issue,当用户在 Span 过滤器的值字段中使用正则表达式(例如 =~store-gateway.*)时,Tempo 返回零结果(0),而预期应返回大量匹配的 span。作为对比,使用精确匹配(如 =store-gateway-zone-a)则能正确返回结果。这表明 Span 过滤器的 UI 组件在构造或执行正则表达式查询时存在缺陷。

实践

问题复现步骤

根据原始 issue 描述,复现此问题的步骤如下:

  1. 在 Grafana 探索器(Explore)中,选择 Tempo 数据源。
  2. 执行一个基础的追踪查询(例如通过 TraceID)。
  3. 在查询结果或追踪详情视图中,定位到 Span 过滤器(spanFilters)区域。
  4. 添加一个新的过滤器,或在现有过滤器(如 k8s.statefulset.name)的值字段中,将匹配操作符设置为 =~。
  5. 输入一个正则表达式,例如 .+ 或 store-gateway.*。
  6. 观察查询结果,会发现返回的 span 数量为 0。
  7. 将匹配操作符切换为 =,并输入一个具体的精确值(如 store-gateway-zone-a),此时应能正常返回匹配的 span。

示例查询表达式(供参考)

在界面过滤器中,一个失效的配置可能类似于:

{k8s.statefulset.name=~"store-gateway.*"}

而一个有效的临时解决方案是使用精确匹配:

{k8s.statefulset.name="store-gateway-zone-a"}

请注意,直接在 TraceQL 查询栏中使用正则表达式是可行的,问题主要出在探索器界面的 Span 过滤器 这一特定UI组件上。

SRE 要点

与可靠性、可观测性、事件响应的关联

  • 可观测性 (Observability) 受损: Span 过滤器是 Tempo 提供精细查询能力的关键部分。其正则功能失效,直接削弱了用户从海量追踪数据中快速筛选和聚合信息的能力,阻碍了可观测性目标的达成。
  • 事件响应 (Incident Response) 效率下降: 在排查微服务链路性能问题或错误时,SRE 经常需要基于服务名、路径等字段的模式进行模糊匹配。如果必须使用多个精确匹配语句来模拟正则查询,会大大增加故障诊断的时间(MTTD/MTTR),尤其是在服务名具有通用命名规则(如 service-{version})的环境中。
  • 可靠性风险: 这种工具缺陷可能误导工程师,使其认为某个模式下不存在任何追踪数据,从而错误地排除故障点,延误根因定位。

最佳实践与常见反模式

  • 最佳实践:
    1. 验证工具功能: 在依赖一个关键查询功能(如正则匹配)前,先进行简单的验证测试,确认其按预期工作。
    2. 替代方案: 当遇到此 bug 时,临时方案是在 TraceQL 查询栏中手动编写包含 =~ 的查询,而不是依赖界面的过滤器组件。
    3. 关注官方更新: 密切关注 Grafana 官方对此 issue 的修复进展,并在更新版本发布后及时验证并应用补丁。
  • 常见反模式:
    1. 盲目信任 UI 功能: 假设所有图形化操作都正确地转换为底层查询语言,而不进行基本的交叉验证。
    2. 忽视工具限制: 在工具出现已知缺陷时,不寻找替代工作路径,导致工作效率停滞。

相关指标 (SLI/SLO/SLA)

此问题本身不直接定义 SLI/SLO,但它会影响 SRE 查询和分析追踪数据的效率。一个相关的间接 SLI 可以是“在 Tempo 中成功使用正则表达式过滤 Span 的请求成功率”,其 SLO 应接近 100%,而当前缺陷显然导致此 SLI 下降。解决此问题是恢复该指标至预期水平的关键。