Как настроить оповещение Azure при сбое согласования устойчивых функций?

Я хотел бы получать уведомление по электронной почте, когда возникает неизвестное исключение в функции активности, которая является частью устойчивой цепочки оркестровки. Проблема заключается в том, что, когда в функции действия генерируется исключение, регистрируемая ошибка в Application Insights показывает нулевой код состояния. В предупреждениях Azure нет конфигурации предупреждений, которая будет искать код состояния сообщения журнала, равный нулю, только 1xx, 2xx, 4xx и т. Д. Независимо от того, что я пробовал с кодом, я не могу заставить функции возвращать Код ошибки 4xx из 5xx.

Как я могу настроить в Azure Monitor Alert обнаружение сбоя оркестровки? Есть ли способ принудительно установить ненулевой код состояния при возникновении исключения?

Справочная информация

Как показано на следующем снимке экрана, Azure Monitor для надежной функции показывает сбой, чего я и ожидал...

Однако я не могу понять, как настроить предупреждение для обнаружения этого сбоя. При обнаружении исключения в Application Insights код ответа, вызвавший сбой, равен нулю...

Переходя к оповещениям Azure Monitor, при настройке нового оповещения для обнаружения этого условия не существует такой вещи, как условие оповещения для кода состояния, равного нулю (что имеет смысл, но мне не помогает)...

Вот оболочка функции активности, которая намеренно генерирует исключение, чтобы помочь мне настроить предупреждение и узнать, что оно работает...

[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.");
}

А вот функция Orchestrator, которая вызывает функцию Activity. Если все исключения не перехватываются и не генерируются повторно, функция Orchestrator показывает статус "успешный", который бесполезен... Я хочу знать, что что-то не удалось. Однако нулевой код состояния ответа, возникающий в результате этого исключения, не помогает настроить предупреждение. Есть предложения, как это исправить?

[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 ответ

Решение

Поскольку вы используете Application Insights, вы можете рассмотреть возможность создания настраиваемого оповещения о поиске в журнале в соответствии с этим документом.

Для "Ресурс" следует выбрать аналитические данные приложения, используемые для функции Azure.

Для "Условия" выберите "Пользовательский поиск по журналу". Затем в текстовом поле "Поисковый запрос" вы можете написать запрос. В вашем случае ошибка должна быть в таблице исключений аналитики приложения, поэтому запрос выглядит так:exceptions | your_query_for_error.


Если вы не знакомы с запросом, подобным sql, в аналитике приложений, вы можете обратиться к этой статье. И вы можете сначала написать свой запрос в Application Insights, чтобы убедиться, что он работает должным образом. Снимок экрана запроса в аналитике приложений:

Другие вопросы по тегам