Я добавил Application Insights в существующее приложение облачных служб Azure, состоящее из 1 WebRole и 1 Worker Role.Я сделал это, следуя инструкциям из документации здесь , которая в основном устанавливает пакеты NuGet и устанавливает InstrumentationKey
вручную.
Я ничего не настраивал и не изменял в файле ApplicationInsights.config
, который был сгенерирован автоматически при установке SDK.Здесь определяются все коллекторы и инициализаторы.Я не настраиваю что-либо еще, касающееся App Insights, в своем коде на c #.
Проблема:
Когда мы внедрили изменения в производство, мы начали замечать некоторые действительновысокое время отклика и высокая загрузка / всплески ЦП, которых определенно не было раньше.
Что мы сделали, чтобы сузить проблему:
Мы создали небольшойстресс-тест в среде разработчика.Мы развернули предыдущую версию API без включенной Application Insights и выполнили тесты.Хотя процессор был под высокой нагрузкой (конечно, из-за стресс-тестов), время отклика составляло в среднем 1 секунду.
Затем мы сделали то же самое, но с включенной версией кода, содержащей Application Insight.Процессор был высоким, то же самое, но время отклика было гораздо медленнее, вплоть до 5 с.
Мы более или менее потерялись в том, что могло бы быть здесь виновником.Мы также установили «Агент Application Insight» или Profiler, как описано в в этом выпуске в облачной службе, чтобы можно было видеть запросы SQL, выполняемые в зависимостях.Мы думали, что это будет причиной ... но даже отключение не повлияло на производительность.Итак, мы уже отказались от Профилировщика.
Мы только начали с App Insights, так что довольно сложно догадаться, что не так.Лучше всего, если в ApplicationInsights.config
нам, возможно, понадобится удалить некоторые модули или прекратить сбор некоторых данных, но на данный момент это просто предположение о работе.
Что-то связанное, что может / не может иметь отношение
Вместе с App Insights я также представил Serilog
и Serilog.Sinks.ApplicationInsights
, которые в основном просто отправляют мои журналы в AppInsights в виде трассировок.Но я действительно не думаю, что это как-то связано с этим.
Редактировать: Добавление подробностей и версий пакетов
Роль в Интернете: ASP.NET Web API 2 API, который в основном выполняет вызовы к базе данных SQL Azure
NET Framework: 4.6.2
Размещено на: AzureОблачные службы osFamily = 5
Размер виртуальной машины : два экземпляра A1 v2 для веб-роли.
Запросы: Версия без AI имеетсреднее время отклика 1 сек.Версия с AI имеет средний отклик 3,5.Некоторые запросы даже занимают 5 секунд.
В основном, когда AI включен, я вижу всплески загрузки процессора .См. Изображение ниже из представления метрик облачной службы:
Пакеты / версии AI:
<package id="Microsoft.ApplicationInsights" version="2.7.2" targetFramework="net462" />
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net462" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.7.2" targetFramework="net462" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.7.2" targetFramework="net462" />
<package id="Microsoft.ApplicationInsights.Web" version="2.7.2" targetFramework="net462" />
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.7.2" targetFramework="net462" />
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.7.2" targetFramework="net462" />
<package id="Serilog" version="2.7.1" targetFramework="net462" />
<package id="Serilog.Sinks.ApplicationInsights" version="2.6.0" targetFramework="net462" />
Вот содержимоефайл ApplicationInsights.config
в проекте WebApi:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<TelemetryInitializers>
<Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureWebAppRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.BuildInfoConfigComponentVersionTelemetryInitializer, Microsoft.AI.WindowsServer"/>
<Add Type="Microsoft.ApplicationInsights.Web.WebTestTelemetryInitializer, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.SyntheticUserAgentTelemetryInitializer, Microsoft.AI.Web">
<Filters>search|spider|crawl|Bot|Monitor|AlwaysOn</Filters>
</Add>
<Add Type="Microsoft.ApplicationInsights.Web.ClientIpHeaderTelemetryInitializer, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.OperationNameTelemetryInitializer, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.UserTelemetryInitializer, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.AuthenticatedUserIdTelemetryInitializer, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.AccountIdTelemetryInitializer, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.SessionTelemetryInitializer, Microsoft.AI.Web"/>
</TelemetryInitializers>
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
<ExcludeComponentCorrelationHttpHeadersOnDomains>
<Add>core.windows.net</Add>
<Add>core.chinacloudapi.cn</Add>
<Add>core.cloudapi.de</Add>
<Add>core.usgovcloudapi.net</Add>
<Add>localhost</Add>
<Add>127.0.0.1</Add>
</ExcludeComponentCorrelationHttpHeadersOnDomains>
<IncludeDiagnosticSourceActivities>
<Add>Microsoft.Azure.EventHubs</Add>
<Add>Microsoft.Azure.ServiceBus</Add>
</IncludeDiagnosticSourceActivities>
</Add>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
</Add>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.AppServicesHeartbeatTelemetryModule, Microsoft.AI.WindowsServer"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureInstanceMetadataTelemetryModule, Microsoft.AI.WindowsServer">
</Add>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.AI.WindowsServer"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModule, Microsoft.AI.WindowsServer"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule, Microsoft.AI.WindowsServer">
</Add>
<Add Type="Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule, Microsoft.AI.Web">
<Handlers>
<Add>Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.RequestDataHttpHandler</Add>
<Add>System.Web.StaticFileHandler</Add>
<Add>System.Web.Handlers.AssemblyResourceLoader</Add>
<Add>System.Web.Optimization.BundleHandler</Add>
<Add>System.Web.Script.Services.ScriptHandlerFactory</Add>
<Add>System.Web.Handlers.TraceHandler</Add>
<Add>System.Web.Services.Discovery.DiscoveryRequestHandler</Add>
<Add>System.Web.HttpDebugHandler</Add>
</Handlers>
</Add>
<Add Type="Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule, Microsoft.AI.Web"/>
<Add Type="Microsoft.ApplicationInsights.Web.AspNetDiagnosticTelemetryModule, Microsoft.AI.Web"/>
</TelemetryModules>
<ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights"/>
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
<Add Type="Microsoft.ApplicationInsights.Extensibility.AutocollectedMetricsExtractor, Microsoft.ApplicationInsights"/>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<ExcludedTypes>Event</ExcludedTypes>
</Add>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<IncludedTypes>Event</IncludedTypes>
</Add>
</TelemetryProcessors>
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
</ApplicationInsights>