【发布时间】:2019-11-16 22:47:24
【问题描述】:
我在具有 3 个节点的 k8s 集群上有一个 Fluentd 守护程序集。我想获得一个代表百分比的值,它可以让我了解 fluentd pod 目前在每个节点上占用了多少 CPU(以 % 为单位)。
在 Prometheus 中的实现方式是什么?
谢谢。
【问题讨论】:
标签: kubernetes prometheus promql
我在具有 3 个节点的 k8s 集群上有一个 Fluentd 守护程序集。我想获得一个代表百分比的值,它可以让我了解 fluentd pod 目前在每个节点上占用了多少 CPU(以 % 为单位)。
在 Prometheus 中的实现方式是什么?
谢谢。
【问题讨论】:
标签: kubernetes prometheus promql
您可能希望在 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。
【讨论】:
以下查询应返回具有容器名称(从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。
【讨论】: