Prometheus查询:获取字符分布区间占比并转换为柱状图
Prometheus Histogram字符分布占比计算与柱状图实现
计算各字符区间的占比百分比
Prometheus Histogram的bucket是累积计数,要拿到单一区间的实际数值,需用当前bucket的增量减去前一个bucket的增量,再除以总请求数的增量得到占比。
核心查询语句
( sum(increase(number_of_char_distribution_bucket{_namespace_="addautcmp",vendor_name="ADA"}[24h])) by (le) - ignoring(le) group_right (sum(increase(number_of_char_distribution_bucket{_namespace_="addautcmp",vendor_name="ADA"}[24h])) by (le) offset 1 or vector(0)) ) / sum(increase(number_of_char_distribution_count{_namespace_="addautcmp",vendor_name="ADA"}[24h])) * 100
逻辑拆解
- 获取区间实际数量:
increase(...)获取24小时内每个bucket的累积增量,通过offset 1取前一个bucket的增量做减法,得到当前区间的独立数量。第一个bucket(le="1.0")无前置数据,用or vector(0)避免空值报错。 - 计算占比:用区间实际数量除以总count的增量,乘以100转换为百分比格式。
示例数据验证
代入你提供的GB数据计算:
- 总count为9,1字符区间数量是1,占比≈11.11%
- 2字符区间数量为3-1=2,占比≈22.22%
- 3字符区间数量为5-3=2,占比≈22.22%
- 4、5字符区间数量为0,占比0%
切换为柱状图展示
以Grafana为例操作:
- 进入图表配置面板,将显示类型从
Gauge切换为Bar chart - 确保查询返回多时间序列(每个le标签对应一个序列),这样每个字符区间会对应一根独立柱子
- 图例设置为显示
le标签,直观区分各区间范围
内容的提问来源于stack exchange,提问作者Zeus
相关产品推荐
相关产品推荐

