Azure Data Factory管道超65分钟运行的Kusto查询告警需求
解决Azure Data Factory运行中管道超时长告警问题
需求回顾
需实现:
- Azure Data Factory管道运行未完成且运行时长超过60分钟时发送告警邮件,因告警逻辑需5分钟缓冲,实际判断运行时长是否超过65分钟
- 每个管道实例(RunId)仅发送一次告警,即使管道仍在运行也只触发一次
原查询问题分析
原查询未明确过滤管道的运行状态(Status),导致仅在管道成功完成时触发告警,无法覆盖运行中的场景,同时未针对“仅发送一次告警”做针对性处理。
修改后的Kusto查询
let PipelineOriginalStart = ADFPipelineRun | summarize OriginalStart = min(Start) by RunId | project RunId, OriginalStart; ADFPipelineRun | summarize arg_max(TimeGenerated, *) by RunId // 获取每个RunId的最新状态记录 | join kind=innerunique PipelineOriginalStart on RunId | extend Duration = case( Status == "InProgress", now() - OriginalStart, // 运行中时,计算从启动到当前的时长 End > OriginalStart, End - OriginalStart, // 已完成时,计算实际运行时长 0s // 异常情况默认0秒 ) // 过滤条件:运行中、时长超过65分钟、指定管道名,且启动时间在最近120分钟内(避免旧数据干扰) | where Status == "InProgress" and Duration >= 65m and PipelineName == "TEST_ALERT" and OriginalStart > ago(120m) | extend DurationMinutes = round(Duration / 1m, 1) // 生成唯一标识用于告警抑制,确保每个RunId只触发一次告警 | extend AlertKey = strcat(RunId, "_LongRunningAlert") | project RunId, PipelineName, OriginalStart, DurationMinutes, AlertKey, Status
告警规则配置补充
为实现“告警仅发送一次”,需在Azure Monitor告警规则中配置:
- 在抑制规则里,选择按
AlertKey字段进行抑制,抑制时长设置为管道可能的最大运行时长(比如24小时),确保同一个RunId不会重复触发告警
说明
- 明确过滤
Status == "InProgress",仅针对运行中的管道触发告警 - 时长判断使用
Duration >= 65m,满足5分钟缓冲的要求 - 通过
AlertKey字段结合告警抑制规则,确保每个管道实例仅发送一次告警 - 保留
OriginalStart > ago(120m)避免查询过久之前的旧数据,提升查询效率
内容的提问来源于stack exchange,提问作者tobisawa misaki
相关产品推荐
相关产品推荐

