Prometheus - 通过正则表达式聚合和重新标记
Prometheus - Aggregate and relabel by regex
我目前有以下 Promql 查询,它允许我查询我的每个 K8S 使用的内存 pods:
sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*"}) by (pod_name)
pod 的名称后跟 K8S 定义的哈希值:
weave-net-kxpxc
weave-net-jjkki
weave-net-asdkk
属于同一个应用:weave-net
我想要的是聚合属于同一个应用程序的所有 pods 的内存。
因此,查询将对所有 weave-net
pods 的内存求和并将结果放入名为 weave
的应用程序中。例如结果将是:
{pod_name="weave-net"} 10
而不是
{pod_name="weave-net-kxpxc"} 5
{pod_name="weave-net-jjkki"} 3
{pod_name="weave-net-asdkk"} 2
是否可以这样做,如果可以,怎么做?
您可以使用label_replace
sum(label_replace(container_memory_working_set_bytes{image!="",name=~"^k8s_.*"}, "pod_set", "", "pod_name", "(.*)-.{5}")) by (pod_set)
您将包含一个新标签 (pod_set
),该标签与 pod_name
标签上匹配正则表达式的第一组 ($1) 相匹配。然后你对新标签求和 pod_set
.
[已编辑]
我目前有以下 Promql 查询,它允许我查询我的每个 K8S 使用的内存 pods:
sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*"}) by (pod_name)
pod 的名称后跟 K8S 定义的哈希值:
weave-net-kxpxc
weave-net-jjkki
weave-net-asdkk
属于同一个应用:weave-net
我想要的是聚合属于同一个应用程序的所有 pods 的内存。
因此,查询将对所有 weave-net
pods 的内存求和并将结果放入名为 weave
的应用程序中。例如结果将是:
{pod_name="weave-net"} 10
而不是
{pod_name="weave-net-kxpxc"} 5
{pod_name="weave-net-jjkki"} 3
{pod_name="weave-net-asdkk"} 2
是否可以这样做,如果可以,怎么做?
您可以使用label_replace
sum(label_replace(container_memory_working_set_bytes{image!="",name=~"^k8s_.*"}, "pod_set", "", "pod_name", "(.*)-.{5}")) by (pod_set)
您将包含一个新标签 (pod_set
),该标签与 pod_name
标签上匹配正则表达式的第一组 ($1) 相匹配。然后你对新标签求和 pod_set
.
[已编辑]