带有查询变量的 Grafana 中的 Prometheus 查询

Prometheus query in Grafana with query variable

我的 Grafana 面板查询是

sum(kube_pod_container_resource_limits_cpu_cores{node=~"$workers"}) / sum(kube_node_status_allocatable_cpu_cores{node=~"$workers"})

“workers”变量定义为 Prometheus 查询变量

label_values(kube_node_role{role="worker"}, node)

此查询将 return 具有标签 role="worker".

的节点列表

问题是因为可能存在其中一个节点不包含任何定义 CPU 限制的 pod 的情况,因此 kube_pod_container_resource_limits_cpu_cores 的指标不会'不包含该主机。

在面板中使用{node=~"$workers"}时,整个查询会returnN/A因为sum(kube_pod_container_resource_limits_cpu_cores{node=~"$workers"})returnN/A.

我发现原因是在引用变量$workers时,它只获取了第一个主机,巧合的是第一个主机没有kube_pod_container_resource_limits_cpu_cores的度量,所以在面板,它显示 N/A

如何修复它或改进查询以仅获取工作人员 CPU 限制承诺?我的设置有什么问题吗?

PS:我尝试定义一个名为 hosts 的新常量变量,它包含 label_values(kube_node_role{role="worker"}, node) 查询中 return 的所有节点,但手动组合它们带有 |(常量变量看起来像 hostA|hostB|hostC)。通过使用这个变量 sum(kube_pod_container_resource_limits_cpu_cores{node=~"$hosts"}) / sum(kube_node_status_allocatable_cpu_cores{node=~"$hosts"}) 调整查询,它可以正确显示! 当使用查询变量中的多个值时,可能是 Grafana 内部机制问题?

调试截图
第一个查询只包含一个主机。

这是一个技巧:

sum(kube_pod_container_resource_limits_cpu_cores{node=~"$workers"} or kube_node_status_allocatable_cpu_cores{node=~"$workers"}*0) / sum(kube_node_status_allocatable_cpu_cores{node=~"$workers"})

您可以通过 sum(a or b*0)kube_node_status_allocatable_cpu_cores 中轻松加入 node 标签值。通过这样做,当您查询主机不存在于 a 但存在于 b 时,您将得到一个 0

一张额外的屏幕截图来澄清我的观点。

在仪表板设置中,选择变量选项

Hide               = empty
Multi-value        = enable
Include All option = enable

然后select仪表板标签中的“all”,因此查询“node=~${workers}”可以select查询变量过滤掉的所有节点。