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

KQL查询技术需求:获取指定Compromised日志对应的前5条deny日志

解决KQL中获取Compromised日志前5条deny日志的需求

嘿,刚上手KQL确实会遇到这类逻辑关联的问题,我来帮你实现想要的查询逻辑!你的需求是找到指定SourceIP下包含"Compromised"的日志,再返回每条这类日志时间点之前的5条DeviceAction = "deny"的日志,下面是具体的实现方案:

核心思路

  1. 先定位所有符合条件的"Compromised"日志,记录它们的发生时间;
  2. 关联同一个SourceIP下所有DeviceAction = "deny"的日志,筛选出时间在"Compromised"日志之前的条目;
  3. 针对每条"Compromised"日志,单独提取它之前的最新5条deny日志。

完整KQL查询语句

// 第一步:先获取所有目标SourceIP下的Compromised事件,记录它们的时间
let compromised_events = 
    YourTableName  // 替换成你的实际日志表名
    | where SourceIP == "555.555.555.555"
    | where TimeGenerated between (datetime(10/20/2021, 16:25:41.750).. datetime(10/20/2021, 16:35:41.750))
    | where AdditionalExtensions has "Compromised"
    | project CompromisedTime = TimeGenerated, SourceIP;

// 第二步:获取deny事件,关联Compromised时间,提取每个Compromised事件前的5条deny日志
YourTableName
| where SourceIP == "555.555.555.555"
| where TimeGenerated between (datetime(10/20/2021, 16:25:41.750).. datetime(10/20/2021, 16:35:41.750))
| where DeviceAction == "deny"
| join kind=inner compromised_events on SourceIP  // 关联同一个SourceIP的Compromised事件
| where TimeGenerated < CompromisedTime  // 筛选出Compromised事件发生前的deny日志
| partition by CompromisedTime (  // 按每个Compromised事件的时间分组处理
    sort by TimeGenerated desc  // 按时间倒序,确保取到最新的前5条
    | take 5
)
| project-away SourceIP1  // 移除关联后重复的SourceIP列,让结果更整洁

关键语法解释

  • let:用来定义变量存储中间结果,让查询逻辑更清晰;
  • join:将deny日志和Compromised日志通过SourceIP关联起来,确保是同一个IP的事件;
  • partition by:针对每条Compromised日志单独处理,避免不同Compromised事件的deny日志混在一起;
  • take 5:提取分组后的前5条日志,配合sort by TimeGenerated desc就能拿到Compromised事件发生前的最新5条deny记录。

如果你的日志表中有唯一标识每条日志的字段(比如EventID),也可以加入到project中,方便后续溯源。

内容的提问来源于stack exchange,提问作者cs-tech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:07:34