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

如何在Azure Sentinel的KQL查询中筛选多个非连续节假日时段?

解决Azure Sentinel KQL筛选非连续假日日期的问题

问题根源

你之前的写法有两个核心问题:

  • 用string类型存储假日日期,和TimeGenerated(datetime类型)直接用!contains匹配逻辑错误——contains是子串匹配,既不适合日期等值判断,也不能直接把整个表作为参数。
  • 你要匹配的是日期维度(不管具体时间点),但没对TimeGenerated做日期提取,导致无法和假日日期做精准匹配。

方案一:用in运算符快速筛选

直接把假日日期定义为datetime数组,提取TimeGenerated的日期部分后,用in判断是否在假日列表里,适合假日数量不多的场景:

// 定义假日日期数组(直接用datetime类型,避免字符串转换问题)
let HolidayDates = dynamic([
    datetime(2022-12-24), datetime(2022-12-25),
    datetime(2023-01-01), datetime(2023-01-02), datetime(2023-01-03),
    datetime(2023-04-07), datetime(2023-04-08), datetime(2023-04-09), datetime(2023-04-10)
]);
// 替换成你的实际日志表名,提取日期后筛选
YourLogTable
| where startofday(TimeGenerated) in (HolidayDates)

startofday()会把TimeGenerated转换成当天零点的datetime值,确保只要是假日当天的日志都会被匹配到。


方案二:用datatable配合join(适合需维护的场景)

如果假日日期需要分组注释、后续频繁更新,用datatable定义更清晰,再通过join关联筛选:

let HolidayDates = datatable(HDates: datetime)
[
    datetime(2022-12-24), // 圣诞假期
    datetime(2022-12-25),
    datetime(2023-01-01), // 新年假期
    datetime(2023-01-02),
    datetime(2023-01-03),
    datetime(2023-04-07), // 复活节假期
    datetime(2023-04-08),
    datetime(2023-04-09),
    datetime(2023-04-10)
];
// 提取日志日期,和假日表做内连接筛选
YourLogTable
| extend LogDate = startofday(TimeGenerated)
| join kind=inner (HolidayDates) on $left.LogDate == $right.HDates
| project-away LogDate, HDates // 移除临时字段

补充:排除假日日期的写法

如果需要筛选非假日的记录,只需调整判断逻辑:

  • 用!in替代in:where startofday(TimeGenerated) !in (HolidayDates)
  • 或用leftanti join:join kind=leftanti (HolidayDates) on $left.LogDate == $right.HDates

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:02:19