Grafana Mixed 数据源与时间覆盖的面板永久加载问题
概述
在 Grafana 面板中,Mixed 数据源是一种强大的工具,它允许在同一个面板内组合使用多种不同的数据源,或者通过 -- Dashboard --(“Other Panels”)数据源引用同一仪表盘内其他面板的数据。然而,一个已知的缺陷会破坏这种灵活性:当 Mixed 面板引用两个或更多 -- Dashboard -- 面板,并且为这些查询设置了 时间覆盖(Time shift 或 Relative time)时,面板将永久停留在加载状态(转圈动画持续),无法渲染数据。这是一个影响监控面板可用性的关键 UI 缺陷,直接关系到 SRE 团队依赖的自定义仪表板的可靠性。
核心概念
- Mixed 数据源:一种 Grafana 数据源类型,它本身不产生数据,而是作为代理,将查询转发到配置的一个或多个其他数据源。它可以用于在单一面板中聚合来自 Prometheus、SQL 数据库和另一个面板的数据。
-- Dashboard --数据源(Other Panels):Mixed数据源提供的一个特殊选项。它允许当前面板的查询直接引用并获取同一仪表盘内其他某个面板(称为“源面板”)的已处理结果数据,而无需重新向后端数据源发起查询。这常用于创建“链式面板”或数据摘要面板。- 时间覆盖(Time Override):在面板的“查询选项”中,可以为每个查询设置独立于全局时间范围的时间偏移(Time shift,例如
1h)或固定相对时间(Relative time,例如now-1h)。此功能用于对比不同时段的数据。 - 问题本质:该缺陷发生在前端渲染层。根据问题报告,底层的数据查询实际上已经成功执行并返回了数据,但 Grafana 的前端 UI 逻辑无法正确处理“多个仪表盘数据源查询”与“时间覆盖”相结合的场景,导致渲染循环无法完成,面板表现得如同数据永远在加载中。
实践
问题复现步骤
以下步骤精确描述了如何触发此问题:
- 创建源面板:在任意仪表盘中,创建一个使用任意数据源的面板(例如 TestData 数据源的
Random Walk序列)。此面板将作为数据提供者。 - 创建链式面板(触发面板):在同一仪表盘中添加一个新面板,并将其数据源设置为
Mixed。 - 配置多个仪表盘查询:在
Mixed数据源面板中,添加至少 两个 查询。将每个查询的数据源都选择为-- Dashboard --,并在下方的“面板”选项中,均指向步骤1中创建的源面板。 - 设置时间覆盖:在链式面板的“查询选项”区域,为其中任一或所有查询启用 Time shift(例如
1h)或 Relative time(例如now-6h到now-3h)。或者,也可以返回去为源面板本身设置时间覆盖。 - 观察现象:保存并刷新仪表盘。链式面板将出现一个持续不断的加载指示器(转圈),永远无法显示图表数据。若将面板查询数量减为 一个,或移除所有时间覆盖设置,面板则能立即正常渲染。
版本信息
此问题影响 Grafana v11.6.x、v12.4.x 及 v13.0.2 等多个版本。根据问题追踪,该缺陷是在 PR #124665 中引入的。
现状与规避
这是一个已确认的前端缺陷。在官方修复发布之前,SRE 团队必须采取规避措施:
- 避免使用组合:切勿在同一个
Mixed数据源面板中混合使用 多个-- Dashboard --查询 和 时间覆盖。 - 替代方案1:如果需要对来自不同面板的数据进行时间偏移对比,考虑将它们分别放在独立的面板中进行配置,或使用支持此特性的其他数据源(如 Prometheus 的
offset)直接查询原始数据。 - 替代方案2:如果必须使用
Mixed和仪表盘查询,确保每个Mixed面板中只包含一个-- Dashboard --查询。
SRE 要点
- 对可靠性的影响:此问题直接破坏了 Grafana 仪表板的可用性。依赖此类复杂链式面板的监控视图将完全失效,导致 SRE 团队无法获取关键的运营洞察,可能影响对系统状态的判断和事件响应速度。
- 可观测性关联:Grafana 是构建可观测性平台的核心 UI 组件。此类 UI 渲染缺陷会“掩盖”后端数据的实际可用性(数据已返回),造成“可观测性盲点”,即数据存在但不可查看。
- 最佳实践与反模式:
- 反模式:设计过于复杂的面板数据依赖关系。将多个面板结果通过
-- Dashboard --聚合后又施加时间覆盖,是当前触发已知缺陷的高风险模式。 - 最佳实践:监控配置的“简单性原则”。对于关键监控面板,应优先采用更简单、更稳定的数据流。在升级 Grafana 版本前,应在测试环境中验证复杂的仪表板功能。
- 反模式:设计过于复杂的面板数据依赖关系。将多个面板结果通过
- 相关指标:虽然此问题不直接影响 SLI/SLO 的计算(因为底层数据查询成功),但它影响了用于展示这些指标的工具的可靠性。因此,应将监控面板的UI 功能完好性(例如,能否正常渲染)视为监控基础设施本身的健康度指标之一。