Информация о приложениях в облачной службе Azure - высокая загрузка ЦП - PullRequest
0 голосов
/ 10 октября 2018

Я добавил 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 включен, я вижу всплески загрузки процессора .См. Изображение ниже из представления метрик облачной службы: enter image description here

Пакеты / версии 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>
...