问题描述
我正在使用 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
不幸的是,它返回一个空的查询结果。另外,我没有对容器设置任何限制。我在这里做错了什么?
解决方法
理解 PromQL 正在做什么可能很棘手,而理解和调试查询的一种好方法是使用 PromLens。如果你在那里插入你的查询并切换到“解释”选项卡,你会看到发生了什么:有一个标签不匹配,你可以使用 ignoring() 关键字来解决,所以类似下面的内容应该可以工作:
sum by(instance,name) (
rate(container_cpu_usage_seconds_total[3m])
)
/ ignoring(job)
machine_cpu_cores