В рамках решения на основе микросервисов, которое мы создаем, у нас есть ряд функций 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, но очевидно, что фактическая телеметрия для них очень ограничена, она не содержит информации о пути или многого другого.