如何在Azure Sentinel工作簿中复用查询结果避免重复执行?
Azure Sentinel工作簿中KQL查询结果复用的解决办法
方法1:把初始查询导出为隐藏变量
这是最直接的方式,让初始查询只执行一次,后续所有可视化模块直接复用结果:
- 添加一个「查询」组件,编写好获取
SecurityIncident关联UrlClickEvents的初始查询(务必包含后续需要的所有字段,比如NetworkMessageId、Url、AccountName等) - 打开该组件的「高级设置」,勾选「将结果导出为变量」,设置变量名(比如
InitialUrlEvents),再将组件设为「隐藏」(避免在工作簿界面显示) - 后续可视化查询直接通过
dataset(InitialUrlEvents)调用这个变量的结果:- 展示URL点击事件列表:直接引用
dataset(InitialUrlEvents)并选择对应列即可 - 关联
mailMessage实体:dataset(InitialUrlEvents) | join kind=inner MailMessage on NetworkMessageId | project NetworkMessageId, Subject, SenderFromAddress, Url - 统计共享相同
NetworkMessageId的UrlClickEvents:dataset(InitialUrlEvents) | summarize ClickCount=count() by NetworkMessageId | join kind=inner UrlClickEvents on NetworkMessageId | project NetworkMessageId, Url, AccountName, ClickCount - 提取去重域名:
dataset(InitialUrlEvents) | parse Url with * "://" Domain "/" * | distinct Domain
- 展示URL点击事件列表:直接引用
方法2:封装成工作簿自定义函数
如果需要更灵活的复用逻辑,可以把初始查询封装为工作簿的自定义函数:
- 在工作簿的「资源管理器」中添加一个「函数」资源,编写初始查询逻辑,示例如下:
let GetRelevantUrlEvents = () { SecurityIncident | where TimeGenerated > ago(7d) | project IncidentId, Title | join kind=inner UrlClickEvents on $left.IncidentId == $right.IncidentId | project IncidentId, NetworkMessageId, Url, AccountName, TimeGenerated }; - 保存函数后,所有后续查询直接调用该函数即可,例如:
注:工作簿函数会自动缓存执行结果,多个查询调用时不会重复执行初始查询逻辑。GetRelevantUrlEvents() | join kind=inner MailMessage on NetworkMessageId
方法3:用链接数据集跨标签页复用
如果初始查询结果需要在多个工作簿标签页复用,可以创建一个隐藏的「数据集」组件,其他标签页通过「链接数据集」的方式引用它,确保初始查询只执行一次。
内容的提问来源于stack exchange,提问作者JTB
相关产品推荐
相关产品推荐

