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

如何基于Prometheus创建订单数量偏差查询并设置告警阈值

解决Prometheus订单数量季节性偏差告警的查询方案

针对你的需求(基于7天历史数据构建时段/季节敏感的阈值,5分钟订单量低于阈值时告警),核心是要对齐历史同时段数据,而非使用全局平均,这样才能覆盖时段和星期的季节性波动。以下是具体实现方案:

1. 修正基础查询

先补全你之前的基础查询(注意语法完整性):

  • 最近5分钟订单数:
    sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
    
  • 过去7天同时段的平均订单数(按星期几、小时、分钟分组):
    avg_over_time(
      sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
      [1w:5m]
    ) by (day_of_week(), hour(), minute())
    
  • 过去7天同时段的订单数标准差:
    stddev_over_time(
      sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
      [1w:5m]
    ) by (day_of_week(), hour(), minute())
    

2. 最终告警查询

方案一:基于同时段历史平均值告警

直接比较当前5分钟订单数与过去7天同一时段的平均值,低于则触发:

sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
<
avg_over_time(
  sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
  [1w:5m]
) by (day_of_week(), hour(), minute())

方案二:基于平均值-标准差的容错阈值告警

如果需要避免正常波动误告警,可以用「平均值 - N倍标准差」作为最低阈值(N建议取1或2,根据业务波动调整):

sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
<
(
  avg_over_time(
    sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
    [1w:5m]
  ) by (day_of_week(), hour(), minute())
  -
  stddev_over_time(
    sum(delta(my_search_counter{service_name="car.book.v1"}[5m]))
    [1w:5m]
  ) by (day_of_week(), hour(), minute())
)

3. 关键说明

  • 之前组合无效的原因:你之前的查询取的是整个7天的全局平均,没有区分时段和星期,比如凌晨订单量本来就远低于早高峰,全局平均会导致凌晨阈值过高、高峰时段阈值过低,完全不符合季节性需求。
  • 关于泊松分布:泊松分布适合描述独立事件的计数规律,但在Prometheus中直接拟合分布实现告警非常复杂,需要额外处理逻辑。而用同时段历史统计量的方案更直接,且能完美匹配你的季节性需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:03:21