如何使用promethus获取pod的CPU和内存使用百分比

Pet*_*ter 9 monitoring grafana kubernetes prometheus promql

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

图片1

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

图片2

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

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

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

val*_*ala 17

每个 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)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

100 * max(
  container_memory_working_set_bytes
    / on (container, pod)
  kube_pod_container_resource_limits{resource="memory"}
) by (pod)
Run Code Online (Sandbox Code Playgroud)

如果kube_pod_container_resource_limits如上所述指标被错误地抓取,则必须使用label_replaceexported_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)
Run Code Online (Sandbox Code Playgroud)