如何在 Prometheus 查询中对标签进行分组?

How can I group labels in a Prometheus query?

如果我有一个带有以下标签的指标:

my_metric{group="group a"}  100
my_metric{group="group b"}  100
my_metric{group="group c"}  100
my_metric{group="misc group a"}  1
my_metric{group="misc group b"}  2
my_metric{group="misc group c"}  1
my_metric{group="misc group d"}  1

是否可以进行查询甚至 label_replace 将 'misc' 组组合在一起?

(我意识到指标基数需要改进,我已经更新了应用程序来修复它。但是它给我留下了这个问题,如果我想稍后通过查询来修复指标)

您可以使用正则表达式查询:

my_metric{group=~"misc group.+"}

这将为您提供 group 以 "misc group" 开头的所有内容。

是的,您可以使用标签替换将所有杂项组合在一起:

sum by (new_group) (
  label_replace(
    label_replace(my_metric, "new_group", "", "group", ".+"),
    "new_group", "misc", "group", "misc group.+"
  )
)

内部label_replace将组中的所有值复制到new_group,外部用"misc"覆盖匹配"misc group.+"的值,然后我们用[=求和17=] 标签。使用新标签的原因是,如果我们只是覆盖 "group" 标签,则该系列将不再是唯一的,并且总和将不起作用。

更简单

sum by (group) (my_metric)