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

如何按可变指定标签值对Prometheus指标聚合求和

Prometheus按指定标签值筛选求和方案

核心实现逻辑

使用PromQL的标签正则匹配运算符=~筛选指定标签值,配合sum聚合函数完成求和,可通过label_replace自定义返回结果的指标名。

针对初始需求(筛选label1为abc、def、jkl求和)

直接执行以下查询即可返回指标名为custom_metric_groupped、值为num1 + num2 + num4的结果:

label_replace(
  sum(custom_metric{label1=~"abc|def|jkl"}),
  "__name__",
  "custom_metric_groupped",
  "",
  ""
)

灵活调整筛选值的方法

你只需要修改大括号内label1=~后面的正则枚举内容即可,多个待匹配的标签值之间用|分隔,不需要改动其他语法。
例如后续需要改为仅筛选label1为def、jkl的指标求和,直接将语句修改为:

label_replace(
  sum(custom_metric{label1=~"def|jkl"}),
  "__name__",
  "custom_metric_groupped",
  "",
  ""
)

注意事项

  • =~是完全匹配模式,直接用|分隔目标值即可,不要随意添加.*等通配符,避免误匹配到包含目标字符串的其他标签值。这种正则枚举的写法比多个or条件拼接维护成本低很多,增删筛选值只需要改动|分隔的列表即可,不需要调整整体语句结构,非常适配需要频繁调整筛选值的场景。
  • 如果待匹配的标签值本身包含正则特殊字符(如.、*、|、(等),需要用双反斜杠\\转义后再写入正则,例如标签值为a.bc时要写为a\\.bc。
  • 如果后续需要按其他维度分组求和,只需要在sum后加by(待保留的标签名)即可,例如需要按label2维度分组求和时,聚合部分写为sum by(label2) (custom_metric{label1=~"abc|def|jkl"})。
  • 如果搭配Grafana等可视化平台使用,可以将待筛选的标签值配置为多选变量,平台会自动将选中的多个值用|拼接传入查询,无需手动修改语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:54:21