如何在Azure WebJob状态中止时获取通知?附相关配置说明
如何在Azure WebJob中止时获取通知
针对你的需求,结合已启用Always Availability、SCM_COMMAND_IDLE_TIMEOUT = 2000和WEBJOBS_IDLE_TIMEOUT = 2000的配置,这里有几个可靠的实现方案:
方案1:Azure Monitor警报(最推荐,开箱即用)
Azure Monitor是最直接的监控方式,能精准捕获WebJob状态变化并触发通知:
- 登录Azure门户,找到WebJob所属的App Service
- 导航至「监控」>「警报」>「创建警报规则」
- 在「信号名称」中选择WebJob 状态,配置触发条件为「状态变为Aborted」
- 配置动作组:可以选择发送邮件/短信,或者调用Azure Function、Logic Apps执行自定义逻辑
- 👉 注意:因为你启用了Always Availability,App Service实例不会休眠,监控会持续运行,不会错过任何状态变更
方案2:WebJob代码中添加自定义中止事件处理
如果需要更灵活的通知逻辑,可以在代码里直接捕获中止事件:
- 对于连续运行的WebJob,注册
JobHostStopping事件,在事件回调里发送通知(比如调用邮件API、推送消息到Teams等) - C#示例代码:
var config = new JobHostConfiguration(); // 注册中止前的事件 config.JobHostStopping += (sender, args) => { // 这里替换成你的通知逻辑 SendAlertNotification("WebJob已中止,触发原因可能是Idle超时或异常"); }; var host = new JobHost(config); host.RunAndBlock();
- 这个方案能覆盖Idle超时中止(对应你的
WEBJOBS_IDLE_TIMEOUT配置)和意外中止两种场景
方案3:诊断日志+Log Analytics规则
如果需要结合日志上下文分析中止原因,同时触发通知:
- 先启用App Service的「诊断日志」,将WebJob日志输出到Azure Log Analytics
- 在Log Analytics中创建查询规则,检测包含中止关键词的日志:
AppServiceConsoleLogs | where Message contains "Job stopped due to abort" or Message contains "Aborted" | project TimeGenerated, Message, _ResourceId
- 配置该查询的警报规则,当匹配到结果时触发通知动作
额外注意事项
- 你的
WEBJOBS_IDLE_TIMEOUT = 2000意味着连续WebJob idle超过2000秒会自动中止,上述所有方案都能捕获这个场景 SCM_COMMAND_IDLE_TIMEOUT是针对SCM站点的超时设置,和WebJob的中止通知没有直接关联,但Always Availability确保了监控服务不会因为实例休眠而失效
内容的提问来源于stack exchange,提问作者Sowjanya
相关产品推荐
相关产品推荐

