如何在Azure Log Analytics中定位待查询的目标数据表
操作指引
你在Task表找不到作业启动/结束时间字段是正常情况:Task表仅存储任务配置、关联关系类静态元数据,作业运行时的时间戳、执行状态这类动态数据默认写入作业执行实例对应的专属日志表,不会冗余存储在Task表中,按以下步骤操作即可实现需求:
第一步:定位存储作业运行数据的正确表
- 先在Log Analytics查询编辑器执行以下查询,自动筛选出最近1小时内包含作业ID字段的所有表,不用手动翻找表列表:
search * | where TimeGenerated > ago(1h) | where * has "jobid" or * has "JobId" | distinct $table
- 根据你使用的SaaS作业类型,优先核对以下高频表:
- 自研/无专属资源提供程序的SaaS作业:优先查
AzureDiagnostics表,作业运行相关字段通常以_s(字符串)、_t(时间)后缀命名,对应jobId_s、startTime_t、endTime_t、status_s - Azure Automation 自动化作业:对应
AzureAutomationJobEvent表,通过EventId字段区分作业启动、完成、失败事件,TimeGenerated为事件发生时间 - Azure Batch 批处理作业:对应
AzureBatchJobExecution表,原生自带jobId、startTime、endTime、state字段,可直接提取
- 自研/无专属资源提供程序的SaaS作业:优先查
第二步:编写查询生成作业指标报表
找到对应数据表后,通过分段查询关联同一个JobId的启动、结束事件,自动计算运行时长,参考通用查询模板(替换尖括号内的环境对应值即可):
// 提取作业启动时间 let JobStartEvents = <替换为上一步找到的目标表名> | where <替换为启动事件对应的筛选条件,例如 EventName == "JobStarted"> | project JobId = <替换为表中存储作业ID的字段名>, StartTime = TimeGenerated; // 提取作业结束时间、运行状态 let JobEndEvents = <替换为上一步找到的目标表名> | where <替换为结束/失败事件对应的筛选条件,例如 EventName in ("JobSucceeded", "JobFailed")> | project JobId = <替换为表中存储作业ID的字段名>, EndTime = TimeGenerated, JobStatus = <替换为表中存储作业状态的字段名>; // 关联生成最终报表 JobStartEvents | join kind=inner JobEndEvents on JobId | extend RunDuration = format_timespan(EndTime - StartTime, 'dd\.hh\:mm\:ss') | project JobId, StartTime, EndTime, RunDuration, JobStatus
第三步:配置自动化通知
- 将上述查询保存到Log Analytics,直接绑定到日志警报规则:设置查询时间范围为最近15分钟,规则执行频率为每15分钟
- 警报规则关联的动作组直接配置目标通讯组列表,规则触发时会自动将查询返回的作业状态、运行时长结果推送到通讯组,无需单独开发通知任务。
注意事项
- 不要直接使用
Task表的TimeGenerated字段计算运行时长:该字段记录的是任务配置创建/修改的时间,和作业实际运行时间无关,计算结果完全无效 - 如果是自研SaaS作业,需要在作业代码逻辑中显式将启动、结束事件带上jobId、时间戳、状态字段上报到Log Analytics,平台不会自动采集这部分自定义业务数据
内容的提问来源于stack exchange,提问作者gbolahr
相关产品推荐
相关产品推荐

