繁体   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