You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grafana重复行中链式变量未按行局部值计算问题如何解决

问题原因

Grafana的全局模板变量只会在仪表板加载、变量值手动修改时全局计算一次,不会针对重复行的局部上下文重新执行查询,所以你拿到的$running_sessions永远是全局$clients选择All时返回的全量会话ID集合,自然所有行的面板都会展示全量数据。

可行解决方案

方案1:调整查询逻辑,移除全局$running_sessions依赖

这是改造成本最低的方案,不需要修改现有变量和行重复配置:

  1. 你当前配置了按$clients逐行重复,展开后每一行上下文内的$clients是对应当前行的单个客户值,而非全局的All值集合
  2. 直接在面板的PromQL中嵌入对应当前客户的实时MySQL查询,替换原有的全局$running_sessions变量:
sum without(instance) (metrics{
  module="XXX",
  category="XXX",
  name="RunStatus",
  id=~"[[你的MySQL数据源名称:select group_concat(id separator '|') from sessions where client_id = $clients]]"
})

把语句中的你的MySQL数据源名称替换为实际配置的MySQL数据源名即可,Grafana渲染每一行面板时,会针对当前行的$clients局部值实时执行这条MySQL查询,拿到对应当前客户的会话ID列表拼接为正则匹配格式,实现只展示当前客户会话数据的效果。

方案2:给Prometheus指标新增client_id标签(更推荐,性能更好)

如果可以调整Prometheus的采集规则,给metrics指标增加client_id标签,就可以完全去掉MySQL查询的依赖,查询性能更高:
修改后的PromQL直接按当前行的客户值过滤即可:

sum without(instance) (metrics{
  module="XXX",
  category="XXX",
  name="RunStatus",
  client_id="$clients"
})

方案3:使用面板重复替代行重复(备选)

如果以上方案不适用,你可以删除原有重复行配置,直接对行内的面板配置重复规则,重复维度选择$clients,同时将$running_sessions变量的刷新规则修改为「随时间范围刷新」,也可以实现按客户拆分展示对应数据的效果。


内容的提问来源于stack exchange,提问作者Callixte Cauchois

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:45:02