Отслеживание исходящих запросов в Функциях Azure

В рамках решения на основе микросервисов, которое мы создаем, у нас есть ряд функций Azure, находящихся в одном приложении-функции Azure. Функции организуют многочисленные запросы к различным API, выполнение некоторых из которых занимает много времени. Мы добавили Application Insights в функции, чтобы обеспечить некоторое отслеживание сделанных запросов, но отслеживание зависимостей пока не работает в Функциях Azure. Можно вручную отслеживать зависимости, но это включает в себя вставку некоторого кода отслеживания вокруг каждого вызова зависимости, однако мы хотим избежать ручного отслеживания зависимостей для каждого вызова.

Одним из решений, о котором я подумал, было бы создание средства отслеживания запросов, которое отслеживает все исходящие веб-запросы от functions. Затем в средстве отслеживания запросов я мог отслеживать запросы зависимостей, включая их время. Я хочу подключить средство отслеживания запросов к какому-то обработчику веб-трафика, к сожалению, мне не удалось найти много информации об этом. Много сообщений упомяните об использовании средства записи трассировки System.Net для этого, но, насколько я понимаю, для настройки требуется файл Web.config, а функции его не имеют.

Я видел несколько сообщений, в которых упоминалось о создании оболочки запроса и размещении ее в моих исходящих запросах, но, к сожалению, это не вариант, поскольку мы используем ряд пакетов, которые делают запросы внутри. Если у вас есть какие-либо идеи, которые могли бы заставить меня двигаться в правильном направлении, пожалуйста, дайте мне знать. Спасибо


Обновлять:

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

 public static async Task<T> TrackDependency<T>(this Task<T> task, string dependecyName, string callName, string operationId)
    {
        var telemtryClient = new TelemetryClient();
        var startTime = DateTime.UtcNow;
        var timer = System.Diagnostics.Stopwatch.StartNew();
        var success = true;
        T result = default(T);
        try
        {
            result = await task;
        }
        catch (Exception)
        {
            success = false;
        }
        finally
        {
            timer.Stop();
            var dependencyTelemetry = new DependencyTelemetry(dependecyName, callName, startTime, timer.Elapsed, success);
            dependencyTelemetry.Context.Operation.Id = operationId;
            telemtryClient.Track(dependencyTelemetry);
        }
        return result;
    }

Затем его можно использовать следующим образом:

client.Accounts.UpdateWithHttpMessagesAsync(accountId, account).TrackDependency("Accounts", "UpdateAccounts", requestContextProvider.CorrelationId);

Теперь я могу видеть зависимости отдельных запросов в Application Insights, но очевидно, что фактическая телеметрия для них очень ограничена, она не содержит информации о пути или многого другого.


person ObiEff    schedule 26.02.2018    source источник


Ответы (1)


Итак, когда вы говорите, что отслеживание зависимостей не работает в Функциях Azure, что именно вы имеете в виду? Вы уже добавили и настроили пакет SDK Application Insights для своей фактической функции? Готовый опыт мониторинга с помощью функций Azure не добавляет трассировку зависимостей автоматически, но если вы действительно добавите или настроите пакет SDK для Application Insights в своем проекте функции, он должен начать отслеживать все, что там происходит.

person Drew Marsh    schedule 26.02.2018
comment
Я имею в виду, что следовал найденному руководству по настройке Application Insights в функциях Azure. После его настройки я вижу прохождение телеметрии, но не вижу зависимостей. Я немного покопался и обнаружил, что это известная проблема, как упоминалось на github. Я добавил SDK в функцию и все необходимые зависимости. Я предполагаю, что вам нужно преобразовать AppInsights.Config в инициализацию на основе кода? Если речь идет о добавлении инициализаторов телеметрии и связанных с ними битов, это кажется довольно простым решением. - person ObiEff; 27.02.2018
comment
Я добавил отслеживание зависимостей через метод расширения, который я поместил в свой исходный пост, это дает мне немного информации о зависимостях, но его нужно размещать при каждом вызове, и я не думаю, что это хорошее решение, поскольку на самом деле он не дает мне много информации о запросе - person ObiEff; 28.02.2018