#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,
Код, используемый в 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();
Пример запроса с количеством элементов
Комментарии:
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 .