通过 Prometheus 获取 Kubernetes 中 Pod 资源(CPU/MEM/GPU)消耗信息

容器化应用资源消耗 ≠ 设备资源消耗

不管是运维监控还是应用性能分析,资源消耗信息都是其中很重要的基础数据。之前,应用独占一台虚拟机或物理机,因此我们仅需要采集该设备的资源信息即可。有很多成熟的方案来支撑。

在这里插入图片描述

随着容器化的普及,越来越多的应用会使用 Kubernetes 来进行部署,这样一来一台物理机上可能会运行多个应用。因此,容器化应用资源消耗没办法等同于设备资源消耗。我们需要针对这样的场景来找出新的解决方案。

Prometheus 及其 ProQL

Prometheus 中获取数据通过 query 进行查询,而 query 的写法是满足 ProQL 的语法。

这里大致介绍下 ProQL 的大致规则:

  • metrics_name:指标名,即CPU、内存、IO这些具体的指标项;
  • metrics_label :指标标签,即通过标签对某个指标名进行过滤。
  • metrics_value :用指标名+标签查出来的结果。

指标名与指标标签的写法如下:

metrics_name{metrics_label1="xxx", metrics_label2="yyy"}

更详细的资料可以查看官网:https://prometheus.io/docs/prometheus/latest/querying/basics/

Prometheus 中常见资源监控的 query 写法

Pod CPU 利用率

query = sum by(pod_name) (rate(container_cpu_usage_seconds_total{pod_name=~"$pod_name"}[1m]))  //CPU使用率,单位%

注:pod_name 可通过下列命令获取:

kubectl get pods

Pod MEM 占用

query = sum by(pod_name) (container_memory_working_set_bytes{pod_name=~"$pod_name"}) / 1048576 //内存使用率,单位MiB

注:pod_name 可通过下列命令获取:

kubectl get pods

Pod GPU 利用率

query = dcgm_gpu_utilization{uuid="$uuid"} //单卡显卡利用率,单位%

注:gpu 的 uuid 可通过下列命令获取:

kubectl exec -it $pod_name -- env|grep NVIDIA_VISIBLE_DEVICES

Pod GPU 显存占用

query = dcgm_fb_used{uuid="$uuid"} //单卡显存,单位MiB

注:gpu 的 uuid 可通过下列命令获取:

kubectl exec -it $pod_name -- env|grep NVIDIA_VISIBLE_DEVICES
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章