基于正则表达式对 Prometheus 查询中的标签进行分组

时间:2021-03-17 08:49:19

标签: prometheus promql

想象一下我有这样的指标:

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

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

1 个答案:

答案 0 :(得分:0)

我再次在 the accepted answer from this post 的帮助下找到了方法。为将来遇到相同问题的人发布答案:

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

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

相关问题