Azure Application Insights — не записывает все запросы в ситуациях с интенсивным трафиком

#azure #azure-service-fabric #azure-application-insights #azure-monitoring #telemetry

#azure #azure-service-fabric #azure-application-insights #azure-мониторинг #телеметрия

Вопрос:

Кажется, что «Azure Application Insights» не записывает все запросы в среде с высоким трафиком.

Например, когда мы тестируем приложение .Net Core2.1 Web API, которое развернуто в «Azure Service Fabric» с 10 000 запросами в течение 30 минут, мы можем получить подробную информацию обо всех запросах из «Azure Application Insights» через KQL, используя отметку даты и времени в качестве фильтра, без проблем.

Когда мы увеличиваем нагрузку до 100 000 запросов в течение 30 минут, только около 5-10% запросов записываются в «Azure Application Insights».

Почему «Azure Application Insights» пропускает прием / запись в среде с высоким трафиком, которая обслуживает примерно 60 запросов в секунду?

Требуется дополнительная настройка? (или) кода ниже одной строки для ввода сведений о запросах, обслуживаемых службой Azure Service Fabric, недостаточно? пожалуйста, уточните

Используемый SDK,

Используемый SDK

Код, используемый в Azure Service Fabric для приема

   return new WebHostBuilder().UseHttpSys()
                                .ConfigureServices(
                                    services => services
                                        .AddSingleton<StatelessServiceContext>(serviceContext)
                                        .AddSingleton<ServiceFabricAppContext>(new ServiceFabricAppContext(){
                                                NodeName = serviceContext.NodeContext.NodeName,
                                                ServiceHostIP=serviceContext.NodeContext.IPAddressOrFQDN,
                                                ServiceHostPort=FabricRuntime.GetActivationContext().GetEndpoints()[0].Port
                                        } )
                                            .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) // Azure Service Fabric Telemetry Initializer
                                .UseContentRoot(Directory.GetCurrentDirectory())
                                   .UseApplicationInsights()
                                .UseStartup<Startup>()
                                .UseEnvironment(environment)
                                .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                                .UseUrls(url)
                                .Build();
  

Пример запроса с количеством элементов

введите описание изображения здесь

Выборка не включена с портала Azure
введите описание изображения здесь

Комментарии:

1. Это может быть связано с выборкой, см. learn.microsoft.com/en-us/azure/azure-monitor/app/sampling

2. Но я не упомянул / не настроил выборку в своем приложении. Все, что я сделал, это включил единый и единственный SDK (Microsoft. ApplicationInsights. ServiceFabric.Native v2.1.1), затем одна строка кода (. AddSingleton((ServiceProvider) => FabricTelemetryInitializerExtension . CreateFabricTelemetryInitializer(ServiceContext)). Здесь происходит выборка? является ли выборка поведением по умолчанию? Также выборка не вступила в силу, когда я делаю 10 000 запросов в течение 30 минут. Только когда я увеличиваю количество запросов до 100 000 в течение 30 минут, тогда записывайте пропущенные события в Azure Application Insights

3. Из документации: адаптивная выборка включена по умолчанию во всех последних версиях Application Insights ASP.NET и ASP.NET Наборы для разработки основного программного обеспечения (SDK). Я думаю, то же самое относится и к service fabric. На странице вы можете найти информацию о том, как определить, используется ли выборка, и как отключить / изменить ее.

4. 10 000 запросов за 30 секунд — это около 5 rps. это, вероятно, попадает в диапазон до начала выборки.

5. Чтобы проверить, активна ли выборка — пожалуйста, проверьте свойство «ItemCount» в Kusto. Если оно больше 1, это означает, что выполняется выборка данных.

Ответ №1:

Вы можете отключить адаптивную выборку из кода. Обратите внимание, что вместо использования устаревшего .UseApplicationInsights() (удалено ниже) я использую .AddApplicationInsightsTelemetry ниже.

   return new WebHostBuilder().UseHttpSys()
                                .ConfigureServices(
                                    services => services
                                        .AddSingleton<StatelessServiceContext>(serviceContext)
                                        .AddSingleton<ServiceFabricAppContext>(new ServiceFabricAppContext(){
                                                NodeName = serviceContext.NodeContext.NodeName,
                                                ServiceHostIP=serviceContext.NodeContext.IPAddressOrFQDN,
                                                ServiceHostPort=FabricRuntime.GetActivationContext().GetEndpoints()[0].Port
                                        } )
                                       .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)) // Azure Service Fabric Telemetry Initializer
                                       .AddApplicationInsightsTelemetry(o => 
                                            {
                                                o.EnableAdaptiveSampling = false; // disabling adaptive sampling
                                            }))
                                .UseContentRoot(Directory.GetCurrentDirectory())
                                .UseStartup<Startup>()
                                .UseEnvironment(environment)
                                .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                                .UseUrls(url)
                                .Build();
  

ПРИМЕЧАНИЕ: мне пришлось добавить nuget Microsoft.ApplicationInsights.AspNetCore

ВНИМАНИЕ: отключение выборки может привести к ограничению и слишком большому сетевому трафику в случае сценария с очень большим объемом. Поэтому вы можете использовать выборку с фиксированной скоростью вместо адаптивной. Обратитесь к выборке в Application Insights .