Grafana Traces Drilldown
概述
在分布式系统的故障排查与性能优化中,链路追踪(Traces)是 SRE 定位延迟根因的核心手段。Grafana 的 Trace 探索应用(Explore Traces App)提供的 “Drilldown” 功能,能够自动分析追踪数据,生成有助于理解服务依赖关系和延迟分布的视图,其中 “Root cause latency” 标签页尤为关键。然而,自 Grafana 升级至 12.4.0 版本后,该功能可能出现查询无数据(“No data for selected query”)的异常,尽管底层数据源(如 Tempo)中存在足量数据。此问题会直接阻塞 SRE 进行高效的根因分析,是影响可观测性工具链可靠性的典型事件。
核心概念
- Traces Drilldown: Grafana 提供的一种自动化追踪数据探索界面。它超越了原始的 TraceQL 查询,通过结构化的交互视图(如服务拓扑图、延迟分布图)帮助用户快速定位性能瓶颈。
- Root cause latency: Drilldown 功能中的一个特定分析视图。其目的是从海量 Span 中,根据依赖关系和时序,自动推断出最可能导致服务整体延迟的“根因”Span 或服务。
- TraceQL: Tempo 等追踪后端使用的查询语言,用于过滤和检索特定的 Span 及 Trace。Drilldown 功能最终会将其用户选择的条件(如时间范围、持续时间阈值、主信号
nestedSetParent<0)翻译成具体的 TraceQL 查询语句。
实践
根据问题报告中提供的日志,我们可以分析故障现象并定位潜在原因。
-
问题现象复现: 用户在 Grafana 的 Explore Traces App 中,进入 Drilldown 视图并选择 “Root cause latency” 标签页时,界面显示 “No data for selected query”。同时,Grafana 后台日志记录了来自
tsdb.tempo插件的错误信息。 -
日志分析: 关键错误日志如下:
level=error msg="Failed to send request to Tempo" error="Get '...': context canceled" level=error msg="Error processing TraceQL query" error="Get '...': context canceled"这表明 Grafana 后端在向 Tempo 数据源发送查询请求时,该请求被取消了(
context canceled),导致查询提前终止。随后,Grafana 返回了一个status: 400(Bad Request) 的错误响应给前端。 -
根因推断:
- 查询参数异常:被取消的请求 URL 中包含一个复杂的 TraceQL 查询字符串:
q={nestedSetParent<0 && true && duration >= 268ms}。问题很可能出在 Grafana 12.4.0 版本中,TraceQL 查询的生成或编码逻辑发生了变更,导致构造出了 Tempo 无法正确解析或认为无效的查询语句。 - 版本关联性:问题明确在升级至 12.4.0 后出现,且在旧版本中工作正常,强烈指向这是一个由版本更新引入的回归缺陷(Regression)。日志中明确出现了
pluginId=tempo,表明问题出在 Grafana 与 Tempo 数据源插件的交互层。 - 前端表现:由于后端查询失败并返回错误,Drilldown 前端未能接收到任何追踪数据,因此显示 “No data for selected query”。
- 查询参数异常:被取消的请求 URL 中包含一个复杂的 TraceQL 查询字符串:
SRE 要点
- 对可靠性的直接影响:此类问题直接损害了 SRE 核心工具链的可靠性。当关键的根因分析功能失效时,会显著延长故障定位的平均时间(MTTR),影响事件响应的效率和质量。SRE 团队需要将监控工具自身(如 Grafana)的可用性和功能完备性纳入 SLI/SLO 考量。
- 可观测性工具的监控:SRE 应建立对可观测性平台本身的监控。例如,可以合成模拟关键用户操作(如打开 Drilldown 并查询特定视图),并监控其成功率与延迟,确保核心分析功能可用。
- 最佳实践与反模式:
- 最佳实践:在升级核心监控工具(如 Grafana)前,应在预发布环境充分测试关键工作流(特别是 Trace、Log 关联查询)。保持版本更新日志的审阅习惯,及时关注已知的 Bug。
- 常见反模式:忽视工具版本的平滑升级测试,直接在生产环境升级;对工具返回的“无数据”现象不加区分地归咎于数据源或自身数据缺失,而忽略了工具本身可能存在缺陷。
- 相关指标(SLI/SLO):
- 虽然这不是一个直接的业务 SLI,但可以定义与 可观测性工具功能可用性 相关的内部指标。例如:
- SLI: “Trace Drilldown 根因分析功能查询成功率” = (成功返回数据的查询请求数) / (总查询请求数)。
- SLO: 该 SLI 在工作时间内应达到 99.5% 或更高。触发此问题的 Bug 会导致该 SLI 跌破 SLO,从而生成一个需要修复的告警事件。
- 虽然这不是一个直接的业务 SLI,但可以定义与 可观测性工具功能可用性 相关的内部指标。例如: