根据Prometheus文档,为了使用直方图指标获得第95个百分位数,我可以使用以下查询:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
来源: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
最后,最令人困惑的部分是,对于已知度量标准的所有存储桶速率,直方图量化函数如何找到给定度量的第95个百分位数?
有什么代码或算法可以让我更好地理解吗?
答案 0 :(得分:0)
我相信this是普罗米修斯的代码
一般的想法是,您可以使用存储桶中的数据来推断/近似分位数
Elasticsearch的汇总功能也does something similar(但有所不同/简单得多)
答案 1 :(得分:0)
您必须使用reset
,因为可以重置计数器,rate
会自动考虑重置并为您提供正确的计数。请记住,在使用计数器之前始终使用速率。
答案 2 :(得分:0)
你可以参考我的回复here
实际上rate()函数只是用来指定时间窗口的,分母对百分位数的计算没有影响。