我知道CPU利用率是由非空闲时间占CPU总时间的百分比来决定的。在Prometheus中,rate或irate函数计算向量数组的变化率。
人们通常通过以下PromQL表达式计算CPU的利用率:
(100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100))我不明白计算非空闲时间的每秒变化如何等同于计算CPU使用率。有人能从数学上解释为什么这是有意义的吗?
发布于 2019-04-11 09:02:41
这里有几件事要解开。
首先,rate对irate。无论是链接的问题,还是博客文章都没有提到这一点(但艾坦的回答确实触及了这个问题)。不同的是,rate估计请求范围内的平均速率(在您的情况下为1分钟),而irate仅根据最后2个样本计算速率。撇开“估计”部分不说(如果您好奇的话,请参阅这个答案 ),2之间的实际区别是,rate将平滑结果,而irate将返回CPU使用率的抽样,这更可能显示CPU使用的极端,但也更容易出现混叠。
例如,如果您查看Prometheus的CPU使用情况,您会注意到它处于某种恒定的基线,每次评估大型规则组时都会出现峰值。给定至少与Prometheus的评估间隔一样长的时间范围,如果您使用rate,那么随着时间的推移,您将得到一个或多或少恒定的CPU使用量(即一条平行线)。使用irate (假设5s的时间间隔),您将得到以下两种方法中的一种:
1m,评估间隔为13s)不对齐,那么您将得到一个随机抽样的CPU使用情况,并希望在图上看到的值接近最高和最低的CPU使用率;1m分辨率和15s评估间隔)保持一致,那么您可以在任何地方看到基线CPU使用情况(因为您碰巧查看了设置为1分钟间隔的5s间隔,当没有规则评估发生时),或者到处查看5s使用率峰值(因为您碰巧查看了每一个规则评估的5s间隔间隔1分钟)。关于第二点,对于node_cpu_seconds_total度量所代表的是什么,它显然是一个计数器。这意味着它是一个持续递增的数字,本质上衡量的是自导出程序启动以来CPU空闲的时间。绝对值并不是很有用(因为它取决于导出程序何时开始,每次重新启动时将降到0)。有趣的是,它在一段时间内增加了多少:在给定的时间内,您可以计算每秒的增长率(rate是平均的;irate是即时的),或者是绝对的增长(用increase)。因此,rate(node_cpu_seconds_total{mode="idle"}[1m])和irate(node_cpu_seconds_total{mode="idle"}[1m])都会给出CPU空闲程度的比率( 0.0和1.0) (在过去的一分钟内,以及在最后两个样本之间)。
发布于 2019-04-07 06:59:57
看起来这个问题已经在这里得到了回答:秒到CPU使用率%?查看了答案中提供的链接:https://www.robustperception.io/understanding-machine-cpu-usage,您可以看到解释。就我个人而言,我认为在这种情况下的愤怒是更有意义的,因为它将显示最后一个活动点的平均值(相对于平均整个抽样时隙的比率)。
https://stackoverflow.com/questions/55556051
复制相似问题