[英]count k8s cluster cpu/memory usage with prometheus
我想用 prometheus 計算 k8s 集群 cpu/內存使用情況(不是 k8s pod 使用情況),以便我可以在 grafana 中顯示。
我使用sum (container_memory_usage_bytes{id="/"})
來獲取使用的 k8s 集群 memory,並使用topk(1, sum(kube_node_status_capacity_memory_bytes) by (instance))
來獲取整個 k8s 集群 memory,但它們無法划分,因為topk
function不是返回值而是向量。
我怎樣才能做到這一點?
我已經通過gcloud默認應用程序在Google Cloud上安裝了Prometheus。 儀表板隨安裝自動部署。 以下查詢是用於群集的內存和CPU使用率的查詢:
按名稱空間划分的CPU使用率:
sum(irate(container_cpu_usage_seconds_total[1m])) by (namespace)
命名空間的內存使用情況(無緩存):
sum(container_memory_rss) by (namespace)
CPU請求承諾:
sum(kube_pod_container_resource_requests_cpu_cores) / sum(node:node_num_cpu:sum)
內存請求承諾:
sum(kube_pod_container_resource_requests_memory_bytes) / sum(node_memory_MemTotal)
以下查詢返回 K8S 中所有正在運行的 pod 的全局 memory 使用情況:
sum(container_memory_usage_bytes{container!=""})
此查詢使用sum() 聚合 function來匯總在 K8S 中運行的所有容器的 memory 使用情況。
需要container!=""
過濾器來過濾掉與cgroups
層次結構相關的冗余指標。 有關詳細信息,請參閱此答案。
以下查詢以百分比形式返回 k8s 集群的全局 memory 使用率:
100 * (
sum(container_memory_usage_bytes{container!=""})
/
sum(kube_node_status_capacity{resource="memory"})
)
請注意,由於調度策略,K8S 中的某些節點的 memory 使用百分比可能比其他節點高得多。 以下查詢允許確定使用百分比最大 memory 的前 3 個節點:
topk(3,
100 * (
sum(container_memory_usage_bytes{container!=""}) by (node)
/ on(node)
kube_node_status_capacity{resource="memory"}
)
)
此查詢使用topk function 將返回的時間序列數限制為 3。請注意,查詢可能會在 Grafana 中的圖表上返回超過 3 個時間序列,因為topk
會為圖表上的每個點返回最多k
個唯一時間序列。 如果您需要一個具有不超過k
個最大值的時間序列的圖表,請查看 MetricsQL 中的topk_ topk_*
函數,例如topk_max 、 topk_avg或topk_last 。
該查詢還使用on()
修飾符進行/
操作。 此修飾符限制標簽集,用於在/
的左側和右側查找具有相同 label 值的時間序列對。 然后 Prometheus 對每一對單獨應用/
操作。 有關詳細信息,請參閱這些文檔。
以下查詢返回 Kube.netes 中所有 Pod 使用的 CPU 內核數:
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m]))
以下查詢以百分比形式返回 k8s 集群的全局 CPU 使用率:
100 * (
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m]))
/
sum(kube_node_status_capacity{resource="cpu"})
)
某些節點的負載可能遠遠超過 Kube.netes 集群中的 rest 個節點。 以下查詢返回 CPU 負載最高的前 3 個節點:
topk(3,
100 * (
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (node)
/ on(node)
kube_node_status_capacity{resource="cpu"})
)
我的主要問題是topk(1, sum(kube_node_status_capacity_memory_bytes) by (instance))
無法返回值,但是現在我發現使用sum()
隱蔽它可以工作,整個查詢如下:
sum(sum (container_memory_usage_bytes{id="/"})by (instance))/sum(topk(1, sum(kube_node_status_capacity_memory_bytes) by (instance)))*100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.