PromQL的rate()函数的理解

Dee*_*ari 12 grafana prometheus promql

我浏览了 PromQL 文档,发现速率有点令人困惑。然后我尝试了 Prometheus 查询仪表板中的一个查询,发现下面给出的结果

Time Count increase  rate(count[1m])
15s  4381  0          0
30s  4381  0          0
45s  4381  0          0
1m   4381  0          0

15s  4381  0          0
30s  4402  21         0.700023
45s  4402  0          0.700023
2m   4423  21         0.7

15s  4423  0          0.7
30s  4440  17         0.56666666
45s  4440  0          0.56666666
3m   4456  16         0.53333333
Run Code Online (Sandbox Code Playgroud)

我从仪表板获得的最后一列值,但我无法理解它是如何计算的。

分辨率 - 15 秒

刮擦间隔:30s

Mar*_*ira 13

“increase”函数计算某个计数器增长了多少,“rate”函数计算该度量每秒增长的量。

分析您的数据,我认为您使用 [30s] 作为“增加”,使用 [1m] 作为“速率”(正确的使用值对结果很重要)。

基本上,例如,在 2m 时间内我们有:

increase[30s] = count at 2m - count at 1.5m = 4423 - 4402 = 21
rate[1m]      = (count at 2m - count at 1m) / 60 = (4423 - 4381) / 60 = 0.7
Run Code Online (Sandbox Code Playgroud)

Prometheus 文档:增加速率


val*_*ala 9

Prometheus按以下方式计算rate(count[d])时间戳:t

  1. 它获取每个时间序列的原始样本,并count在时间范围上命名(t-d ... t]。请注意,t-d时间戳不包含在范围内,而t时间戳包含在范围内。例如,在rate(count[1m])按时间戳计算时t=2m,选择以下原始样本:4423 @ 2m, 4402 @ 1m45s, 4402 @ 1m30s, 4381 @ 1m15s。请注意,该4381 @ 1m示例不包含在计算中。
  2. 然后,它计算每个名称为 的时间序列在选定时间范围内的最后一个样本和第一个样本之间的差异count。Prometheus 可以检测并删除所选时间范围内的时间序列重置为零,但为了清楚起见,我们暂时跳过此操作。在上面的情况下,它计算4423 @ 2m - 4381 @ 1m15s = 42.
  3. 然后,它将步骤 2 中的结果除以d每个名称为时间序列的持续时间(以秒为单位)count。在上面的情况下,它计算42 / 1m = 42 / 60s = 0.7.

rate(count[1m]) @ 2m- -的实际结果0.700023与计算结果不同 - 0.7- 由于外推法,如果第一个和/或最后一个原始样本的时间戳距离所选时间范围界限太远,则可以将其应用于步骤 2 中计算的结果。有关推断的更多详细信息,请参见本期

[1m ... 1m15s]另请注意,在计算 和 时,rate()Prometheus会错过时间范围内可能出现的计数器增加increase()请参阅此处此处有关此问题的更多详细信息。