[英]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)
问题是因为可能存在其中一个节点不包含任何定义 CPU 限制的 Pod 的情况,因此
kube_pod_container_resource_limits_cpu_cores
的指标将不包含该主机。
在面板中使用
{node=~"$workers"}
时,整个查询将返回
N/A
因为
sum(kube_pod_container_resource_limits_cpu_cores{node=~"$workers"})
返回
N/A
。
我发现原因是在引用变量$workers
时,它只选择了第一个主机,巧合的是,第一个主机没有kube_pod_container_resource_limits_cpu_cores
的指标,所以在面板中,它显示N/A
。
如何修复它或改进查询以仅获取工作人员 CPU 限制承诺? 我的设置有什么问题吗?
PS:我尝试定义一个名为hosts
的新常量变量,该变量具有通过label_values(kube_node_role{role="worker"}, node)
的查询返回的所有节点,但手动将它们与|
(常量变量看起来像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
标签值。 通过这样做,当您使用 host 进行查询时,不存在于a
但存在于b
中,您将得到一个0
一个额外的屏幕截图来澄清我的观点。
在仪表板设置中,选择变量选项为
Hide = empty
Multi-value = enable
Include All option = enable
然后从仪表板标签中选择“全部”,这样查询“node=~${workers}”可以选择查询变量过滤掉的所有节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.