当前位置: 首页 > 知识库问答 >
问题:

我是否正确理解普罗米修斯的速率与增加功能?

诸葛卜霸
2023-03-14

我已经仔细阅读了普罗米修斯的文档,但对我来说仍然有点不清楚,所以我来这里是为了确认我的理解

(请注意,为了尽可能简单的示例,我使用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()
官方文件声明:
“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

速率(计数器[5s]):将从5秒内的增量中获得平均值,并将其分布在各秒之间
与[2s]相同,但我们从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

*用我的术语来说,这些值是指每秒的外推值

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

共有2个答案

朱高超
2023-03-14

**反方向解释分析问题**

让我们假设我们有

rate(some_metric_name_count [3m]) = 2

这意味着在时间点计数器之前的3分钟间隔内,每秒增加2个,在这3分钟之后,此计数器增加2*180(秒)=360。

这也意味着在这种情况下:

increase(some_metric_name_count [3m]) ~ 360

发动机罩下主要针对第一个时间点有轻微的近似值,因此可能存在2的绝对误差,这意味着:

increase(some_metric_name_count [3m]) = 360 +/- 2

它涵盖了从[358,362]开始的间隔,包括间隔的结束

蒋哲
2023-03-14

在理想情况下(样本的时间戳正好在第二秒,规则评估正好在第二秒进行)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秒。

由于样本的间隔不完全一致,的速率的增加通常会返回整数计数器的浮点值(这对于的速率来说很明显,但对于的增加来说就不那么重要了)。

 类似资料:
  • null 使用默认配置和轻微的定制。 我可以访问prometheus、grafana和alertmanager,查询度量标准并查看精美的图表。 但是prometheus-adapter在启动时不断抱怨它不能访问/发现度量: 在我的设置中,对于prometheus-adapter的正确值是什么?

  • 我有一个启用了监视和日志记录的GKE集群(1.15)。到目前为止,我们一直使用metrics-server对StackDriver进行度量监控。对于其他自定义度量标准,我们使用了自定义度量标准适配器,该适配器使用Prometheus-to-SD将度量标准刮取并导出到stackdriver。 我想开始看看prometheus是否能给我们提供其他功能,比如HPA的聚合度量。 在GCP marketpl

  • 我将我的GKE API服务器升级到1.6,并正在将节点升级到1.6,但遇到了一个障碍... 我有一个prometheus服务器(版本1.5.2),运行在一个由Kubernetes部署管理的pod中,其中两个节点运行版本1.5.4Kubelet,一个新节点运行版本1.6。 但普罗米修斯仍然得到401。 更新:就像乔丹所说的kubernetes认证问题。在这里看到新的、更集中的问题;https://s

  • 我有一个应用程序,当它收到一个特定的HTTP请求时,它会增加一个Prometheus计数器。该应用程序在Kubernetes中运行,具有多个实例,并且每天重新部署多次。使用查询生成一个图形,显示每个实例的累积请求计数,如预期的那样。 我想创建一个Grafana图表,显示过去7天收到的请求的累积频率。 我的第一个想法是使用来说明从7天窗口(如图所示)之外开始的任何指标,然后对这些值进行

  • 根据Micrometer的文档https://Micrometer.io/docs/concepts#_server_side,框架(Micrometer)应该处理将计时器度量从绝对量转换为速率 下面的代码模拟一个伪定时器: 然而,在Prometheus中,我只看到单调增加的度量和而不是将它们视为速率 也许我误解了或者忽略了文档中的某些内容?

  • 我要监控的应用程序为健康检查提供了一个apiendpoint,该endpoint使用json中的指标进行响应。例如: 我已经设置了Prometheus blackbox\u exporter,以监视此endpoint是否返回200 Ok,但理想情况下,我也希望获得这些指标。我知道instrumentation直接从应用程序导出这些数据。但是,由于应用程序已经在导出json对象中我想要的内容,我更希