Как расширить отслеживание зависимостей для исходящих http-запросов в Application Insights - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть базовый API .NET, который выполняет HTTP-соединения с другим API.Я могу визуализировать исходящий HTTP-запрос в Application Insights, в разделе Типы событий зависимости, но он содержит только основную информацию.Я ищу, как добавить дополнительную информацию о исходящем HTTP-вызове (например, HTTP-заголовки).

Я изучил https://docs.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics#trackdependency, но не нашел конкретного способаделать это.

1 Ответ

0 голосов
/ 28 декабря 2018

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

А для основного веб-проекта .net вы можете обратиться к этому link .

Я пишу демо, как показано ниже:

1. Создайте собственный класс ITelemetryInitializer для сбора любых данных о зависимостях:

    public class MyTelemetryInitializer: ITelemetryInitializer
    {
        IHttpContextAccessor httpContextAccessor;

        public MyTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
        {
            this.httpContextAccessor = httpContextAccessor;
        }

        public void Initialize(ITelemetry telemetry)
        {
            //only add custom property to dependency type, otherwise just return.
            var dependencyTelemetry = telemetry as DependencyTelemetry;
            if (dependencyTelemetry == null) return;

            if (!dependencyTelemetry.Context.Properties.ContainsKey("custom_dependency_headers_1"))
            {
                //the comment out code use to check the fields in Headers if you don't know
                //var s = httpContextAccessor.HttpContext.Request.Headers;
                //foreach (var s2 in s)
                //{
                //   var a1 = s2.Key;
                //    var a2 = s2.Value;
                //}

                dependencyTelemetry.Context.Properties["custom_dependency_headers_1"] = httpContextAccessor.HttpContext.Request.Headers["Connection"].ToString();
            }
        }

    }

2. Затем в методе Startup.cs -> ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
//other code

//add this line of code here
services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

3. Результат теста, проверьте, добавлено ли пользовательское свойство на портал Azure -> Пользовательские свойства:

enter image description here

...