从 Azure 函数访问管道 activity 状态

Accessing pipeline activity status from an Azure Function

我有一个触发管道的 Azure 函数,我能够轮询管道状态以检查它何时完成使用:Pipeline.Properties.RuntimeInfo.PipelineState

我的管道使用多个并行复制活动,我希望能够访问这些活动的状态以防它们失败。 Azure 文档描述了如何访问管道活动,但您只能获取名称和描述等静态属性,而不能获取 Status 等动态属性(就像您可以通过其 RuntimeInfo 属性 访问管道)。

为了完整起见,我使用以下方法访问了 activity 列表:

IList<Microsoft.Azure.Management.DataFactories.Models.Activity> activityList = plHandle.Pipeline.Properties.Activities;

是否可以通过编程方式检查个人 activity 状态?

当然有可能。

我使用 Azure 模块中的 ADF PowerShell cmdlet 来监控我们的数据工厂。

也许可以使用 Get-AzureRmDataFactoryActivityWindow 命令执行类似下面的操作。

例如:

$ActivityWindows = Get-AzureRmDataFactoryActivityWindow `
    -DataFactoryName $ADFName.DataFactoryName `
    -ResourceGroupName $ResourceGroup `
    | ? {$_.WindowStart -ge $Now} `
    | SELECT ActivityName, ActivityType, WindowState, RunStart, InputDatasets, OutputDatasets `
    | Sort-Object ActivityName

这会为您提供 activity 级别的详细信息,包括状态。存在:

  • 就绪
  • 进行中
  • 正在等待
  • 失败

...我列出它们是因为它们与您在门户网站刀片中看到的略有不同。

如果特定活动有多个输入和输出,则数据集也是数组。

此处提供更多 ADF cmdlet:https://docs.microsoft.com/en-gb/powershell/module/azurerm.datafactories/?view=azurermps-3.8.0

希望对您有所帮助

我已经通过访问管道的 DataSliceRuns(即活动)解决了这个问题,如下所示:

var datasets = client.Datasets.ListAsync(<resourceGroupName>, <DataFactoryName>).Result;

    foreach (var dataset in datasets.Datasets)
    {
        // Check the activity statuses for the pipelines activities.
        var datasliceRunlistResponse = client.DataSliceRuns.List(<resourceGroupName>, <dataFactoryName>,<DataSetName>, new DataSliceRunListParameters()
                                                                        {
                                                                            DataSliceStartTime = PipelineStartTime.ConvertToISO8601DateTimeString()
                                                                        });

        foreach (DataSliceRun run in datasliceRunlistResponse.DataSliceRuns)
        {
            // Do stuff...
        }
    }