You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PromQL将Prometheus累积直方图转换为普通直方图?

将Prometheus累积直方图转换为普通直方图的PromQL方法

已知Prometheus中的http_access_bucket是累积直方图指标,示例原始数据如下:

http_access_bucket{node="aaa",le="5"} 20
http_access_bucket{node="aaa",le="10"} 30
http_access_bucket{node="aaa",le="20"} 35
http_access_bucket{node="aaa",le="50"} 38
http_access_bucket{node="aaa",le="100"} 40
http_access_bucket{node="aaa",le="+Inf"} 40

需要将其转换为普通直方图(每个le区间内的独立计数),预期输出:

temp_bucket{node="aaa",le="5"} 20
temp_bucket{node="aaa",le="10"} 10
temp_bucket{node="aaa",le="20"} 5
temp_bucket{node="aaa",le="50"} 3
temp_bucket{node="aaa",le="100"} 2
temp_bucket{node="aaa",le="+Inf"} 0

实现PromQL语句

可以用以下简洁的PromQL完成转换:

http_access_bucket - ignoring(le) group_left sort(http_access_bucket)[1:]

语句解释

  1. sort(http_access_bucket):按le标签从小到大排序所有bucket,保证区间顺序正确。
  2. [1:]:截取排序后除第一个bucket外的所有项,作为当前区间的前序累积值。
  3. ignoring(le) group_left:忽略le标签进行匹配,确保每个bucket能准确减去前一个更小区间的累积值。
  4. 对于le="+Inf"的bucket,由于是排序后的最后一项,没有后续匹配项,计算结果自动为0,符合预期。

如果需要计算时间区间内的增量(而非瞬时值),可以结合increase()函数:

increase(http_access_bucket[5m]) - ignoring(le) group_left sort(increase(http_access_bucket[5m]))[1:]

其中5m可根据实际监控需求调整为合适的时间窗口。


内容的提问来源于stack exchange,提问作者progquester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:24:26