Prometheus 我了解普罗米修斯吗;s速率vs增加功能是否正确?

Prometheus 我了解普罗米修斯吗;s速率vs增加功能是否正确?,prometheus,Prometheus,我已经仔细阅读了这篇文章,但我还是有点不清楚,所以我来这里是想确认一下我的理解。 (请注意,为了尽可能简单的示例,我使用了1秒作为报废间隔、时间范围-即使在实践中不可能) 尽管我们在每秒钟内丢弃一个计数器,现在计数器的值是30。为此,我们有以下时间序列: second counter_value increase calculated by hand(call it ICH from now) 1 1 1 2

我已经仔细阅读了这篇文章,但我还是有点不清楚,所以我来这里是想确认一下我的理解。

(请注意,为了尽可能简单的示例,我使用了1秒作为报废间隔、时间范围-即使在实践中不可能)

尽管我们在每秒钟内丢弃一个计数器,现在计数器的值是30。为此,我们有以下时间序列:

second   counter_value    increase calculated by hand(call it ICH from now)
1             1                    1
2             3                    2
3             6                    3
4             7                    1
5            10                    3
6            14                    4
7            17                    3
8            21                    4
9            25                    4
10           30                    5
我们想在此数据集上运行一些查询

1.rate()
官方文件规定:
“速率(v范围向量):计算范围向量中时间序列每秒的平均增长速率。”

用外行术语来说,这意味着我们将得到每秒的增量,给定秒的值将是给定范围内的平均增量

我的意思是:
速率(计数器[1s]):将与ICH匹配,因为平均值将仅从一个值计算。
速率(计数器[2s]):将在2秒内获得增量的平均值,并将其分配到秒数中
所以在前2秒内,我们得到了总3的增量,这意味着平均值是1.5/秒。 最终结果:

second result
1       1,5
2       1,5
3        2
4        2
5       3,5
6       3,5
7       3,5
8       3,5
9       4,5
10      4,5
second result
1        2
2        2
3        2
4        2
5        2
6        4
7        4
8        4
9        4
10       4
速率(计数器[5s]):将在5秒内从增量中获得平均值,并将其分配到秒数中
与[2s]相同,但我们根据5秒的总增量计算平均值。 最终结果:

second result
1       1,5
2       1,5
3        2
4        2
5       3,5
6       3,5
7       3,5
8       3,5
9       4,5
10      4,5
second result
1        2
2        2
3        2
4        2
5        2
6        4
7        4
8        4
9        4
10       4
因此,时间范围越大,我们得到的结果就越平滑。这些增加的总和将与实际计数器相匹配

2.增加() 官方文件规定:
“增量(v范围向量):计算范围向量中时间序列的增量。”

对我来说,这意味着它不会在秒之间分配平均值,而是显示给定范围内的单个增量(通过外推)。
增加(计数器[1s]):在我的任期内,这将与ICH和速率匹配1s,因为总范围和速率的基本粒度匹配。
增加(计数器[2s]):前2秒总共增加了3秒,所以 2.秒将得到3的值,依此类推

  second result   
    1        3*  
    2        3
    3        4*
    4        4
    5        7*
    6        7
    7        7*
    8        7
    9        9*
    10       9
*在我看来,这些值是指每秒覆盖的外推值。

我理解得很好,还是我离这很远?

在理想世界中(你的样本的时间戳正好在第二秒,你的规则评估正好在第二秒发生)
rate(计数器[1s])
将准确返回你的ICH值,
rate(计数器[5s])
将返回ICH和前4个的平均值。除了第二个1的ICH是0,不是1,因为没有人知道你的计数器是0:可能它在那里增加了,可能昨天增加了,从那时起一直保持在1。(这就是为什么第一次出现值为1的计数器时不会看到增加的原因,因为您的代码刚刚创建并增加了它。)

增加(计数器[5s])
正是
速率(计数器[5s])*5
(而
增加(计数器[2s])
正是
速率(计数器[2s])*2

现在,在现实世界中发生的事情是,您的样本并不是完全每秒都在第二次采集,规则评估也不是完全在第二次采集。因此,如果你有一堆相隔(或多或少)1秒的样本,并且你使用普罗米修斯的
速率(计数器[1s])
,你将不会得到任何输出。这是因为普罗米修斯所做的是,它获取1秒范围内的所有样本
[now()-1s,now()]
(在绝大多数情况下都是单个样本),试图计算速率,但失败了

如果您查询
速率(计数器[5s])
oth,普罗米修斯将选择
[now()-5s,now]
范围内的所有样本(5个样本,平均覆盖约4秒,例如
[t1,v1],[t2,v2],[t3,v3],[t4,v4],[t5,v5]
),并且(假设您的计数器没有在间隔内重置)将返回
(v5-v1)/(t5-t1)
。也就是说,它实际计算的是~4s而不是5s的增长率

增加(计数器[5s])
将返回
(v5-v1)/(t5-t1)*5
,因此超过4秒的增加速率外推到5秒


由于样本的间隔不精确,
rate
increase
通常都会返回整数计数器的浮点值(这对
rate
来说很明显,但对
increase
来说就不那么重要了)。

答案很好,有详细的示例。非常感谢,我在过去的几个小时里一直在寻找这个。我认为速率也是平均值,即速率是((v5-v1)/(t5-t1))/5。
(v5-v1)/(t5-t1)
已经是
t1
t5
之间每秒的平均增长。例如,如果
t1
为1,
t5
为5;
t1
处的值为1,
t5
处的值为10(如上所述),然后
(v5-v1)/(t5-t1)
处的值为
(10-1)/(5-1)
,即2.25.FYI,如果您想从
increase()
函数中获得准确的整数结果,请查看。