基于正则表达式的普罗米修斯查询中的分组标签

Group labels in a Prometheus query based on regex

假设我有这样的指标:

sample_metric{type="some-type1-1234"} 2
sample_metric{type="some-type1-5678"} 1
sample_metric{type="some-type2-9876"} 4
sample_metric{type="some-type2-4321"} 3

现在我想根据遵循相同模式 的类型对度量值求和。所以,对于上面的例子,期望的结果是有 2 个总和:

type1: 3
type2: 7

这个问题有点类似于,但是在我的情况下,我事先并不知道这些组。我只知道他们遵循的模式。有没有办法通过一个使用正则表达式的查询来实现这一点?

我再次在 的帮助下找到了解决方法。为将来遇到同样问题的人发布答案:

sum by (type_group) (
  label_replace(
    label_replace(sample_metric, "type_group", "", "type", ".+"),
    "type_group", "", "type", "some-(\w+(-\w+)*)-.*"
  )
)

因此,内部 label_replace 引入了一个名为 type_group 的新标签,而外部 label_replace 将值替换为从原始标签中提取的 type,其中正则表达式的帮助。因此,type_group 将包含值,例如 type1type2</code> 指的是要拉取的正则表达式组)。内部组 <code>(-\w+)* 表示您的组可能由多个部分组成,例如type1-type12,它会把它当作另一个组。

不需要使用两个 label_replace() 函数 - 一个 label_replace() 就足够了:

sum by (type_group) (
  label_replace(
    sample_metric,
    "type_group", "", "type", "some-(\w+(-\w+)*)-.*"
  )
)

它将 type 标签与给定的正则表达式 - some-(\w+(-\w+)*)-.* - 匹配,然后将匹配的外部组放入 type_group 标签中。然后 sum by (type_group) (...) 对按构建的 type_group 标签分组的结果求和。