如何为失败的耐用功能编排设置Azure警报?

时间:2019-12-05 15:19:26

标签: azure-functions azure-monitoring azure-durable-functions azure-alerts

当持久性业务流程链中的活动功能发生未知异常时,我想通过电子邮件警报得到通知。问题在于,当“活动功能”中引发异常时,Application Insights中记录的错误显示状态代码为零。在Azure警报中,没有警报配置会查找日志消息状态代码为零,仅1xx,2xx,4xx等。无论我在代码上尝试了什么,我都无法获得返回a的函数。 5xx错误代码中的4xx。

如何在Azure Monitor Alert中进行设置以捕获失败的业务流程?引发异常时,有没有办法强制非零状态代码?

背景信息

如以下屏幕快照所示,用于持久功能的Azure Monitor显示失败,这是我所期望的...

enter image description here

但是,我无法弄清楚如何设置警报来检测此故障。在Application Insights中找到异常,导致失败的响应代码为零...

enter image description here

转到Azure Monitor Alerts,在设置新警报以检测此状况时,没有状态码为零的警报状况(这是有道理的,但对我没有帮助)。 ..

enter image description here

这是Activity Function的外壳,有意引发异常以帮助我设置警报并知道其正在运行...

[FunctionName("SearchProductIndexFunctionActivity")]
public static async Task Run(
    [ActivityTrigger]string input,
    ILogger logger,
    ExecutionContext context)
{
    logger.LogInformation("Started SearchProductIndexFunctionActivity...");

    throw new ArgumentException("Oops...");

    logger.LogInformation("Finished SearchProductIndexFunctionActivity successfully.");
}

这是调用活动功能的协调器功能。如果未捕获并重新抛出所有异常,协调器功能将显示“成功”状态,这无济于事……我想知道某些失败。但是,此异常导致的响应状态代码零不会帮助设置警报。有关如何解决此问题的任何建议?

[FunctionName("SearchOrchestration")]
public static async Task Run(
    [OrchestrationTrigger]DurableOrchestrationContext orchestrationContext,
    ExecutionContext context,
    ILogger logger)
{
    try
    {
        await orchestrationContext.CallActivityAsync(PART_INDEX_UPDATE_ACTIVITY_NAME, null);

        await orchestrationContext.CallActivityAsync(PRODUCT_INDEX_UPDATE_ACTIVITY_NAME, null);
    }
    catch (Exception ex)
    {
        logger.LogError(ex, $"Search index orchestration failed.");
        throw;
    }
}

1 个答案:

答案 0 :(得分:0)

由于您正在使用应用程序见解,因此可以考虑根据此doc使用创建自定义日志搜索警报

对于“资源”,您应该选择用于天蓝色函数的应用程序见解。

对于“条件”,选择“自定义日志搜索”。然后,在“搜索查询”文本框中,可以编写查询。对于您而言,该错误应该出现在应用程序见解的异常表中,因此查询看起来像exceptions | your_query_for_error


如果您不熟悉应用程序见解中的类似于sql的查询,则可以参考此article。您可以先在应用程序见解中编写查询,以确保查询可以按预期工作。应用程序见解中查询的屏幕截图:

enter image description here