【问题标题】:How to get CPU and memory usage of pod in percentage using promethus如何使用 prometheus 获取 pod 的 CPU 和内存使用百分比
【发布时间】:2020-08-10 20:02:48
【问题描述】:

我想使用 promql/Prometheus 以以下格式显示 pod 详细信息。

此外,我想使用 promql 以以下格式显示应用程序/组件的 CPU 和内存利用率

promql 查询:sum(container_memory_working_set_bytes) by (pod)

我可以使用上面的查询得到 pod 消耗的内存。

如何计算使用的内存百分比?我无法使用 promql 获取有状态 pod 的内存限制 您能否提出任何查询/API 详细信息?

【问题讨论】:

  • 你尝试过哪些查询?
  • sum(kube_pod_container_resource_requests_cpu_cores) by (pod) sum(container_memory_working_set_bytes) by (pod)
  • 我可以使用上面的查询获取 pod 的消耗内存。如何计算使用的内存百分比?我无法使用 promql 获取 pod 的内存限制

标签: kubernetes monitoring prometheus grafana promql


【解决方案1】:

CPU 百分比

max by (pod) (sum(rate(container_cpu_usage_seconds_total{namespace="$namespace",container_name!="POD",container_name!="",container!="monitoring-daemon"}[5m])) / sum(kube_pod_container_resource_limits{namespace="$namespace", resource="cpu"})) * 100

内存百分比

avg((avg (container_memory_working_set_bytes{pod="<Podname>"}) by (container_name , pod ))/ on (container_name , pod)(avg (container_spec_memory_limit_bytes>0 ) by (container_name, pod))*100)

【讨论】:

    【解决方案2】:

    我用这个来记忆:

    round(max by (pod)(max_over_time(container_memory_usage_bytes{namespace="$namespace",pod=~".*" }[5m]))/ on (pod) (max by (pod) (kube_pod_container_resource_limits)) * 100,0.01)
    

    这适用于 CPU:

    max by (pod) (sum(rate(container_cpu_usage_seconds_total{namespace="$namespace",container_name!="POD",container_name!="",container!="monitoring-daemon"}[5m])) / sum(kube_pod_container_resource_limits{namespace="$namespace", resource="cpu"})) * 100
    

    【讨论】:

      【解决方案3】:

      每个 pod 的 CPU 使用率百分比(查询不会返回没有 CPU 限制的 pod 的 CPU 使用率)

      100 * max(
        rate(container_cpu_usage_seconds_total[5m])
          / on (container, pod)
        kube_pod_container_resource_limits{resource="cpu"}
      ) by (pod)
      

      如果kube-state-metrics pod 的抓取配置配置不正确,则可能会错误地抓取 kube_pod_container_resource_limits 指标。在这种情况下,由于 honor_labels 的行为,该指标的原始 pod 标签被移动到 exported_pod 标签 - 有关详细信息,请参阅 these docs。在这种情况下,必须使用label_replace 函数将exported_pod 标签移动到pod 标签:

      100 * max(
        rate(container_cpu_usage_seconds_total[5m])
          / on (container, pod)
        label_replace(kube_pod_container_resource_limits{resource="cpu"}, "pod", "$1", "exported_pod", "(.+)")
      ) by (pod)
      

      每个 pod 的内存使用百分比(查询不会返回没有内存限制的 pod 的内存使用情况)

      100 * max(
        container_memory_working_set_bytes
          / on (container, pod)
        kube_pod_container_resource_limits{resource="memory"}
      ) by (pod)
      

      如果kube_pod_container_resource_limits 指标如上所述被错误抓取,则必须使用label_replace 函数将exported_pod 标签值移动到pod

      100 * max(
        container_memory_working_set_bytes
          / on (container, pod)
        label_replace(kube_pod_container_resource_limits{resource="memory"}, "pod", "$1", "exported_pod", "(.+)")
      ) by (pod)
      

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 2022-08-09
        • 1970-01-01
        • 2021-04-05
        • 2019-08-04
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 2015-07-12
        相关资源
        最近更新 更多