如何在Azure Alert规则中设置滑动窗口?特定配置可行性咨询
Azure 告警规则配置问题解答
核心结论
你想要的「1分钟滑动窗口检测5次异常 + 每6小时评估一次」的配置不可行,因为Azure日志告警有硬性限制:评估频率(Evaluation Frequency)必须小于或等于聚合粒度(Aggregation Granularity),这是平台逻辑上的约束,无法绕过。
限制原因
聚合粒度是你定义的、用来聚合计算异常次数的时间窗口(比如你要的1分钟),而评估频率是系统周期性扫描日志的间隔。如果评估频率(6小时)大于聚合粒度(1分钟),系统无法在6小时的扫描周期内,准确对应到每个1分钟的滑动窗口进行判断——平台设计上要求每次评估的时间范围至少能覆盖一个完整的聚合窗口,所以必须满足评估频率 ≤ 聚合粒度。
可行替代方案
根据你的需求(检测1分钟内5次异常 + 控制成本),有两种可行的调整方向:
方案1:实时检测 + 告警抑制(兼顾实时性与成本)
- 配置规则时,将聚合粒度设为1分钟,评估频率设为1分钟(满足平台限制)
- 开启「告警抑制」功能:设置抑制条件为「触发告警后,抑制接下来6小时内的所有重复告警」
- 效果:系统会每分钟扫描一次过去1分钟的日志,一旦检测到5次异常就触发告警,之后6小时内即使再出现符合条件的情况也不会重复告警。既保证了异常的及时检测,又通过抑制控制了告警次数和成本。
方案2:自定义查询 + 6小时周期评估(优先控制成本,牺牲实时性)
- 编写自定义Kusto查询,直接在6小时的时间范围内,检查是否存在1分钟窗口内异常次数≥5的情况:
// 替换为你的日志表名和异常判断条件 YourLogTableName | where TimeGenerated >= ago(6h) | where YourExceptionCondition == true // 比如 Status == "Error" | summarize ExceptionCount = count() by bin(TimeGenerated, 1m) | where ExceptionCount >= 5 - 配置规则时,将聚合粒度设为6小时,评估频率设为6小时(满足评估频率≤聚合粒度的要求)
- 效果:系统每6小时执行一次查询,扫描过去6小时的日志,只要存在任意1分钟窗口符合条件就触发告警。这种方式评估频率低,成本更优,但告警会延迟最多6小时才能触发。
方案选择建议
- 如果对异常的实时性要求高(需要尽快收到告警),选方案1;
- 如果可以接受最长6小时的告警延迟,优先选方案2来最大化节约成本。
内容的提问来源于stack exchange,提问作者FunkyVerb
相关产品推荐
相关产品推荐

