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 - 通过正则表达式聚合和重新标记的主要内容,如果未能解决你的问题,请参考以下文章
Grafana + Prometheus 如何在查询指标中使用正则表达式?