gpt4 book ai didi

azure-data-factory-2 - 对长期运行的 Azure 数据工厂管道发出警报的方法

转载 作者:行者123 更新时间:2023-12-03 23:10:05 32 4
gpt4 key购买 nike

我有一些数据工厂管道,在将数据从 blob 复制到 SQL 时,它们有时可能会运行超过 2 小时。时间段是可变的,但我希望在任何管道运行超过 2 小时时收到通知/警报。

这样做的可能方法是什么?

到目前为止我尝试过的:

  • 探索了我可以放置警报规则的 adf 指标。但似乎没有人谈论主动运行的持续时间。
  • 我希望获得我们在 adf.azure.com 的监视器选项卡上看到的 Pipeline 的持续时间值,并使用它来发出某种警报。
  • 我也在想,如果我可以获得管道启动时间,那么也许我可以从当前时间计算总运行时间,并在此之上放置一些警报。

  • enter image description here

    最佳答案

    我们做这样的事情来跟踪正在运行的管道和管理执行并发。我发现 Logic Apps 和 Azure Functions 是创建此类解决方案的绝佳工具。以下是我们如何处理此问题的粗略概述:

  • 一组 Azure 函数 (AF),利用
    Microsoft.Azure.Management.DataFactory SDK .相关代码在这篇文章的底部。
  • SQL Server 表中的管道执行日志。该表包括 PipelineId
    和状态,以及一些其他信息。每当您创建管道时,您都需要 INSERT 到此表。我们使用一个单独的逻辑应用程序调用 AF 来使用下面代码中的“RunPipelineAsync”方法执行管道,捕获新的 PipelineId (RunId),并将其发送到存储过程以记录 PipelineId。
  • 在重复触发器上运行的逻辑应用程序(每 3 分钟)
    a) 调用一个存储过程来轮询表(上面的#2)并返回所有状态为“InProgress”的管道;
    b) 对返回的列表进行 foreach 并调用 AF(上面的#1),使用下面代码中的“GetPipelineInfoAsync”方法检查管道的当前状态;

    c) 调用另一个存储过程来更新表中的状态。

  • 您可以执行与此类似的操作,并使用“DurationInMS”根据 status =“InProgress”和总运行时间 > {desired alert threshold} 生成适当的操作。

    这是我使用的 DataFactoryHelper 类:
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Rest;
    using Microsoft.Azure.Management.ResourceManager;
    using Microsoft.Azure.Management.DataFactory;
    using System.Collections.Generic;
    using System.Threading.Tasks;

    namespace AzureUtilities.DataFactory
    {
    public class DataFactoryHelper
    {
    private ClientCredential Credentials { get; set; }
    private string KeyVaultUrl { get; set; }
    private string TenantId { get; set; }
    private string SubscriptionId { get; set; }

    private DataFactoryManagementClient _client = null;
    private DataFactoryManagementClient Client
    {
    get {
    if (_client == null)
    {
    var context = new AuthenticationContext("https://login.windows.net/" + TenantId);
    AuthenticationResult result = context.AcquireTokenAsync("https://management.azure.com/", Credentials).Result;
    ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
    _client = new DataFactoryManagementClient(cred) { SubscriptionId = SubscriptionId };
    }

    return _client;
    }
    }

    public DataFactoryHelper(string servicePrincipalId, string servicePrincipalKey, string tenantId, string subscriptionId)
    {
    Credentials = new ClientCredential(servicePrincipalId, servicePrincipalKey);
    TenantId = tenantId;
    SubscriptionId = subscriptionId;
    }

    public async Task<string> RunPipelineAsync(string resourceGroupName,
    string dataFactoryName,
    string pipelineName,
    Dictionary<string, object> parameters = null,
    Dictionary<string, List<string>> customHeaders = null)
    {
    var runResponse = await Client.Pipelines.CreateRunWithHttpMessagesAsync(resourceGroupName, dataFactoryName, pipelineName, parameters: parameters , customHeaders: customHeaders);
    return runResponse.Body.RunId;
    }

    public async Task<object> GetPipelineInfoAsync(string resourceGroup, string dataFactory, string runId)
    {
    var info = await Client.PipelineRuns.GetAsync(resourceGroup, dataFactory, runId);
    return new
    {
    RunId = info.RunId,
    PipelineName = info.PipelineName,
    InvokedBy = info.InvokedBy.Name,
    LastUpdated = info.LastUpdated,
    RunStart = info.RunStart,
    RunEnd = info.RunEnd,
    DurationInMs = info.DurationInMs,
    Status = info.Status,
    Message = info.Message
    };
    }
    }
    }

    关于azure-data-factory-2 - 对长期运行的 Azure 数据工厂管道发出警报的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59085000/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com