簡體   English   中英

使用 prometheus 計算 k8s 集群 cpu/內存使用情況

[英]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_maxtopk_avgtopk_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM