You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Logic Apps:如何监测并通知逻辑应用故障与连接中断

逻辑应用故障与连接中断的检测通知方案

问题背景

现有基于Azure Sentinel的KQL查询和Logic App工作流,仅能捕获Sentinel自动化规则触发的Playbook运行故障,但无法覆盖环境中普通逻辑应用(手动/自动触发)的整体运行失败、单个动作故障及连接中断场景,需优化方案实现全量故障的检测与通知。


一、扩展KQL查询覆盖全量故障场景

1. 全场景故障捕获查询

以下查询整合了普通逻辑应用运行级故障、单个动作故障、Sentinel触发Playbook故障、连接中断四类场景:

// 合并多类逻辑应用故障日志
union 
  // 1. 普通逻辑应用运行级故障(整体失败/取消)
  (AzureDiagnostics
   | where ResourceType == "LOGICAPPS"
   | where OperationName in ("Microsoft.Logic/workflows/workflowRunFailed", "Microsoft.Logic/workflows/workflowRunCanceled")
   | project
     TimeGenerated,
     WorkflowName = resource_workflowName_s,
     RunId = resource_runId_s,
     FailureType = "运行级故障",
     Status = status_s,
     ErrorMessage = errorMessage_s,
     TriggerType = triggerType_s),
  // 2. 普通逻辑应用动作级故障(单个动作失败)
  (AzureDiagnostics
   | where ResourceType == "LOGICAPPS"
   | where OperationName == "Microsoft.Logic/workflows/workflowActionCompleted"
   | where status_s != "Succeeded"
   | project
     TimeGenerated,
     WorkflowName = resource_workflowName_s,
     RunId = resource_runId_s,
     FailureType = "动作级故障",
     Status = status_s,
     ErrorMessage = errorMessage_s,
     ActionName = actionName_s,
     TriggerType = triggerType_s),
  // 3. Sentinel自动化规则触发的Playbook故障
  (SentinelHealth 
   | where SentinelResourceType == "Automation rule"
   | mv-expand TriggeredPlaybooks = ExtendedProperties.TriggeredPlaybooks
   | extend RunId = tostring(TriggeredPlaybooks.RunId)
   | join kind=leftouter (AzureDiagnostics 
       | where ResourceType == "LOGICAPPS"
       | where OperationName in ("Microsoft.Logic/workflows/workflowRunFailed", "Microsoft.Logic/workflows/workflowRunCanceled", "Microsoft.Logic/workflows/workflowActionCompleted")
       | where status_s != "Succeeded"
       | project
         RunId = resource_runId_s,
         WorkflowName = resource_workflowName_s,
         Status = status_s,
         ErrorMessage = errorMessage_s,
         ActionName = actionName_s,
         TriggerType = triggerType_s)
     on RunId
   | project
     TimeGenerated,
     WorkflowName = coalesce(WorkflowName, tostring(TriggeredPlaybooks.PlaybookName)),
     RunId,
     FailureType = iif(isempty(ActionName), "Sentinel触发运行级故障", "Sentinel触发动作级故障"),
     Status,
     ErrorMessage,
     ActionName,
     AutomationRuleName = SentinelResourceName,
     TriggerType = coalesce(TriggerType, "Sentinel自动化规则触发")),
  // 4. 逻辑应用连接中断故障
  (AzureActivity
   | where ResourceType == "LOGICAPPS"
   | where OperationName == "Microsoft.Logic/workflows/connections/healthCheck/action"
   | where ActivityStatus == "Failed"
   | project
     TimeGenerated,
     WorkflowName = split(ResourceId, '/')[8],
     RunId = "",
     FailureType = "连接中断",
     Status = ActivityStatus,
     ErrorMessage = SubStatusMessage,
     ActionName = "",
     TriggerType = "连接健康检查")
// 过滤近24小时的故障(可按需调整)
| where TimeGenerated > ago(24h)
// 去重并排序
| distinct *
| sort by TimeGenerated desc

2. 查询说明

  • 覆盖所有触发类型的逻辑应用:手动、自动、Sentinel自动化规则触发
  • 明确区分故障层级:整体运行故障、单个动作故障、连接中断
  • 保留原有Sentinel关联场景的兼容性,同时补充遗漏的普通逻辑应用故障

二、优化Logic App工作流

1. 切换为实时触发模式

放弃定时轮询查询的方式,改用Azure Monitor日志警报触发Logic App:

  1. 在Log Analytics工作区中,基于上述KQL查询创建日志警报,设置阈值为「返回结果数>0」
  2. 将警报的动作组配置为调用目标Logic App,实现故障发生时的实时通知

2. 增强通知实用性

  • 在邮件HTML表格中添加故障排查链接:将RunId拼接为逻辑应用运行详情页的URL(格式:https://portal.azure.com/#view/Microsoft_Azure_LogicApps/WorkflowRunDetailsBlade/~/overview/workflowName/{WorkflowName}/runId/{RunId}),点击即可直接跳转排查
  • 补充关键字段:明确标注故障类型、触发方式、错误详情,帮助快速定位问题

3. 避免重复通知

添加去重逻辑:

  • 使用Azure存储表或SQL数据库记录已通知的故障标识(比如RunId+ActionName组合)
  • Logic App处理警报时,先查询存储记录,仅对未通知过的故障发送邮件

三、确保日志采集完整性

  1. 为所有逻辑应用开启诊断设置,将WorkflowRuntime和WorkflowAction类别日志发送至Log Analytics工作区
  2. 为逻辑应用关联的连接资源开启诊断日志,确保连接中断事件能被Azure Activity日志捕获

内容的提问来源于stack exchange,提问作者HarriS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:37:33