Azure Databricks工作流日志无法在Log Analytics查询所需字段求助
解决Azure Databricks工作流作业在Log Analytics中的查询问题
核心表与字段映射
Databricks工作流作业的诊断日志会写入AzureDiagnostics表,和作业运行相关的记录大多属于OperationName为JobRun的条目。你需要的字段在Log Analytics里的对应关系如下:
- 作业名称:
jobName_s - 启动时间:
startTime_t(或TimeGenerated,部分场景下可近似替代) - 运行身份:
runAsPrincipalName_s - 运行状态:
runResultType_s - 运行参数:
runParameters_s(JSON格式存储) - 运行时长:通过
endTime_t和startTime_t计算得出
基础查询示例
直接用下面的KQL查询就能输出和Databricks工作流模块类似的表格:
AzureDiagnostics | where OperationName == "JobRun" | where Category == "Jobs" // 筛选最近7天的记录,可按需修改时间范围 | where TimeGenerated > ago(7d) // 提取并转换字段,解析JSON格式的运行参数 | extend 作业名称 = jobName_s, 启动时间 = startTime_t, 结束时间 = endTime_t, 运行时长 = datetime_diff('second', endTime_t, startTime_t), 运行身份 = runAsPrincipalName_s, 运行状态 = runResultType_s, 运行参数 = parse_json(runParameters_s) // 选择需要展示的列,可根据需求增减 | project 作业名称, 启动时间, 结束时间, 运行时长, 运行身份, 运行状态, 运行参数 // 按启动时间倒序排列,最新的记录在前 | sort by 启动时间 desc
常见问题处理
- 找不到
startTime_t/endTime_t时:可以关联启动和完成事件来计算时长,示例如下:
// 分别提取作业启动和完成事件 let jobStarts = AzureDiagnostics | where OperationName == "JobRun" and eventName_s == "JobRunStarted" | project jobId_g, jobName_s, 启动时间 = TimeGenerated, 运行身份 = runAsPrincipalName_s; let jobCompletes = AzureDiagnostics | where OperationName == "JobRun" and eventName_s == "JobRunCompleted" | project jobId_g, 结束时间 = TimeGenerated, 运行状态 = runResultType_s, 运行参数 = runParameters_s; // 关联两类事件,计算时长 jobStarts | join kind=inner jobCompletes on jobId_g | extend 运行时长 = datetime_diff('minute', 结束时间, 启动时间) | project 作业名称 = jobName_s, 启动时间, 结束时间, 运行时长, 运行身份, 运行状态, 运行参数 = parse_json(运行参数) | sort by 启动时间 desc
- 运行参数解析失败:如果
runParameters_s格式有问题,用todynamic()替代parse_json(),或者加isnotempty(运行参数)筛选有效记录。
注意事项
- 诊断日志同步有5-15分钟延迟,刚运行的作业需要等一会儿才能查到。
- 确认诊断设置里已经勾选Jobs类别下的所有日志选项,别漏了关键事件。
内容的提问来源于stack exchange,提问作者Shaan
相关产品推荐
相关产品推荐

