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

如何在Grafana仪表板中基于URI合并两个时间序列

解决方法:关联两个PromQL查询并生成目标时间序列

方法一:直接用PromQL实现(推荐,性能更优)

你可以通过PromQL的group_left关联语法,直接在查询层面完成URI匹配、标签合并和数值保留,不需要依赖Grafana Transform。

最终查询语句

// 查询2:计算各URI的TPS
sum by (uri) (rate(http_server_requests_seconds_count{}[1m]))
  // 按URI关联,将查询1的identifier标签附加到结果上
  * on(uri) group_left(identifier)
  // 查询1:筛选符合条件的(identifier, uri)组合,用count确保仅保留存在的组合
  count by (identifier,uri) (custom_metric_total{identifier=~"${identifiers}"})

逻辑说明

  1. 右侧的count查询:仅保留${identifiers}变量指定的identifier对应的(identifier, uri)对,返回数值为1(只要该组合存在),核心作用是提供关联所需的标签。
  2. on(uri) group_left(identifier):按URI字段关联左右两个查询结果,将左侧TPS数据与右侧的identifier标签合并,只保留两边共同存在的URI。
  3. 乘法操作:因为右侧数值是1,不会改变左侧TPS的实际数值,仅完成标签的附加和数据过滤。

方法二:用Grafana Transform实现(灵活,无需复杂PromQL)

如果不想修改PromQL,可以通过Grafana的Transform功能完成数据合并:

  1. 添加两个原始查询

    • 查询1:sum by (identifier,uri) (custom_metric_total{identifier=~"${identifiers}"})
    • 查询2:sum by (uri) (rate(http_server_requests_seconds_count{}[1m]))
  2. 添加Transform步骤

    • 第一步:Filter by value
      • 选择查询1的结果,过滤掉数值为0的条目(确保只保留存在的(identifier, uri)组合)。
    • 第二步:Join
      • 设置Join on字段为uri,选择查询1作为左表、查询2作为右表。
      • 勾选保留字段:左表的identifier、uri,右表的数值字段(如Value)。
    • 第三步:Organize fields(可选)
      • 调整字段顺序,或把数值字段重命名为TPS,方便后续可视化。
  3. 可视化配置

    • 选择时间序列面板,将图例设置为identifier - uri,即可展示每个组合的TPS时间序列。

注意事项

  • 确保两个查询中的uri标签完全一致(比如大小写、路径参数、结尾斜杠等),如果存在差异,可先用label_replace对URI做标准化处理(例如去掉路径参数)。
  • 数据量较大时,优先用PromQL方法,避免Transform带来的性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:37:39