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

如何在KQL中按AlertID聚合365Defender关联事件到单行?

365 Defender 按AlertID聚合单行数据的解决方案

针对你遇到的同一AlertID数据聚合问题,有两种更简洁且实用的处理方式,完全可以实现单行聚合的需求:

方案1:按字段聚合唯一值数组(最适合关联分析)

如果你的核心需求是和Device*Events等表做关联,直接把每个字段的所有唯一值聚合为数组是最高效的方式,避免了嵌套打包的问题:

AlertEvidence
| where DetectionSource contains "Office"
| where AttackTechniques contains "phish"
| summarize 
    AlertTitle = take_any(Title), // 同一AlertID的Title通常一致,取任意值即可
    Timestamps = make_set(Timestamp),
    AccountNames = make_set(AccountName),
    DeviceNames = make_set(DeviceName),
    EmailSubjects = make_set(EmailSubject),
    NetworkMessageIds = make_set(NetworkMessageId),
    FileNames = make_set(FileName),
    FolderPaths = make_set(FolderPath),
    SHA1s = make_set(SHA1),
    RemoteUrls = make_set(RemoteUrl)
by AlertId

这个查询会生成单行Per AlertID的结果,每个字段存储该警报下的所有唯一值数组,后续关联其他表时,直接用has_any或contains匹配数组中的值即可。

方案2:保留完整事件结构(数组包裹对象)

如果需要保留每个事件的完整字段结构,无需手动列字段,用pack_all()自动打包整行数据,再聚合为数组即可,比你之前的写法更简洁:

AlertEvidence
| where DetectionSource contains "Office"
| where AttackTechniques contains "phish"
| extend EventDetails = pack_all() // 自动打包当前行所有字段为动态对象
| summarize AllEvents = make_set(EventDetails) by AlertId

这种方式得到的AllEvents是一个数组,每个元素对应一条原始事件的完整数据。如果需要关联其他表,可以先通过mv-expand展开数组,关联后再重新聚合,或者直接提取数组中的特定字段值进行匹配。

你之前遇到的“双重打包”其实是数组包裹对象的合理结构,并非无法处理,只是方案1的形式更适合关联分析场景。

内容的提问来源于stack exchange,提问作者Andreas Törnqvist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:52:29