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

Mor*_*nor 7 prometheus promql

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

sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*"}) by (pod_name)

Pod 的名称后跟由 K8S 定义的哈希:

weave-net-kxpxc
weave-net-jjkki
weave-net-asdkk
Run Code Online (Sandbox Code Playgroud)

哪些都属于同一个应用程序: weave-net

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

因此,查询会将所有weave-netPod的内存相加,并将结果放在名为weave. 比如结果是:

{pod_name="weave-net"}            10
Run Code Online (Sandbox Code Playgroud)

代替

{pod_name="weave-net-kxpxc"}       5
{pod_name="weave-net-jjkki"}       3
{pod_name="weave-net-asdkk"}       2
Run Code Online (Sandbox Code Playgroud)

甚至有可能这样做,如果是,如何?

Ivá*_*gre 12

您可以使用label_replace

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

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

[编辑]

  • 如何在一定范围内做到这一点?平均 10 分钟 /sf/ask/4254874151/ (2认同)