如何在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}"})
逻辑说明
- 右侧的
count查询:仅保留${identifiers}变量指定的identifier对应的(identifier, uri)对,返回数值为1(只要该组合存在),核心作用是提供关联所需的标签。 on(uri) group_left(identifier):按URI字段关联左右两个查询结果,将左侧TPS数据与右侧的identifier标签合并,只保留两边共同存在的URI。- 乘法操作:因为右侧数值是1,不会改变左侧TPS的实际数值,仅完成标签的附加和数据过滤。
方法二:用Grafana Transform实现(灵活,无需复杂PromQL)
如果不想修改PromQL,可以通过Grafana的Transform功能完成数据合并:
添加两个原始查询
- 查询1:
sum by (identifier,uri) (custom_metric_total{identifier=~"${identifiers}"}) - 查询2:
sum by (uri) (rate(http_server_requests_seconds_count{}[1m]))
- 查询1:
添加Transform步骤
- 第一步:Filter by value
- 选择查询1的结果,过滤掉数值为0的条目(确保只保留存在的(identifier, uri)组合)。
- 第二步:Join
- 设置
Join on字段为uri,选择查询1作为左表、查询2作为右表。 - 勾选保留字段:左表的
identifier、uri,右表的数值字段(如Value)。
- 设置
- 第三步:Organize fields(可选)
- 调整字段顺序,或把数值字段重命名为
TPS,方便后续可视化。
- 调整字段顺序,或把数值字段重命名为
- 第一步:Filter by value
可视化配置
- 选择时间序列面板,将图例设置为
identifier - uri,即可展示每个组合的TPS时间序列。
- 选择时间序列面板,将图例设置为
注意事项
- 确保两个查询中的
uri标签完全一致(比如大小写、路径参数、结尾斜杠等),如果存在差异,可先用label_replace对URI做标准化处理(例如去掉路径参数)。 - 数据量较大时,优先用PromQL方法,避免Transform带来的性能损耗。
内容的提问来源于stack exchange,提问作者Suhas
相关产品推荐
相关产品推荐

