Azure Data Explorer中Update Policy执行失败的日志记录位置在哪?
问题背景
我有一张配置了Update Policy的表,初始配置如下:
.create table Foo ( data: dynamic ) .create function ParseFoo () { Foo | project a = tostring(data.a), b = tostring(data.b) } .create table Bar ( a: string, b: string ) .alter table Bar policy update
[{ "IsEnabled": true, "Source": "Foo", "Query": "ParseFoo", "IsTransactional": false, "PropagateIngestionProperties": false }]
之后我修改了ParseFoo函数,新增提取列c:
.alter function ParseFoo () { Foo | project a = tostring(data.a), b = tostring(data.b), c = tostring(data.c) }
由于函数输出与目标表Bar的架构不匹配,Update Policy无法执行,数据摄入也随之停止。我已经排查并修复了问题,但希望能主动监控这类情况。目前我在.show journal和ADXCommand表中都没有找到相关的失败日志。
解决方案
要监控Update Policy的执行失败,可通过以下几种方式实现:
1. 查询TableOperations系统表
ADX的TableOperations表记录了表级操作事件,包含Update Policy的执行情况。用以下查询筛选失败事件:
TableOperations | where OperationType == "UpdatePolicy" | where Status == "Failed" | project EventTime, DatabaseName, TableName, OperationType, Status, Details
Details字段会包含具体错误信息,比如架构不匹配的原因。
2. 启用诊断日志并查询KustoClusterDiagnostics表
在Azure门户为ADX集群启用诊断日志,选择收集UpdatePolicy类别日志。之后通过KustoClusterDiagnostics表查询失败记录:
KustoClusterDiagnostics | where Category == "UpdatePolicy" | where OperationName == "UpdatePolicyExecution" | where ResultType == "Failure" | project TimeGenerated, Resource, OperationName, ResultDescription
ResultDescription会详细说明失败原因,比如输出列与目标表架构不匹配的具体信息。
3. 使用专用失败查询命令
ADX提供了查看Update Policy失败记录的专属命令:
.show table Bar policy update failures
该命令会返回目标表Bar上所有Update Policy的执行失败记录,包含错误时间、错误代码和详细描述。
4. 设置主动告警规则
基于上述查询结果,在Azure Monitor中创建告警规则,当检测到Update Policy失败事件时,自动触发邮件、Teams消息等通知,实现主动监控。
总结
通过TableOperations系统表、诊断日志、专用失败查询命令,可全面监控Update Policy的执行状态,及时发现架构不匹配等问题。结合Azure Monitor告警,能确保这类问题被第一时间察觉并处理。
内容的提问来源于stack exchange,提问作者Peter Vandivier

