繁体   English   中英

使用查询变量在 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)

在此处输入图像描述 此查询将返回标签为role="worker"的节点列表。

问题是因为可能存在其中一个节点不包含任何定义 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM