【问题标题】:How to calculate percentage of specific pod CPU usage on each node?如何计算每个节点上特定 pod CPU 使用率的百分比?
【发布时间】:2019-11-16 22:47:24
【问题描述】:

我在具有 3 个节点的 k8s 集群上有一个 Fluentd 守护程序集。我想获得一个代表百分比的值,它可以让我了解 fluentd pod 目前在每个节点上占用了多少 CPU(以 % 为单位)。

在 Prometheus 中的实现方式是什么?

谢谢。

【问题讨论】:

    标签: kubernetes prometheus promql


    【解决方案1】:

    您可能希望在 Prometheus 中使用 container_cpu_usage_seconds_total 查询。

    像这样:

    sum (rate (container_cpu_usage_seconds_total{}[5m])) by (container_name)
    

    这将返回系统中所有 pod by 容器名称的 CPU 使用率。


    您也可以应用一些过滤器来细化输出。例如:

    sum (rate (container_cpu_usage_seconds_total{container_name=~"fluentd.*"}[5m])) by (container_name)
    

    上述查询将返回与以fluentd开头的容器名称匹配的 pod 的 CPU 使用率


    您可以将这些 pod 的使用率除以集群的总 cpu 核心数,以找出使用率的百分比,如下所示:

    sum (rate (container_cpu_usage_seconds_total{container_name=~"fluentd.*"}[5m])) / sum (machine_cpu_cores{}) * 100
    

    最后,为了获得特定容器名称在特定节点上的总 cpu 核心使用百分比,您需要添加额外的过滤器:instance="INSTANCE_NAME":

    sum (rate (container_cpu_usage_seconds_total{container_name=~"fluentd.*", instance="INSTANCE_NAME"}[5m])) / sum (machine_cpu_cores{}) * 100
    

    注意:根据 K8S 版本,container_cpu_usage_seconds_total 查询返回的字段可能会有所不同。在某些系统上,容器的名称由container_name 字段表示,而在某些系统上则是container

    【讨论】:

      【解决方案2】:

      以下查询应返回具有容器名称(从fluentd 开始)的 pod 的每个节点 CPU 使用率百分比:

      100 * (
        sum(rate(container_cpu_usage_seconds_total{container=~"fluentd.*"})) by (node)
          / on (node)
        kube_node_status_capacity{resource="cpu"}
      )
      

      container_cpu_usage_seconds_total 指标由 cadvisor 导出 - 请参阅 these docs

      kube_node_status_capacity 指标由kube-state-metrics 导出。见these docs

      【讨论】:

        猜你喜欢
        • 2022-10-18
        • 2019-12-10
        • 2020-03-21
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 2014-06-15
        • 2011-10-10
        • 2017-11-12
        相关资源
        最近更新 更多