基于正则表达式的普罗米修斯查询中的分组标签
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
将包含值,例如 type1
和 type2
(</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
标签分组的结果求和。
假设我有这样的指标:
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
将包含值,例如 type1
和 type2
(</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
标签分组的结果求和。