Prometheus 和 Grafana 使用示例

环境信息

  • Prometheus 2.44.0
  • Grafana 9.5.2
  • Kubernetes 1.24

Kubernetes

CPU

Grafana 中获取所有 node 的 CPU 使用率

以下示例中,$node 为在 Grafana 的 Dashboard 中配置的 Variables,其值为 Kubernetes 的节点主机名。$interval 为在 Grafana 的 Dashboard 中配置的 Variables,其值表示 Prometheus 的查询时间范围变量。

100 - avg(rate(node_cpu_seconds_total{mode="idle",kubernetes_io_hostname=~"$node"}[$interval])) * 100

Memory

Grafana 中获取所有 node 的 Memory 使用率

100 - (sum(node_memory_MemFree_bytes{kubernetes_io_hostname=~"$node"}) + sum(node_memory_Cached_bytes{kubernetes_io_hostname=~"$node"}) + sum(node_memory_Buffers_bytes{kubernetes_io_hostname=~"$node"})) / sum(node_memory_MemTotal_bytes{kubernetes_io_hostname=~"$node"}) * 100

Disk

Grafana 中获取所有 node 的 Disk 使用率

100 - (sum(node_filesystem_avail_bytes{kubernetes_io_hostname=~"$node"}) / sum(node_filesystem_size_bytes{kubernetes_io_hostname=~"$node"})) * 100

Network

统计节点物理网卡的流入流出流量

irate(node_network_receive_bytes_total{device!~"cni0|docker.*|flannel.*|veth.*|virbr.*|lo",kubernetes_io_hostname=~"$node"}[$prometheusTimeInterval])

irate(node_network_transmit_bytes_total{device!~"cni0|docker.*|flannel.*|veth.*|virbr.*|lo",kubernetes_io_hostname=~"$node"}[$prometheusTimeInterval])

Pod

计算集群中可以使用的 Pod 的数量

相关指标参考说明

100 - sum(kubelet_running_pods{kubernetes_io_hostname=~"$node"}) / sum(kube_node_status_capacity{resource="pods",node=~"$node"}) * 100

按照 namespace 及 Pod 统计 Pod CPU 使用率

sum(rate(container_cpu_usage_seconds_total[1m])) by (namespace, pod)

统计 Pod 使用的内存

container_memory_usage_bytes

统计 Pods 的流量

irate(container_network_receive_bytes_total{namespace=~"$k8sNamespace",interface="eth0",kubernetes_io_hostname=~"$node"}[$prometheusTimeInterval])

统计 Pods 的重启次数

sum(kube_pod_container_status_restarts_total{namespace=~"$k8sNamespace"}) by (namespace,container)