如何以编程方式从Azure Synapse管道各次运行中检索错误消息
编程式获取Azure Synapse管道运行错误消息的可行方案
优先方案:无需修改现有管道
1. 通过Azure Monitor日志查询+API获取
利用Azure Monitor对Synapse管道运行的日志采集能力,编写Kusto查询过滤失败运行的错误信息,再通过API编程调用查询结果,完全不需要改动现有管道。
关键步骤:
- 确保Synapse工作区已启用诊断设置,将
SynapsePipelineRuns日志发送到Azure Monitor Log Analytics工作区 - 编写Kusto查询定位失败运行:
SynapsePipelineRuns | where Status == "Failed" // 过滤每日触发的运行,可根据实际触发时间调整范围 | where StartTime > ago(24h) // 可选:批量指定要监控的管道,或去掉该行监控所有管道 | where PipelineName in ("DailyETLPipeline", "DataSyncPipeline") | project PipelineName, RunId, ErrorMessage = tostring(Properties.Error.Message), StartTime, EndTime
- 编程调用Azure Monitor Logs API执行该查询,获取结构化的错误数据。可使用Azure SDK(如.NET的
Azure.Monitor.Query、Python的azure-monitor-query)简化认证和调用流程,用服务主体身份进行批量查询。
2. 直接调用Synapse管道运行历史API
通过Azure Resource Manager的Synapse管道运行API,遍历所有管道的运行记录,过滤失败实例并提取错误信息。
示例API请求(REST):
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}/pipelines/{pipelineName}/runs?api-version=2020-12-01&$filter=Status eq 'Failed' and StartTime gt '2024-05-20T00:00:00Z'
返回结果中,每个失败运行的properties.error字段包含完整错误消息。可通过Azure SDK(如Azure.ResourceManager.Synapse)批量遍历工作区内的所有管道,自动执行查询,适合大规模管道场景。
3. 用Azure Logic Apps自动化采集
创建定时触发的Logic Apps流程,无需修改管道即可自动完成:
- 定时触发(每日对应管道触发后)
- 调用Synapse管理API获取当日失败的管道运行
- 提取错误消息后,发送到下游系统(如存储队列、SQL表、自定义API)
- 可添加分支逻辑,根据错误类型触发不同的下游处理
可选方案:修改管道增强错误传递
如果允许调整现有管道,可添加失败分支的错误转发逻辑,直接将错误消息推送到下游:
- 在管道的失败分支中添加
Web活动或Azure Function活动 - 使用表达式
@pipeline().Error.Message获取当前管道的错误详情,可结合@pipeline().PipelineName、@pipeline().RunId传递上下文信息 - 将错误数据发送到下游处理系统(如事件网格、服务总线、自定义业务API)
- 该方案适合需要实时触发下游处理的场景,错误产生时立即推送数据
内容的提问来源于stack exchange,提问作者John Scott Stensland
相关产品推荐
相关产品推荐

