首页/数据/数据工程与 ETL 速查/波动监控与基线告警

波动监控与基线告警

基线告警用历史分布判断当前值是否异常:与近 7 天或近 4 周同星期均值比较、用分位数设区间,并叠加业务日历(大促、节假日)修正;比固定阈值更抗业务波动。

基线告警是什么

固定阈值只能应付稳定的业务,真实数据的行数与金额会随星期、节假日、促销起伏。基线告警改用历史分布判据:把当前值与近 7 天或近 4 周同星期均值、中位数比较,用分位数(如 P5 到 P95)划出正常区间,再叠加业务日历修正(大促、节假日单独建模或加白名单)。比固定阈值更抗业务波动,但需要连续越界确认机制,否则单点抖动会频繁打扰值班。

基本信息

基线来源近 7 日或近 4 周同期均值与中位数
正常区间按分位数设定,如 P5 到 P95
业务修正节假日与大促单独建模或加白名单
触发策略连续两次越界才升级,减少抖动误报
输出基线与实际值同时落库,便于复盘

典型使用场景

  • 日报行数监控:与上周同星期比较,识别异常下降或翻倍
  • 金额类指标监控:支付金额、退款金额偏离历史区间时告警
  • 任务产出时间监控:调度延迟是否超出同类任务的历史分布
  • 上游源表波动:源端抽取量突降时提前发现接口问题
  • 大促期间改用单独基线,避免与平峰数据混算

同星期基线对比

同星期基线对比
-- 与上周同星期对比,计算波动率
SELECT cur.dt, cur.cnt AS cur_cnt, pre.cnt AS last_week_cnt,
       ROUND((cur.cnt - pre.cnt) / NULLIF(pre.cnt, 0), 4) AS wow_rate
FROM (SELECT dt, COUNT(1) AS cnt FROM dwd_trade_order_detail_di
      WHERE dt = '2026-10-11' GROUP BY dt) cur
LEFT JOIN (SELECT dt, COUNT(1) AS cnt FROM dwd_trade_order_detail_di
           WHERE dt = '2026-10-04' GROUP BY dt) pre
  ON 1 = 1;

-- 最近 4 周同星期的分位数区间
SELECT approx_percentile(cnt, 0.05) AS p05,
       approx_percentile(cnt, 0.95) AS p95
FROM (SELECT dt, COUNT(1) AS cnt FROM dwd_trade_order_detail_di
      WHERE dt BETWEEN '2026-09-14' AND '2026-10-11'
        AND dayofweek(dt) = dayofweek('2026-10-11')
      GROUP BY dt) t;

基线方法对照

方法判据优点缺点
固定阈值绝对上下限实现简单业务增长后阈值失效
同比同星期与上周同星期比较抗周内节律节假日全面误报
滑动分位数近 4 周 P5 到 P95自适应波动大促期间区间被拉长
模型预测时序或回归预测节假日可拟合维护成本高
基线模型要有业务日历输入,否则每逢节假日与促销都会产生批量误报,久而久之告警被视为噪音。
没有连续越界确认机制时,单点抖动会频繁打扰值班;但连续确认也会让真实故障晚一个周期被发现,这个取舍要在规则里写明并定期回顾。
基线与实际值要一起落库:只有告警记录时,事后复盘无法判断当时偏离了多少、是缓慢漂移还是突然跌落。

易错点

  • 只看同比不看业务日历,节假日与促销期误报集中爆发,值班迅速麻木
  • 没有连续越界确认,单点抖动频繁打扰值班;反过来确认周期过长又会延迟发现真故障
  • 基线用了刚扩容前的历史期数据,扩容后行数台阶式变化导致长期误报
  • 基线窗口太短(只取三五天),一次线上活动就会把区间撑大,之后真异常反而检测不到

数据来源与参考

  • 行业数据质量波动监控实践
  • DAMA-DMBOK 数据质量度量
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌