节点导出器显示错误的空闲CPU时间

我已使用Prometheus,AWS EC2 Auto发现和节点导出程序设置了监视系统。使用以下公式获取CPU利用率:

100 - (avg by (instance) (irate(node_cpu_seconds_total{instance="instancexyz",mode="idle"}[5m])) * 100)

但是,在一个特定的ASG中,我得到的CPU百分比为大负值。我打开了instance:9100 / metrics链接,发现空闲值是大的指数值。这是我得到的一个值:

node_cpu_seconds_total{cpu="0",mode="idle"} 4.25766215e+06

除少数实例外,这些指标对我所有实例均正常运行。知道发生了什么事吗?

feixuezhangluo 回答:节点导出器显示错误的空闲CPU时间

您看到的那些“大指数值”是累积的。即自启动虚拟机以来,CPU(或所有CPU内核?)已闲置1000多个小时(4.25e6 / 3600),因此它们看起来非常合理。

获得负值的原因是由于采样。从理论上讲,所有样本的间隔均为 scrape_interval 秒,精确到毫秒,并且每次刮擦的网络延迟和导出器处理时间都完全相同。实际上,抓取可能会延迟甚至被跳过,网络延迟会有所不同,并且目标VM可能会不时地钉住CPU(或由于任何原因而挂起)。

意思是node_cpu_seconds_total的一个样本完全有可能在(名义上)时间V处有值T,在(名义上)时间V + 1处有值T + 10s,从而导致闲置率为110%。或您想提出的任何价值。 irate加剧了这个问题,因为它总是查看两个连续的样本,从而增加了相对测量误差(相对于样本之间时间的误差)。

对此您无能为力,只能接受它不是一个完美的测量方法,并在其上拍一个clamp_min(<your_expression>,0)。使用rate代替irate也可以减少错误,并且通常是一个好主意,除非您要以全分辨率查看数据。

本文链接:https://www.f2er.com/3138440.html

大家都在问