Azure环境下基于日志的异常计数异常检测最优及低成本方案咨询
Azure ASP.NET应用异常计数异常检测方案
核心逻辑
基于Log Analytics Workspace的历史日志数据计算动态基准值,定时对比当前时段的异常数量,一旦超出阈值就触发通知。
低成本最优实现方案
1. 生成动态基准值
在Log Analytics中编写Kusto查询,计算过去1个月的每小时异常数动态基准N——用7天移动平均替代单纯的整体平均,能更好适配业务波动带来的N值变化:
ExceptionLogs | where TimeGenerated between (ago(30d) .. now()) | summarize HourlyExceptions = count() by bin(TimeGenerated, 1h) | extend RollingAvg = avg(HourlyExceptions) over (range(-168h, 0h, 1h)) | summarize DynamicBaseline = avg(RollingAvg)
2. 配置定时告警规则
在Azure Monitor中创建日志告警规则,具体设置如下:
- 检测逻辑:每小时执行一次查询,统计当前小时的异常数,与动态基准N对比,当
当前小时异常数 > N + 20时触发告警 - 告警查询示例:
// 获取当前小时异常总数 let currentHourCount = toscalar( ExceptionLogs | where TimeGenerated between (ago(1h) .. now()) | summarize count() ); // 计算过去1个月的动态基准N let baseline = toscalar( ExceptionLogs | where TimeGenerated between (ago(30d) .. ago(1h)) | summarize HourlyCount = count() by bin(TimeGenerated, 1h) | extend RollingAvg = avg(HourlyCount) over (range(-168h, 0h, 1h)) | summarize avg(RollingAvg) ); // 判断是否触发告警 print IsAlertTriggered = currentHourCount > baseline + 20
- 执行频率:设置为每小时运行一次,检查过去1小时的日志数据
- 通知配置:关联Azure Action Group,选择邮件、Teams、短信等合适的通知渠道
3. 成本优化措施
- 日志存储:根据业务需求调整Log Analytics的日志保留周期,自动清理超出保留期的旧日志,降低存储成本
- 查询优化:确保异常日志查询仅过滤必要字段和时间范围,减少计算资源消耗,降低分析成本
- 告警抑制:配置告警规则的抑制策略,避免短时间内重复发送相同通知,减少干扰和不必要的通知成本
进阶智能检测方案
如果需要更精准的异常识别(比如应对非固定阈值的突增/骤降场景),可以使用Azure Monitor的智能检测功能:
- 自动基于历史数据建立动态基线,识别偏离正常模式的异常计数
- 无需手动设置固定阈值,适配更复杂的业务波动场景
内容的提问来源于stack exchange,提问作者cooper_milton
相关产品推荐
相关产品推荐

