Azure告警需求:仅未触发事件ID650时触发事件ID500告警
解决Azure日志告警中“检测到EventID500且未触发EventID650”的KQL写法
针对你的需求——仅当5分钟时间窗口内检测到EventID500、且同一虚拟机未出现EventID650时触发告警,以下是两种可行的KQL实现方案:
方式1:使用leftanti关联(性能更优)
// 提取时间范围内的EventID500事件,保留原查询逻辑 let events_500 = Event | where EventID == "500" | summarize arg_max(TimeGenerated, *) by ParameterXml | project TimeGenerated, Computer, EventID, RenderedDescription; // 提取同一时间范围内的EventID650事件,仅保留关联所需的计算机标识 let events_650 = Event | where EventID == "650" | project Computer; // 仅保留有500事件但无对应650事件的记录 events_500 | join kind=leftanti (events_650) on Computer | order by TimeGenerated
leftanti关联的作用是:返回左表(events_500)中所有在右表(events_650)找不到匹配Computer的记录,精准对应“有500但无650”的场景。
方式2:使用not exists子查询
Event | where EventID == "500" | summarize arg_max(TimeGenerated, *) by ParameterXml | project TimeGenerated, Computer, EventID, RenderedDescription // 过滤掉同一时间窗口内该虚拟机出现过EventID650的记录 | where not exists ( Event | where EventID == "650" | where Computer == Computer ) | order by TimeGenerated
子查询会检查当前记录对应的Computer在告警时间窗口内是否存在EventID650,not exists会直接排除掉这类不符合条件的记录。
注意事项
告警配置的5分钟时间窗口会自动作用于查询的时间范围,无需手动在KQL中指定时间条件,确保查询逻辑和告警窗口一致。
内容的提问来源于stack exchange,提问作者Catcha24
相关产品推荐
相关产品推荐

