cAdvisor 容器多核 CPU 使用率

Posted

技术标签:

【中文标题】cAdvisor 容器多核 CPU 使用率【英文标题】:cAdvisor container CPU usage with multiple cores 【发布时间】:2021-09-13 09:46:00 【问题描述】:

我正在使用 prometheus 中的以下表达式使用 cAdvisor 监控容器 CPU 使用情况:

(sum(rate(container_cpu_usage_seconds_total[3m])) BY (instance, name) * 100) > 80

此警报针对我的一个容器不断触发,因为它实际上使用了超过 80% 的 CPU,但仅在单个内核上。我的主机有多个内核,我想将此百分比除以内核数。我可以看到 cAdvisor 正在导出一个名为 machine_cpu_cores 的指标,我认为这会对我有所帮助,但不幸的是,我无法让它发挥作用。我试过了:

(sum(rate(container_cpu_usage_seconds_total[3m])) BY (instance, name) / sum(machine_cpu_cores) * 100) > 0

不幸的是,它返回一个空的查询结果。另外,我没有对容器设置任何限制。我在这里做错了什么?

【问题讨论】:

【参考方案1】:

理解 PromQL 在做什么可能很棘手,而理解和调试查询的一种好方法是使用 PromLens。如果您在此处插入查询并切换到“解释”选项卡,您会看到发生了什么:您可以使用 ignoring() 关键字解决标签不匹配问题,因此应该可以使用以下内容:

sum by(instance,name) (
 rate(container_cpu_usage_seconds_total[3m])
)  
/ ignoring(job)
machine_cpu_cores

【讨论】:

刚刚了解了PromLens,我感到有些惭愧。多么棒的工具!但是,我尝试修改我的查询,但我仍然无法理解标签以及为什么不匹配。我的查询目前看起来像这样:sum by(instance,name) (rate(container_cpu_usage_seconds_total[3m])) * 100 / sum by (instance) (machine_cpu_cores) 在“解释”选项卡中,我可以看到左侧标签是实例和名称,右侧标签缺失且不匹配。只显示一个结果,似乎是某种聚合,但我不知道 你试过我上面的查询了吗?您是否查看过 PromLens 中的“解释”选项卡? :) 是的,我做了,对不起,我只是编辑评论,因为我弄得一团糟。我试过你的查询,但它没有返回我想要的。在演示示例中,它返回 9 行,只有第一行返回结果,是的,它将左值除以右值,但这是不正确的 - 我需要为节点上运行的每个容器提供此值,看起来这是一个汇总结果什么的,我不确定。 罗杰,是的,你需要适应你的数据,但关键是使用ignoring,你基本上可以告诉 PromQL 忽略哪些标签,以便它可以以有意义的方式匹配左右大大地。不确定总和,但我得到的最好的线索是github.com/kubernetes/kube-state-metrics/issues/1101 是的,但在我的情况下,左侧的标签在右侧缺失,因此我无法进行匹配。 machine_cpu_cores 只是具有单个值的单个指标,而 container_cpu_usage_seconds_total 指标计数基于运行的容器数量。它还有一个额外的“名称”标签,即容器名称。因此,不匹配:(

以上是关于cAdvisor 容器多核 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章

来自 cAdvisor 容器的 AlertManager 通知

在 Grafana 中为 Docker 容器构建 CPU 使用率图

Docker监控:google/cadvisor

prometheus cAdvisor 监控docker CPU利用率 教程

Kubernetes监控体系之cAdvisor介绍

Docker进阶 - 13. Docker 容器监控之 CAdvisor+InfluxDB+Granfana (CIG) 简介