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

如何用KQL查询指定用户整月登录/登出活动数据?

解决KQL获取指定用户整月每日登录登出记录的问题

原查询的核心问题

  1. 时间范围限制:endofday(ago(15h))会把数据截断到昨日结束,导致无法获取整月其他日期的数据。
  2. 分组逻辑错误:原summarize按LogonTypeName, Account, Activity分组,会把多天的同类型事件合并成一条,丢失每日维度的信息。
  3. 冗余处理:重复extend timestamp没有实际作用,且保留了不需要的EventID 4625(登录失败)。

调整后的查询方案

方案1:获取每日所有登录登出明细记录

适合需要查看每一次登录/登出具体时间的审计场景:

SecurityEvent
| where TimeGenerated between (startofmonth(now()) .. endofmonth(now())) // 获取当月完整数据
| where EventID in (4624, 4634) // 仅保留登录成功(4624)、登出(4634)事件
| where TargetUserName contains "Johnsmith"
| extend 操作类型 = case(
    EventID == 4624, "登录成功",
    EventID == 4634, "登出",
    "未知操作"
)
| extend 日期 = startofday(TimeGenerated) // 提取事件所属日期
| project 日期, 操作类型, 事件时间=TimeGenerated, LogonTypeName, TargetUserName, Activity
| sort by 日期 desc, 事件时间 desc

方案2:获取每日首次登录、最后登出的汇总记录

适合需要快速查看每日登录登出时间范围的审计场景:

SecurityEvent
| where TimeGenerated between (startofmonth(now()) .. endofmonth(now()))
| where EventID in (4624, 4634)
| where TargetUserName contains "Johnsmith"
| extend 操作类型 = case(
    EventID == 4624, "登录成功",
    EventID == 4634, "登出",
    "未知操作"
)
| summarize 事件时间=case(
    操作类型 == "登录成功", min(TimeGenerated),
    操作类型 == "登出", max(TimeGenerated)
) by 日期=startofday(TimeGenerated), 操作类型, TargetUserName
| sort by 日期 desc

关键调整说明

  • 时间范围优化:用startofmonth(now()) .. endofmonth(now())精准获取当月所有数据,若需要过去30天可替换为startofday(ago(30d)) .. now()。
  • 事件类型映射:通过case函数把EventID转换成易读的操作类型,避免直接查看数字ID的混淆。
  • 按日期分组:新增日期=startofday(TimeGenerated)作为分组键,确保每日数据独立统计,不会跨天合并。
  • 冗余清理:移除不必要的EventID 4625,聚焦登录登出核心事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:50:16