文章目錄
容器化應用資源消耗 ≠ 設備資源消耗
不管是運維監控還是應用性能分析,資源消耗信息都是其中很重要的基礎數據。之前,應用獨佔一臺虛擬機或物理機,因此我們僅需要採集該設備的資源信息即可。有很多成熟的方案來支撐。
隨着容器化的普及,越來越多的應用會使用 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