我已经仔细阅读了Prometheus文档,但是对我来说仍然不清楚,所以我在这里是对我的理解的确认。
(请注意,为了尽可能简单的示例,我在废品间隔时间范围中使用了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
Run Code Online (Sandbox Code Playgroud)
我们要对该数据集运行一些查询。
1.rate()
官方文档指出:
“ rate(v范围向量):计算范围向量中时间序列的每秒平均增长率。”
用外行术语来说,这意味着我们将获得每秒的增量,而给定秒的值将是给定范围内的平均增量?
这是我的意思:
rate(counter [1s]):将与ICH匹配,因为平均值将仅根据一个值计算。
rate(counter [2s]):将从2秒的增量中获取平均值,并将其分配到秒数中。
因此,在前2秒中,我们获得了总计3的增量,这意味着平均值为1.5 / sec。最后结果:
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 …Run Code Online (Sandbox Code Playgroud) 根据 Prometheus 文档,为了使用直方图指标获得第 95 个百分点,我可以使用以下查询:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
Run Code Online (Sandbox Code Playgroud)
资料来源:https : //prometheus.io/docs/practices/histograms/#quantiles
由于直方图的每个桶都是一个计数器,我们可以计算每个桶的比率为:
范围向量中时间序列的每秒平均增长率。
请参阅:https : //prometheus.io/docs/prometheus/latest/querying/functions/#rate
因此,例如,如果桶值[t-5m] = 100 和桶值[t] = 200,则桶率[t] = (200-100)/(10*60) = 0.167
最后,最令人困惑的部分是 histogram_quantile 函数如何在知道所有桶率的情况下找到给定指标的第 95 个百分位数?
是否有任何代码或算法可以让我更好地理解它?