首页 > 解决方案 > 基于正则表达式的 Prometheus 查询中的组标签

问题描述

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

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

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

标签: prometheuspromql

解决方案


在这篇文章中接受的答案的帮助下,我想出了如何做到这一点。为那些将来会遇到同样问题的人发布答案:

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,它将把它视为另一个组。


推荐阅读