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

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

sum(container_memory_working_set_bytes{image!="",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 过滤掉结果。

标签: prometheus promql


【解决方案1】:

您可以使用label_replace

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

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

[已编辑]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
相关资源
最近更新 更多