我需要获得 PromQL 中随时间记录的最高和平均第 95 个百分位数。
此查询仅获取当前第 95 个百分位。
histogram_quantile(
0.95,
sum(
rate(
istio_request_duration_milliseconds_bucket{destination_workload=~"service", reporter="source"}[1m]
)
) by (le, destination_workload)
)
结果:(当前值)
Time destination_workload Value
... service 488
因为 histogram_quantile 输出即时向量,所以我无法对其执行 max_over_time() 。
我尝试过这个,但由于某种原因我得到的值小于 1,并且每个桶都有一个值。
quantile_over_time(
0.95,
sum(
rate(
istio_request_duration_milliseconds_bucket{destination_workload=~"service", reporter="source"}[1m]
)
) by (le, destination_workload)[1m:]
)
结果: 我不知道为什么这些值如此之小,或者为什么它不能处理桶。
Time destination_workload le Value
... service 0.5 0
... service 1 0
... service 5 0
... service 10 0
...
... service 600000 0.167
我们不使用维多利亚指标。
我怎样才能获得一段时间内记录的最大和平均 95% 的百分位数。
通常对百分位数进行平均是没有意义的。这是关于此的一篇很棒的文章。
要获得最大值你可以使用:
histogram_quantile(
1,
sum(
rate(
istio_request_duration_milliseconds_bucket{destination_workload=~"service", reporter="source"}[1m]
)
) by (le, destination_workload)
)
要获得平均值您可以使用(由直方图提供):
rate(istio_request_duration_milliseconds_sum{destination_workload=~"service", reporter="source"}[1m])
/
rate(istio_request_duration_milliseconds_count{destination_workload=~"service", reporter="source"}[1m])
如果您确实知道自己在做什么,并且确实需要计算计算百分位数的最大值和平均值,则可以使用子查询来获取计算百分位数的范围向量。
最后 5 分钟平均 95p,步长为 1 分钟:
avg_over_time(histogram_quantile(0.95, sum(rate(demo_api_request_duration_seconds_bucket[5m]))by(le))[5m:1m])
最后 5 分钟最多 95p,步长为 1 分钟:
max_over_time(histogram_quantile(0.95, sum(rate(demo_api_request_duration_seconds_bucket[5m]))by(le))[5m:1m])