Application Insights: запросы выбираются, несмотря на отсутствие выборки при приеме внутрь и независимо от того, что настроено в ApplicationInsights.config - PullRequest
1 голос
/ 13 мая 2019

Я работаю над проектом ASP.Net (не Core) WebAPI.Для этого я хочу иметь возможность выполнять тестирование производительности, собирая телеметрию для запросов и наблюдая, сколько времени занимает каждый тип запроса.

При анализе результатов я заметил, что число запросов, зарегистрированных в Application Insights, составляет всего лишьдоля количества запросов WebAPI, примерно 1/10 или даже меньше.Я хочу собрать все запросы, чтобы у меня был более приемлемый размер выборки для анализа производительности, но я не знаю, что вызывает эту выборку.

Я ознакомился с этой документацией: https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling

  • Я посмотрел на частоту дискретизации при приеме внутрь в Azure.Это установлено на 100%.
  • Я попытался установить фиксированную частоту выборки в ApplicationInsights.config.
  • Я попытался установить адаптивную выборку на 1000 в секунду (намного больше, чем количество запросовчто мы делаем) и выборка между 90% и 100%.
  • Я пытался вообще не определять какие-либо процессоры телеметрии в ApplicationInsights.config.
  • Я проверял наш код C # для любых случаев "Выборка ", чтобы увидеть, была ли определена выборка в коде: нет результатов.

Я видел точно такое же поведение как на сервере, на котором мы установили наше приложение, так и при запуске приложения из Visual Studio.на моей машине развития.Обе установки отправляют телеметрию в разные экземпляры Application Insights, каждый из которых находится в своей учетной записи Azure.

Я ознакомился с этой документацией в Microsoft, чтобы проверить наличие выборки: https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling#how-do-i-know-whether-sampling-is-in-operation

let startDateTime = todatetime("2019-03-25 14:00+1:00");
let endDateTime = todatetime("2019-03-25 14:15+1:00");
requests
| where timestamp between(startDateTime..endDateTime)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Это дает проценты от 80% до 100%.Однако:

let startDateTime = todatetime("2019-03-25 14:00+1:00");
let endDateTime = todatetime("2019-03-25 14:15+1:00");
requests
| where timestamp between(startDateTime..endDateTime)

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

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

Редактировать: добавлено содержимое ApplicationInsights.config.В основном это просто материал, который генерирует Visual Studio:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<InstrumentationKey>censored</InstrumentationKey>
  <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
  <TelemetryProcessors>
    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
    <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
      <MaxTelemetryItemsPerSecond>500</MaxTelemetryItemsPerSecond>
    </Add>
  </TelemetryProcessors>

<TelemetryInitializers>
  <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"/>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector"/>
</TelemetryInitializers>

<TelemetryModules>
  <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 Type="Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule, Microsoft.AI.Web">
    <Handlers>
      <Add>System.Web.Handlers.TransferRequestHandler</Add>
      <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.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector"></Add>
  <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector"/>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector"/>
</TelemetryModules>

</ApplicationInsights>
...