启用Azure SQL Database诊断设置后,如何在Log Analytics执行类SQL查询?
在Log Analytics中实现类似SQL查询的操作
分两种场景说明对应的操作方式:
场景1:从SQL安全审计日志里找执行过该查询的记录
如果你是想在已收集的审计日志中,找出谁、什么时候执行过select * from Employees where Country = 'US'这条语句,可以用Kusto查询语言(KQL)筛选AzureDiagnostics表的对应字段:
AzureDiagnostics | where Category == "SQLSecurityAuditEvents" // 匹配执行的SQL语句,字段名可能因环境不同略有差异,常见的是statement_s或sql_text_s | where statement_s contains "select * from Employees where Country = 'US'" // 要是想忽略大小写匹配,用下面这行替换上面的where条件 // | where tolower(statement_s) contains "select * from employees where country = 'us'" | sort by TimeGenerated desc // 可选:只保留有用的字段,比如执行时间、操作人、语句内容 | project TimeGenerated, server_principal_name_s, statement_s
不确定字段名的话,先跑AzureDiagnostics | where Category == "SQLSecurityAuditEvents" | take 1,查看返回结果里的字段列表,找到存SQL语句的那个字段(通常带statement或sql_text字样)。
场景2:直接查询Azure SQL里的Employees表数据
Log Analytics是用来分析日志、监控指标的工具,没法直接连接Azure SQL Database查询业务表的数据。要查Employees这类业务表,直接用以下方式更合适:
- SSMS、Azure Data Studio这类专业SQL客户端
- Azure Portal里Azure SQL Database资源页的“查询编辑器”
- 你的应用程序通过数据库连接字符串直接查询
如果确实需要在Log Analytics里关联业务数据做分析,可以先给Log Analytics工作区配置链接服务连接到你的Azure SQL Database,然后用KQL的external_table函数查询,示例如下:
external_table( table='Employees', data_source='<你的链接服务名称>' ) | where Country == 'US'
这种方式需要先完成链接服务的创建和权限配置,仅适合需要把日志数据和业务数据结合分析的场景。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

