如何在Prometheus中查询失败事件百分比而非计数(Grafana场景)
计算失败事件百分比的PromQL查询方案
要计算指定条件下失败事件的百分比,核心逻辑是失败事件数 ÷ 总事件数 × 100,同时要保证维度对齐(按deviceserial分组),这样Prometheus才能正确执行除法运算。
基础查询公式
直接基于你的现有查询改造,得到百分比计算的PromQL:
( count(test{deviceserial=~"$device",branch=~"$branch", class=~"$class",build_id=~"$build_id",success="false"}) by (deviceserial) / count(test{deviceserial=~"$device",branch=~"$branch", class=~"$class",build_id=~"$build_id"}) by (deviceserial) ) * 100
公式拆解
- 分子:和你原来的查询一致,统计每个
deviceserial下的失败事件总数 - 分母:去掉
success="false"的过滤条件,统计每个deviceserial下的所有事件总数(成功+失败) - 最后乘以100,将小数转换为百分比数值
优化:避免除以0的NaN问题
如果某个deviceserial下没有任何事件(分母为0),查询会返回NaN,影响可视化效果。可以用clamp_min()函数将分母最小值限制为1,确保结果始终为可展示的数值:
( count(test{deviceserial=~"$device",branch=~"$branch", class=~"$class",build_id=~"$build_id",success="false"}) by (deviceserial) / clamp_min(count(test{deviceserial=~"$device",branch=~"$branch", class=~"$class",build_id=~"$build_id"}) by (deviceserial), 1) ) * 100
这样当总事件数为0时,结果会显示为0%,而非异常值。
Grafana展示设置
在Grafana面板中应用这个查询后,记得调整单位让展示更直观:
- 编辑面板,找到Unit选项
- 选择
Percent (0-100),这样数值会自动带上%符号,符合百分比的展示习惯
内容的提问来源于stack exchange,提问作者tse




