如何用PromQL计算Grafana热力图中非连续分布的合并p95分位数
合并非连续直方图分布计算p95的方法
核心思路是分别聚合目标时间段的直方图桶数据,再将桶数据合并后计算分位数,具体操作步骤如下:
- 单独聚合每个目标时间段的直方图
使用sum_over_time()函数分别对两个非连续时间段的直方图桶求和,得到每个时间段的完整直方图分布:
# 第一个时间段的直方图聚合(替换为你的目标时间范围,示例为1小时前到30分钟前) sum_over_time(your_histogram_metric{labels}[1h offset 30m]) # 第二个时间段的直方图聚合(示例为30分钟前到当前时间) sum_over_time(your_histogram_metric{labels}[30m])
通过offset调整时间范围,确保两个时间段不重叠且覆盖你圈出的目标分布。
- 合并两个直方图的桶数据
用+运算符将两个聚合后的直方图相加,PromQL会自动按桶标签(le)匹配并累加对应桶的样本数:
sum_over_time(your_histogram_metric{labels}[1h offset 30m]) + sum_over_time(your_histogram_metric{labels}[30m])
- 计算合并后的p95分位数
将合并后的直方图传入histogram_quantile()函数,即可得到两个非连续分布的合并p95:
histogram_quantile(0.95, sum_over_time(your_histogram_metric{labels}[1h offset 30m]) + sum_over_time(your_histogram_metric{labels}[30m]))
通用扩展说明
- 若需合并更多非连续时间段,只需继续添加
sum_over_time()的结果并用+连接即可 - 确保所有
sum_over_time()的时间范围无重叠,且完整覆盖所有目标分布 - 若直方图带有多组标签,需保证所有聚合的标签匹配一致,避免出现桶不匹配导致合并失败的情况
内容的提问来源于stack exchange,提问作者user2233706
相关产品推荐
相关产品推荐

