You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动