AppInsights по-разному отслеживает имя операции запроса при использовании SDK

Я использовал подключаемый модуль Azure AppInsights на нашем веб-сайте (вы просто включаете его в конфигурации службы приложений, код не требуется) и получал полное имя операции запроса, которое я использую для фильтрации и создания отчетов (я фильтрую по идентификатору маршрута , каждый идентификатор — это отдельный источник, мы используем его для отслеживания трафика), как на скриншоте ниже:

Название операции: GET /join/social

Скриншот с подробностями запроса и полным названием операции

Недавно мне пришлось добавить в запрос настраиваемые глобальные свойства, поэтому вместо этого я перешел на использование SDK, чтобы я мог вручную добавлять все, что мне нужно. Теперь приходит имя операции запросов, как на скриншоте ниже:

Название операции: GET CustomerCoCreation/Join [id]

Снимок экрана со сведениями о запросе с другим названием операции

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

Это мой TelemetryInitializer, довольно стандартный, просто добавляющий пользовательское свойство, которое мы хотели (URL-референт):

    public class RefererTelemetryInitializer : ITelemetryInitializer
    {
        private const string HeaderNameDefault = "Referer";

        private readonly IHttpContextAccessor _httpContextAccessor;

        public RefererTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
        {
            if (httpContextAccessor == null) throw new System.ArgumentNullException(nameof(httpContextAccessor));

            _httpContextAccessor = httpContextAccessor;
        }

        public void Initialize(ITelemetry telemetry)
        {
            var context = _httpContextAccessor.HttpContext;
            if (context == null)
                return;

            if (context.Request.Headers.TryGetValue(HeaderNameDefault, out var value))
            {
                telemetry.Context.GlobalProperties["Referer"] = value.ToString();
            }
        }
    }

и вот как я инициализирую его в ConfigureServices моего приложения dotnet Core:

    services.AddApplicationInsightsTelemetry();
    services.AddSingleton<ITelemetryInitializer, RefererTelemetryInitializer>();

Есть ли способ установить или настроить мой инициализатор, чтобы он имитировал то, что было раньше?

заранее спасибо!


person BruceBarrera    schedule 16.02.2021    source источник


Ответы (1)


На мой взгляд, вы можете добавить пользовательские свойства, как показано ниже, может ли это достичь вашей цели?

public void Initialize(ITelemetry telemetry)
        {
            telemetry.Context.GlobalProperties["RequestId"] = "customId";
        }
person tiny-wa    schedule 18.02.2021
comment
Может ли это помочь вам, или есть какие-либо другие идеи по этому поводу? - person tiny-wa; 22.02.2021