Prometheus - 不允许多对多匹配

Prometheus - many-to-many matching not allowed

我第一次尝试使用矢量匹配,但收到一条错误消息“不允许多对多匹配:匹配标签在一侧必须是唯一的”,我不明白为什么。

这是我的表达方式:

sum(rate(container_cpu_usage_seconds_total{image!="",pod_name=~"sentry.*",container_name!="POD"}[5m])) by (container_name) 
* on (container_name) group_left(container) 
avg by (container) (kube_pod_container_resource_requests_cpu_cores{container=~"sentry.*"})

两个向量的结果是

sum(rate(container_cpu_usage_seconds_total{image!=“”,pod_name=~“sentry.*“,container_name!=“POD”}[5m])) by (pod_name, namespace,container_name)


{container_name="sentry-web",namespace="infrastructure",pod_name="sentry-web-65757bf8f6-cgmsw"}
{container_name="sentry-statsds",namespace="infrastructure",pod_name="sentry-statsd-849699fb56-jnljm"}
{container_name="sentry-k8s",namespace="infrastructure",pod_name="sentry-k8s-66b9b88758-stn5x"}
{container_name="sentry-cron",namespace="infrastructure",pod_name="sentry-cron-7dcdfc5688-qh55k"}
{container_name="redis-exporter",namespace="infrastructure",pod_name="sentry-redis-exporter-779f4f85cb-clmc7"}
{container_name="rds-exporter",namespace="infrastructure",pod_name="sentry-rds-exporter-54bb4dcd8d-h5rh5"}
{container_name="nginx-exporter",namespace="infrastructure",pod_name="sentry-web-75959bc475-4dpg2"}
{container_name="nginx-exporter",namespace="infrastructure",pod_name="sentry-web-65757bf8f6-cgmsw"}
{container_name="nginx",namespace="infrastructure",pod_name="sentry-web-75959bc475-4dpg2"}

avg by (container) (kube_pod_container_resource_requests_cpu_cores{container=~“sentry.*“})

{container="sentry-k8s"}    0.1
{container="sentry-statsds"}    0.1
{container="sentry-cron"}    0.1
{container="sentry-workers"}    0.5
{container="sentry-web"}    1

第二个向量有唯一标签,为什么我会收到这个错误?有什么想法吗?

RHS 都有相同的 container_name 标签,因为它们没有 container_name 标签,所以这最终成为多对多匹配。您可能想在这里做的是使用 label_replace 重命名标签,或修复标签的来源以具有一致的命名。