如何使用普罗米修斯以百分比形式获取 Pod 的 CPU 和内存使用情况

How to get CPU and memory usage of pod in percentage using promethus

我想使用 promql/Prometheus.

以下列格式显示 pod 详细信息

此外,我想使用 promql

以下面的格式显示 CPU 和 application/component 的内存利用率

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

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

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

为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)

我用这个来记忆:

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

Per-pod CPU 使用百分比(查询不会 return CPU 使用 pods 没有 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 is improperly configured. In this case the original pod label for this metric is moved to the exported_pod label because of honor_labels behavior - see these docs for details. In this case label_replace 函数的抓取配置将 exported_pod 标签移动到 pod 标签,则 kube_pod_container_resource_limits 指标可能会被错误抓取:

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

Per-pod 内存使用百分比(查询不会 return 没有内存限制的 pods 内存使用)

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", "", "exported_pod", "(.+)")
) by (pod)