通過 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章