如何编写KQL查询Log Analytics工作区的用户表访问及查询次数
统计Log Analytics工作区的用户查询行为
AzureActivity表主要记录工作区的管理类操作(如权限变更、资源配置),无法获取用户执行查询时访问的具体表信息。要统计用户、访问表及查询次数,需使用专门存储查询日志的LAQueryLogs表,以下是正确的KQL查询:
// 统计指定工作区中用户访问各表的查询次数 LAQueryLogs // 替换为你的目标工作区ID或名称 | where WorkspaceId == "your-workspace-id" or WorkspaceName == "your-workspace-name" // 调整时间范围,示例为当年至今 | where TimeGenerated between (startofyear(now()) .. now()) // 仅统计成功执行的查询(可根据需求移除) | where ResultType == "Success" // 从查询语句中提取访问的表名(适配常见查询语法,复杂场景需调整正则) | extend AccessedTables = extract_all(@"([a-zA-Z0-9_]+)(?=\s*\||\s*where|\s*from|\s*$)", dynamic([0]), QueryText) // 将数组形式的表名展开为单行记录 | mv-expand AccessedTables to typeof(string) // 关联IdentityInfo补充用户UPN(若Caller已是UPN可省略此join) | join kind=leftouter ( IdentityInfo | where TimeGenerated > ago(90d) | summarize arg_max(TimeGenerated, *) by AccountSID ) on $left.CallerSid == $right.AccountSID // 统一用户标识,优先使用UPN | extend User = coalesce(AccountUPN, Caller) // 按用户和表名统计查询次数 | summarize QueryCount = count() by User, AccessedTables // 按查询次数降序排列 | sort by QueryCount desc
关键说明:
LAQueryLogs:存储Log Analytics中所有查询操作的详细日志,包含查询语句、发起用户、执行结果等核心字段extract_all:通过正则表达式从QueryText中提取表名,默认适配表名 | 操作、表名 where等常见语法,若需支持子查询、跨工作区查询等复杂场景,需调整正则规则mv-expand:将提取到的表名数组拆分为独立行,确保每个用户-表的组合能被单独统计- 若你的场景中
Caller字段直接显示用户UPN,可移除join IdentityInfo的步骤,直接用Caller作为User字段
内容的提问来源于stack exchange,提问作者Louis Di Edgar
相关产品推荐
相关产品推荐

