为什么在Prometheus中使用irate或rate计算CPU利用率?

问题描述 投票:1回答:2

我知道CPU利用率是由非空闲时间占CPU总时间的百分比给出的。在普罗米修斯,rateirate函数计算向量数组中的变化率。

人们通常通过以下PrmoQL表达式计算CPU利用率:

(100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100))

我不明白如何计算每秒非空闲时间的变化相当于计算CPU使用率。有人可以用数学方式解释为什么这有意义吗?

prometheus
2个回答
1
投票

这里有几件要解开的东西。

首先,rate vs irate。链接的问题和博客文章都没有解决这个问题(但Eitan's answer确实触及了它)。区别在于rate估计所要求范围内的平均速率(在您的情况下为1分钟),而irate仅根据最后2个样本计算速率。暂且不谈“估计”部分(如果你很好奇,请参阅this answer)2之间的实际差异是rate将平滑结果,而irate将返回CPU使用的样本,这更可能显示CPU的极端情况使用但也更容易发生aliasing

例如。如果你看一下普罗米修斯的CPU使用情况,你会发现它处于一个有点恒定的基线,每次评估一个大型规则组时都会出现峰值。给定时间范围至少与普罗米修斯的评估间隔一样长,如果你使用rate,你会得到一个或多或少恒定的CPU使用率(即一条平线)。使用irate(假设5s的刮擦间隔)你会得到以下两件事之一:

  1. 如果您的分辨率(即步骤)与Prometheus的评估间隔不一致(例如分辨率为1m且评估间隔为13s),您将获得CPU使用率的随机抽样,并希望看到接近最高和最低值的值图表上的CPU使用率随时间变化;
  2. 如果您的分辨率与普罗米修斯的评估间隔(例如1m分辨率和15s评估间隔)一致,那么您可以在任何地方看到基线CPU使用情况(因为您碰巧看到相隔1分钟的5s间隔,当没有规则评估发生时)或者到处都是峰值CPU使用率(因为你碰巧看到相隔1分钟的5s间隔,每个间隔覆盖规则评估)。

关于第二点,对于node_cpu_seconds_total度量表示的明显混淆,它是一个counter。这意味着它是一个连续递增的数字,基本上衡量自出口商启动以来CPU空闲的时间。绝对值并非完全有用(因为它取决于导出器何时启动,并且每次重新启动时将降至0)。有趣的是它在一段时间内增加了多少:从那个你可以计算出一定时间内每秒的增长率(平均值,rate;瞬间,irate)或绝对增加(用increase)。所以rate(node_cpu_seconds_total{mode="idle"}[1m])irate(node_cpu_seconds_total{mode="idle"}[1m])都会给你一个比率(在0.01.0之间),CPU的空闲程度(过去一分钟,最后两个样本之间)。


0
投票

看起来这里已经回答:Prometheus - Convert cpu_user_seconds to CPU Usage %?查看答案中提供的链接:https://www.robustperception.io/understanding-machine-cpu-usage你可以看到解释。就个人而言,我认为在这种情况下愤怒更有意义,因为它会显示最后活动点的平均值(与整个采样时间段的平均值相比)。

© www.soinside.com 2019 - 2024. All rights reserved.