带有查询变量的 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查询变量过滤掉的所有节点。
我的 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"}
时,整个查询会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查询变量过滤掉的所有节点。