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

如何在Grafana时间序列中用stddev_over_time实现误差率异常检测

用PromQL实现误差率时间序列的±10%标准差异常检测上下限

你可以通过组合PromQL的时间聚合函数与原始误差率计算,用单个查询生成三条曲线:原始误差率、均值+10%标准差上限、均值-10%标准差下限。具体查询如下(以1天为统计窗口为例,可根据你的数据周期调整窗口时长):

# 原始误差率序列
({__name__="errored_count:ccmr"} / {__name__="completed_count:ccmr"})
# 上限带:均值 + 10%标准差
or (avg_over_time(({__name__="errored_count:ccmr"} / {__name__="completed_count:ccmr"})[1d:]) + 0.1 * stddev_over_time(({__name__="errored_count:ccmr"} / {__name__="completed_count:ccmr"})[1d:]))
# 下限带:均值 - 10%标准差
or (avg_over_time(({__name__="errored_count:ccmr"} / {__name__="completed_count:ccmr"})[1d:]) - 0.1 * stddev_over_time(({__name__="errored_count:ccmr"} / {__name__="completed_count:ccmr"})[1d:]))

关键部分说明:

  • avg_over_time([1d:]):计算误差率在最近1天内的整体均值,生成一条水平线。
  • stddev_over_time([1d:]):计算误差率在同一窗口内的标准差。
  • 乘以0.1后与均值加减,得到你需要的±10%标准差上下限带。

优化建议:

如果两个指标带有相同的标签(如instance、job),可以简化查询写法,直接用指标名代替{__name__=...}:

(errored_count:ccmr / completed_count:ccmr)
or (avg_over_time((errored_count:ccmr / completed_count:ccmr)[1d:]) + 0.1 * stddev_over_time((errored_count:ccmr / completed_count:ccmr)[1d:]))
or (avg_over_time((errored_count:ccmr / completed_count:ccmr)[1d:]) - 0.1 * stddev_over_time((errored_count:ccmr / completed_count:ccmr)[1d:]))

你可以根据数据的波动周期调整时间窗口,比如把[1d:]改成[1h:](1小时)或[7d:](7天),确保均值和标准差的统计范围符合你的异常检测需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:22:46