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

请求优化Defender狩猎KQL查询:用7天告警平均值替代固定阈值

修改后的KQL查询(适配动态周平均值阈值)
// 定义时间范围:过去7天到当前时间
let starttime = 7d;
let endtime = 0d;
// 第一步:获取关联后的告警数据,提取核心字段
let hourly_alerts = AlertEvidence
| join AlertInfo on AlertId
| project Timestamp, AlertId, Severity
| where Timestamp between (ago(starttime)..ago(endtime))
// 按小时粒度和告警级别统计唯一告警数量
| summarize HourlyAlerts = dcount(AlertId) by HourBin = bin(Timestamp, 1h), Severity;
// 第二步:计算每个告警级别对应的7天平均每小时告警数
let severity_avg = hourly_alerts
| summarize TotalAlerts = sum(HourlyAlerts), TotalHours = dcount(HourBin) by Severity
| extend AvgHourlyAlerts = round(TotalAlerts / TotalHours, 2); // 保留两位小数,提升可读性
// 第三步:关联数据并筛选出超过平均值的时段
hourly_alerts
| join severity_avg on Severity
| extend IsAboveAvg = iff(HourlyAlerts > AvgHourlyAlerts, "YES", "NO")
| where IsAboveAvg == "YES"
| project HourBin, Severity, HourlyAlerts, AvgHourlyAlerts, IsAboveAvg

关键修改说明:

  • 移除固定阈值Threshold,改用按告警级别动态计算的周平均每小时告警数,不同级别告警基线差异大,分组统计更贴合实际场景
  • 拆分逻辑为三个独立步骤,便于理解和调试:
    1. hourly_alerts:统计过去7天内,每个小时、每个告警级别的唯一告警数量
    2. severity_avg:基于小时统计结果,计算每个级别对应的平均每小时告警数(总告警数÷总小时数)
    3. 关联两个数据集,判断每小时告警数是否超过对应级别的平均值,最终筛选出符合条件的记录
  • 保留dcount(AlertId)确保统计的是唯一告警,避免同一条告警关联多个证据导致重复计数
  • 使用bin(Timestamp, 1h)将时间规整为小时粒度,保证统计维度的一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:40:40