主持人在 Grafana 中的 pods 面板

Host's pods panel in Grafana

我想在 Grafana 中有一个面板,显示主机中 pods 当前 运行 的内容。 对于主机变量,我有以下查询(作业变量只是 label_values(node_uname_info, job)。):

label_values(node_uname_info{job="$job"}, instance)

这给了我一组套接字:host_ip:port

我可以从 kube_pod_info{job="$job", host_ip="$host_ip"} 获取 pod 名称,但为了获取 IP,我需要删除套接字的端口部分:

label_replace(node_uname_info{job="$job", instance="$node"}, "host_ip", "", "instance", "(.*):.*")

我还没有找到如何在 pod 查询中使用新的 host_ip 标签最终获取 kube_pod_info 的所有 pod 标签值。我不想将 label_replace 放在 Prometheus 中以避免数据重复 - 有没有办法在 pod 查询中使用新的 host_ip 标签?

编辑:

我添加了带有正则表达式的 host_ip 变量,如 shan1024 在他的回答中显示的那样,并将面板的查询更改为:

sum by (pod) (kube_pod_info{job="$job", host_ip="$host_ip"})

然后我将面板的可视化更改为 table,并将列样式添加到 TimeValue(选择隐藏类型)。这允许我以类似列表的方式显示主机的 运行 pods。

这实际上在 Grafana 中很容易做到,不需要在 Prometheus 中更改标签。您只需要在 instance 变量中添加一个正则表达式(当我们添加一个带有捕获组的正则表达式时,第一个捕获组的值将是变量)。

例如

没有正则表达式的变量定义(你得到host_ip:port)-

用正则表达式定义变量(你只得到host_ip)-

然后您可以添加一个值为 kube_pod_info{ host_ip="$instance" } 的新变量以获取所选主机中的所有 pods。