Prometheus - 通过正则表达式聚合和重新标记

Posted

技术标签:

【中文标题】Prometheus - 通过正则表达式聚合和重新标记【英文标题】:Prometheus - Aggregate and relabel by regex 【发布时间】:2019-01-07 21:19:21 【问题描述】:

我目前有以下 Promql 查询,它允许我查询我的每个 K8S pod 使用的内存:

sum(container_memory_working_set_bytesimage!="",name=~"^k8s_.*") by (pod_name)

pod 的名字后跟一个 K8S 定义的 hash:

weave-net-kxpxc
weave-net-jjkki
weave-net-asdkk

都属于同一个应用:weave-net

我想要的是聚合属于同一应用程序的所有 pod 的内存。

因此,查询将汇总所有 weave-net pod 的内存,并将结果放入名为 weave 的应用程序中。比如结果会是:

pod_name="weave-net"            10

而不是

pod_name="weave-net-kxpxc"       5
pod_name="weave-net-jjkki"       3
pod_name="weave-net-asdkk"       2

是否有可能这样做,如果可以,怎么做?

【问题讨论】:

我有完全相同的问题,但没有找到解决方案,在这个阶段这样做(我想这是不可能的)。但是,可以添加一个额外的标签并使用 prometheus 的 relabel 配置中的正则表达式来获取要分组的标签。如果这对您来说是一个可能的解决方案,我可以发布一个答案如何做到这一点。 嗨@ThomasBöhm!很高兴看到您的解决方案。就个人而言,我只是去写一个 Python 脚本,根据 regex 过滤掉结果。 【参考方案1】:

您可以使用label_replace

sum(label_replace(container_memory_working_set_bytesimage!="",name=~"^k8s_.*", "pod_set", "$1", "pod_name", "(.*)-.5")) by (pod_set)

您将包含一个与第一组 ($1) 匹配的新标签 (pod_set),它通过匹配 pod_name 标签上的正则表达式。然后你总结新标签pod_set

[已编辑]

【讨论】:

如何在一定范围内执行此操作?说平均 10 分钟 ***.com/questions/60783916/… 为我工作 :) 谢谢!

以上是关于Prometheus - 通过正则表达式聚合和重新标记的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus 正则表达式匹配不同的标签

Grafana + Prometheus 如何在查询指标中使用正则表达式?

Prometheus 查询语言

Prometheus-PQL

Prometheus学习系列之Prometheus 查询说明

prometheus学习笔记