Выборка в Application Insights

Выборка — это функция Azure Application Insights, которую мы рекомендуем использовать для сокращения трафика телеметрии, а также затрат на данные и хранение. Эта функция также поддерживает статистически правильный анализ данных приложения. Кроме того, выборка помогает избежать регулирования телеметрии Application Insights. Фильтр выборки выбирает связанные элементы, позволяя переходить между ними во время диагностических исследований.

Если счетчики метрик представлены на портале, они будут повторно нормализованы с учетом выборки. Это сведет к минимуму влияние на статистику.

Краткая сводка

  • Существует три разных типа выборки: адаптивная, с фиксированной частотой и при приеме.
  • Адаптивная выборка включена по умолчанию во всех последних версиях Application Insights ASP.NET и пакетах средств разработки (SDK) для ASP.NET Core. Она также используется в Функциях Azure.
  • Выборка с фиксированной частотой доступна в последних версиях пакетов SDK для Application Insights для ASP.NET, ASP.NET Core, Java (агента и пакета SDK) и Python.
  • В Java переопределения выборки доступны, и они полезны, если необходимо применить различные тарифы выборки к выбранным зависимостям, запросам, проверкам работоспособности. Используйте переопределения выборки для настройки некоторых бесшумных зависимостей, в то время как, например, все важные ошибки хранятся в 100%. Это форма фиксированной выборки, которая обеспечивает точный уровень контроля над данными телеметрии.
  • Выборка при приеме работает на конечной точке службы Application Insights. Он применяется только в том случае, если другие выборки не применяются. Если пакет SDK производит выборку данных телеметрии, выборка при приеме отключена.
  • Если вы регистрируете пользовательские события для веб-приложений и хотите, чтобы они сохранялись или удалялись одним набором, события должны иметь одно и то же значение OperationId.
  • При написании запросов аналитики необходимо учитывать выборку. В частности, вместо простого подсчета записей следует использовать функцию summarize sum(itemCount).
  • Некоторые типы данных телеметрии, включая метрики производительности и пользовательские метрики, всегда сохраняются независимо от того, включена ли выборка.

В следующей таблице вкратце описаны типы выборок, доступные для каждого пакета SDK и типа приложения.

Пакет SDK для Application Insights Поддерживается адаптивная выборка Поддерживается выборка с фиксированной частотой Поддерживается выборка при приеме
ASP.NET Да (включена по умолчанию) Да Только если не применяется ни одна другая выборка
ASP.NET Core Да (включена по умолчанию) Да Только если не применяется ни одна другая выборка
Функции Azure Да (включена по умолчанию) Нет Только если не применяется ни одна другая выборка
Java Нет Да Только если не применяется ни одна другая выборка
Node.JS Нет Да Только если не применяется ни одна другая выборка
Python Нет Да Только если не применяется ни одна другая выборка
Все остальные Нет Нет Да

Примечание

Сведения, приведенные на этой странице, преимущественно относятся к текущим версиям пакетов SDK для Application Insights. Сведения о более ранних версиях пакетов SDK см. в разделе ниже.

Типы выборки

Существует три различных метода выборки.

  • Адаптивная выборка автоматически корректирует объем данных телеметрии, отправляемых из пакета SDK в приложение ASP.NET или ASP.NET Core и из Функций Azure. Эта выборка используется по умолчанию для пакета SDK ASP.NET или ASP.NET Core. Адаптивная выборка сейчас доступна только в рамках серверной телеметрии ASP.NET и Функций Azure.

  • Выборка с фиксированной частотой уменьшает объем данных телеметрии, отправляемых с сервера ASP.NET, ASP.NET Core или Java и из браузеров пользователей. Частоту вы задаете сами. Благодаря тому, что клиент и сервер будут синхронизировать свои выборки, при поиске вы сможете перемещаться между связанными представлениями страниц и запросами.

  • Выборка при приеме выполняется на конечной точке службы Application Insights. отклоняет некоторые данные телеметрии, поступающие из приложения, с заданной скоростью выборки. Выборка не сокращает трафик телеметрии, отправляемый из вашего приложения, но помогает оставаться в пределах месячной квоты. Основное преимущество выборки при приеме заключается в том, что можно задать частоту выборки без повторного развертывания приложения. Выборка при приеме действует единообразно для всех серверов и клиентов, но она не применяется при выполнении любых других типов выборки.

Важно!

Если для типа телеметрии включен адаптивный способ выборки или способ выборки с фиксированной частотой, выборка при приеме для этой телеметрии отключается. Однако для типов телеметрии, исключенных из выборки на уровне пакета SDK, выборки при приеме по-прежнему буде применяться с частотой, установленной на портале.

Адаптивная выборка

Адаптивная выборка влияет на объем данных телеметрии, отправляемых в конечную точку службы Application Insights из приложения веб-сервера.

Совет

Адаптивная выборка включается по умолчанию при использовании пакета SDK для ASP.NET или пакета SDK для ASP.NET Core, а также для Функций Azure.

Том настраивается автоматически для работы с заданным максимальным объемом трафика, который контролируется с помощью параметра MaxTelemetryItemsPerSecond. Если приложение создает малый объем данных телеметрии, например при отладке или в период низкого потребления, обработчик выборки не удаляет элементы, пока объем данных не превышает MaxTelemetryItemsPerSecond. По мере увеличения объема данных телеметрии частота выборки корректируется, чтобы получить целевой том. Корректировка пересчитывается через регулярные интервалы времени в зависимости от скользящего среднего для скорости исходящей передачи.

Для получения целевого объема некоторые формируемые данные телеметрии игнорируются. Однако, как и в других типах выборки, алгоритм сохраняет связанные элементы телеметрии. Например, при проверке телеметрии в поиске это позволит найти запрос, связанный с определенным исключением.

Счетчики метрик, например частота запросов и частота исключений, корректируются с учетом частоты выборки, так что в обозревателе метрик отображаются приблизительно точные значения.

Настройка адаптивной выборки для приложений ASP.NET

Примечание

Этот раздел относится к приложениям ASP.NET, а не приложениям ASP.NET Core. Дополнительные сведения о настройке адаптивной выборки для приложений ASP.NET Core приведены далее в этом документе.

В файле ApplicationInsights.config можно настроить несколько параметров узла AdaptiveSamplingTelemetryProcessor. Ниже представлены значения по умолчанию.

  • <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>

    Целевая частота логических операций, данные о которых должны собираться адаптивным алгоритмом на каждом узле сервера. Если веб-приложение выполняется на множестве узлов, нужно уменьшить это значение, чтобы не превышать целевую скорость трафика на портале Application Insights.

  • <EvaluationInterval>00:00:15</EvaluationInterval>

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

  • <SamplingPercentageDecreaseTimeout>00:02:00</SamplingPercentageDecreaseTimeout>

    Время, по истечении которого можно снова снизить процент выборки для сбора меньшего объема данных после изменения значения процента выборки.

  • <SamplingPercentageIncreaseTimeout>00:15:00</SamplingPercentageIncreaseTimeout>

    Время, по истечении которого можно снова увеличить процент выборки для сбора большего объема данных после изменения значения процента выборки.

  • <MinSamplingPercentage>0.1</MinSamplingPercentage>

    Минимальное допустимое значение с учетом изменения процента выборки.

  • <MaxSamplingPercentage>100.0</MaxSamplingPercentage>

    Максимальное допустимое значение с учетом изменения процента выборки.

  • <MovingAverageRatio>0.25</MovingAverageRatio>

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

  • <InitialSamplingPercentage>100</InitialSamplingPercentage>

    Объем данных телеметрии для выборки на момент запуска приложения. Не снижайте это значение во время отладки.

  • <ExcludedTypes>Trace;Exception</ExcludedTypes>

    Записанный через точку с запятой список типов, к которым не должна применяться выборка. Распознаваемые типы: Dependency, Event, Exception, PageView, Request, Trace. Передаются все данные телеметрии указанных типов. Типы, которые не указаны, включаются в выборку.

  • <IncludedTypes>Request;Dependency</IncludedTypes>

    Записанный через точку с запятой список типов, к которым должна применяться выборка. Распознаваемые типы: Dependency, Event, Exception, PageView, Request, Trace. Указанные типы включаются в выборку. Все данные телеметрии других типов будут всегда передаваться.

Чтобы отключить адаптивную выборку, удалите узлы из ApplicationInsights.config .

Альтернатива: настройка адаптивной выборки в коде

Вместо установки параметра выборки в файле .config можно задать эти значения программным способом.

  1. Удалите все узлы AdaptiveSamplingTelemetryProcessor из файла .config.

  2. Чтобы настроить адаптивную выборку, используйте следующий фрагмент кода:

    using Microsoft.ApplicationInsights;
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;
    using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
    
    // ...
    
    var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
    // For older versions of the Application Insights SDK, use the following line instead:
    // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder;
    
    // Enable AdaptiveSampling so as to keep overall telemetry volume to 5 items per second.
    builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5);
    
    // If you have other telemetry processors:
    builder.Use((next) => new AnotherProcessor(next));
    
    builder.Build();
    

    (Сведения о процессорах телеметрии.)

Можно также настроить частоту выборки отдельно для каждого типа телеметрии или даже исключить определенные типы из выборки.

// The following configures adaptive sampling with 5 items per second, and also excludes Dependency telemetry from being subjected to sampling.
builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");

Настройка адаптивной выборки для приложений ASP.NET Core

Для приложений ASP.NET Core файл ApplicationInsights.config отсутствует, поэтому все настройки выполняются с помощью кода. Адаптивная выборка включена для всех приложений ASP.NET Core по умолчанию. Вы можете отключить или настроить поведение выборки.

Отключение адаптивной выборки

Функция выборки по умолчанию может быть отключена при добавлении службы Application Insights в метод ConfigureServices с использованием ApplicationInsightsServiceOptions в файле Startup.cs.

public void ConfigureServices(IServiceCollection services)
{
    // ...

    var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
    aiOptions.EnableAdaptiveSampling = false;
    services.AddApplicationInsightsTelemetry(aiOptions);

    //...
}

Указанный выше код отключит адаптивную выборку. Чтобы добавить выборку с дополнительными параметрами настройки, выполните следующие действия.

Настройка параметров выборки

Чтобы настроить поведение выборки, используйте методы расширения TelemetryProcessorChainBuilder, как показано ниже.

Важно!

Если вы используете этот метод для настройки выборки, обязательно присвойте свойству aiOptions.EnableAdaptiveSampling значение false при вызове AddApplicationInsightsTelemetry(). После внесения этого изменения необходимо в точности выполнить приведенные ниже инструкции в блоке кода, чтобы повторно включить адаптивную выборку с заданными настройками. Несоблюдение этого требования может привести к чрезмерному приему данных. Всегда проверяйте параметры выборки после изменения и установите соответствующее ежедневное ограничение на объем данных, чтобы лучше контролировать затраты.

using Microsoft.ApplicationInsights.Extensibility

public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
{
    var builder = configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
    // For older versions of the Application Insights SDK, use the following line instead:
    // var builder = configuration.TelemetryProcessorChainBuilder;

    // Using adaptive sampling
    builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5);

    // Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling.
    // builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");

    // If you have other telemetry processors:
    builder.Use((next) => new AnotherProcessor(next));
    
    builder.Build();

    // ...
}

Настройка адаптивной выборки для Функций Azure

Следуйте инструкциям на этой странице, чтобы настроить адаптивную выборку для приложений, выполняющихся в службе "Функции Azure".

Выборка с фиксированной частотой

Выборка с фиксированной частотой уменьшает объем трафика, отправляемого с веб-сервера и веб-браузеров. В отличие от адаптивной выборки объем данных уменьшается в фиксированном, заданном вами размере. Выборка с фиксированной частотой доступна для приложений ASP.NET, ASP.NET Core, Java и Python.

Как и другие методы выборки, она также позволяет хранить связанные элементы. При этом выборки клиента и сервера синхронизируются, а связанные элементы сохраняются. Например, просматривая представление страницы в поиске, вы всегда сможете найти соответствующие ему запросы сервера.

В обозревателе метрик такие параметры, как счетчики запросов и исключений, умножаются на коэффициент, компенсирующий частоту выборки, что позволяет получать примерно точные значения.

Настройка выборки с фиксированной частотой для приложений ASP.NET

  1. Отключите адаптивную выборку. В файле удалите или преобразуйте в комментарий узел AdaptiveSamplingTelemetryProcessor.

    <TelemetryProcessors>
        <!-- Disabled adaptive sampling:
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
        </Add>
        -->
    
  2. Включите модуль выборки с фиксированной частотой. Добавьте следующий фрагмент кода в ApplicationInsights.config:

    <TelemetryProcessors>
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <!-- Set a percentage close to 100/N where N is an integer. -->
            <!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) -->
            <SamplingPercentage>10</SamplingPercentage>
        </Add>
    </TelemetryProcessors>
    

    Кроме того, вместо установки параметра выборки в файле ApplicationInsights.config можно задать эти значения программным способом:

    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
    
    // ...
    
    var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
    // For older versions of the Application Insights SDK, use the following line instead:
    // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder;
    
    builder.UseSampling(10.0); // percentage
    
    // If you have other telemetry processors:
    builder.Use((next) => new AnotherProcessor(next));
    
    builder.Build();
    

    (Сведения о процессорах телеметрии.)

Настройка выборки с фиксированной частотой для приложений ASP.NET Core

  1. Отключить адаптивную выборку: изменения можно вносить в метод с помощью ApplicationInsightsServiceOptions :

    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    
        var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
        aiOptions.EnableAdaptiveSampling = false;
        services.AddApplicationInsightsTelemetry(aiOptions);
    
        //...
    }
    
  2. Включите модуль выборки с фиксированной частотой. Изменения можно внести в метод Configure как показано в следующем фрагменте кода:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        var configuration = app.ApplicationServices.GetService<TelemetryConfiguration>();
    
        var builder = configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
        // For older versions of the Application Insights SDK, use the following line instead:
        // var builder = configuration.TelemetryProcessorChainBuilder;
    
        // Using fixed rate sampling
        double fixedSamplingPercentage = 10;
        builder.UseSampling(fixedSamplingPercentage);
    
        builder.Build();
    
        // ...
    }
    

Настройка переопределений выборки и выборки с фиксированной частотой для приложений Java

По умолчанию в автоматическом инструментировании Java и пакете SDK выборка не включена. В настоящее время поддерживаются автоматическое инструментирование Java, переопределения выборки и выборка с фиксированной частотой. Адаптивная выборка в Java не поддерживается.

Настройка автоматического инструментирования Java

Настройка пакета SDK для Java 2.x

  1. Скачайте пакет SDK Application Insights для Java последней версии и настройте его в веб-приложении.

  2. Включите модуль выборки с фиксированной частотой , добавив следующий фрагмент кода в файл:

    <TelemetryProcessors>
        <BuiltInProcessors>
            <Processor type="FixedRateSamplingTelemetryProcessor">
                <!-- Set a percentage close to 100/N where N is an integer. -->
                <!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) -->
                <Add name="SamplingPercentage" value="50" />
            </Processor>
        </BuiltInProcessors>
    </TelemetryProcessors>
    
  3. Конкретные типы телеметрии можно включить в выборку или исключить из нее с помощью следующих тегов внутри FixedRateSamplingTelemetryProcessor тега Processor.

    <ExcludedTypes>
        <ExcludedType>Request</ExcludedType>
    </ExcludedTypes>
    
    <IncludedTypes>
        <IncludedType>Exception</IncludedType>
    </IncludedTypes>
    

Можно включить в выборку или исключить из нее следующие типы данных телеметрии: Dependency, Event, Exception, PageView, Request и Trace.

Примечание

В качестве процента выборки выберите значение в процентах, близкое к 100/N, где N — это целое число. В настоящее время выборка не поддерживает другие значения.

Настройка выборки с фиксированной частотой для приложений Python OpenCensus

Инструментируйте приложение с помощью новейших средств экспорта OpenCensus в Azure Monitor.

Примечание

Выборка с фиксированной частотой недоступна для средств экспорта метрик. Это означает, что пользовательские метрики — это единственные типы телеметрии, для которых НЕЛЬЗЯ настроить выборку. Средство экспорта метрик будет отсылать все данные телеметрии, которые оно отслеживает.

Выборка с фиксированной частотой для трассировки

Вы можете указать sampler как часть конфигурации Tracer. Если средство выборки не указано явно, по умолчанию используется ProbabilitySampler. ProbabilitySampler по умолчанию будет использовать частоту 1/10000, то есть один из 10 000 запросов будет отправлен Application Insights. Чтобы указать свою частоту выборки, см. ниже.

Чтобы задать частоту выборки, убедитесь, что Tracer задает средство выборки с частотой выборки от 0,0 до 1,0 включительно. Частота выборки 1,0 соответствует 100 %, то есть все запросы будут отправляться как данные телеметрии в Application Insights.

tracer = Tracer(
    exporter=AzureExporter(
        instrumentation_key='00000000-0000-0000-0000-000000000000',
    ),
    sampler=ProbabilitySampler(1.0),
)

Выборка с фиксированной частотой для журналов

Можно настроить выборку с фиксированной частотой для AzureLogHandler, изменив необязательный аргумент logging_sampling_rate. Если аргумент не указан, будет использоваться частота выборки 1,0. Частота выборки 1,0 соответствует 100 %, то есть все запросы будут отправляться как данные телеметрии в Application Insights.

handler = AzureLogHandler(
    instrumentation_key='00000000-0000-0000-0000-000000000000',
    logging_sampling_rate=0.5,
)

Настройка выборки с фиксированной частотой для веб-страниц с JavaScript

Веб-страницы на основе JavaScript можно настроить для использования Application Insights. Данные телеметрии отправляются из клиентского приложения, работающего в браузере пользователя, а страницы могут размещаться с любого сервера.

При настройке веб-страниц на основе JavaScript для Application Insights измените фрагмент JavaScript, скачанный с портала Application Insights.

Совет

В приложениях ASP.NET с добавлением JavaScript этот фрагмент обычно находится в _Layout.cshtml.

Вставьте строку, похожую на samplingPercentage: 10,, перед ключом инструментирования:

<script>
    var appInsights = // ... 
    ({ 
      // Value must be 100/N where N is an integer.
      // Valid examples: 50, 25, 20, 10, 5, 1, 0.1, ...
      samplingPercentage: 10, 

      instrumentationKey: ...
    }); 

    window.appInsights = appInsights; 
    appInsights.trackPageView(); 
</script>

В качестве процента выборки выберите значение в процентах, близкое к 100/N, где N — это целое число. В настоящее время выборка не поддерживает другие значения.

Координация выборки на стороне сервера и клиента

Пакет SDK для JavaScript на стороне клиента участвует в выборке с фиксированной частотой в сочетании с серверным пакетом SDK. Инструментированные страницы отправляют данные телеметрии клиента только от тех пользователей, которых пакет SDK на стороне сервера выбрал для включения в выборку. Такая логика обеспечивает непрерывность сеанса пользователя как на клиентском, так и на серверном приложениях. В результате из любого конкретного элемента телеметрии в Application Insights можно найти все другие элементы телеметрии для этого пользователя или сеанса. При этом в области поиска можно перемещаться между связанными представлениями страниц и запросами.

Если в данных телеметрии на клиенте и сервере не отображаются скоординированные выборки, выполните следующие действия.

  • Убедитесь, что выборка с фиксированной частотой включена и на сервере, и в клиенте.
  • Проверьте, указан ли процент выборки на клиенте и сервере.
  • Убедитесь в том, что используется пакет SDK версии 2.0 или выше.

Выборка приема

Выборка при приеме выполняется там, где данные телеметрии с веб-сервера, браузеров и устройств достигают конечной точки службы Application Insights. Несмотря на то, что трафик телеметрии, отправляемой из приложения, такая выборка не уменьшает, она сокращает объем данных для обработки и сохранения в службе Application Insights, а значит и размер оплаты.

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

Задайте частоту выборки на странице "Usage and estimated costs" (Данные об использовании и предполагаемые расходы).

From the application's Overview blade, click Settings, Quota, Samples, then select a sampling rate, and click Update.

Как и в других типах выборки, алгоритм сохраняет связанные элементы телеметрии. Например, при проверке телеметрии в поиске это позволит найти запрос, связанный с определенным исключением. Правильно сохраняются счетчики метрик, например частота запросов и частота исключений.

Точки данных, отклоненные выборкой, доступны не во всех функциях Application Insights, например Непрерывный экспорт.

Выборка приема не работает при выполнении адаптивной или фиксированной выборки. Адаптивная выборка включена по умолчанию при использовании пакета SDK ASP.NET или ASP.NET Core, при включении Application Insights в Службе приложений Azure или при использовании монитора состояний. Когда конечная точка службы Application Insights получает данные телеметрии, она их проверяет, и если частота выборки менее 100 % (что означает, что выполняется выборка данных телеметрии), заданная скорость выборки игнорируется.

Предупреждение

Значение, отображаемое на плитке портала, соответствует значению, которое вы задали для выборки при приеме. Оно не представляет фактическую частоту выборки, если выполняется операция выборки пакета SDK (адаптивная или с фиксированной частотой).

Когда следует использовать выборку

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

Основные преимущества выборки:

  • Служба Application Insights удаляет ("регулирует") точки данных, когда приложение слишком часто отправляет данные телеметрии за короткий интервал времени. Выборка снижает вероятность того, что к приложению будет применено регулирование.
  • Вы остаетесь в пределах квоты на точки данных для своей ценовой категории.
  • Вам нужно сократить сетевой трафик, который тратится на сбор данных телеметрии.

Какой тип выборки следует использовать?

Используйте выборку приема, если:

  • Вы часто расходуете ежемесячную квоту телеметрии.
  • Вы получаете слишком много данных телеметрии с веб-браузеров пользователей.
  • Вы используете версию пакета SDK, которая не поддерживает выборки, например версию пакета для ASP.NET ниже 2.

Используйте выборку с фиксированной частотой, если:

  • Вам нужна синхронизированная выборка между клиентом и сервером, которая позволяет перемещаться между связанными событиями на стороне клиента и сервера (такими, как просмотры страниц и HTTP-запросы) при использовании службы поискав ходе анализа событий.
  • Вам нужна уверенность в выборе соответствующего процента выборки для вашего приложения. Он должен быть достаточно высоким, чтобы получить точные метрики и при этом не превышать ценовую квоту и ограничения регулирования.

Используйте адаптивную выборку:

Если условия для использования других форм выборки не применяются, мы рекомендуем адаптивную выборку. Этот параметр включен по умолчанию в пакете SDK для ASP.NET и ASP.NET Core. Она не приведет к уменьшению трафика, пока не будет достигнута определенная минимальная скорость. Таким образом, для сайтов, которые используются редко, выборка не будет выполняться вовсе.

Принцип работы выборки

Чтобы узнать фактическую частоту выборки (где бы она ни применялась), выполните такой запрос аналитики :

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Если вы видите, что RetainedPercentage для любого типа меньше 100, для этого типа телеметрии применяется выборка.

Важно!

В Application Insights выборка для таких типов телеметрии, как сеанс, метрики (включая пользовательские метрики) и счетчик производительности, не выполняется ни одним из методов. Эти типы телеметрии всегда исключаются из выборки, так как снижение точности может быть для них очень нежелательным.

Принцип работы выборки

Алгоритм выборки определяет, какие элементы телеметрии следует удалить, а какие сохранить. Это верно, если выборка выполняется пакетом SDK или в службе Application Insights. Решение выборки основано на нескольких правилах, цель которых — сохранение всех точек взаимосвязанных данных без изменений, а также реализация функции диагностики в Application Insights даже с использованием сокращенного набора данных. Например, если в приложении есть неудачный запрос, включенный в выборку, дополнительные элементы телеметрии (например, исключения и трассировки, регистрируемые для этого запроса) будут сохранены. При выборке они либо сохраняются, либо удаляются все вместе. Поэтому при просмотре сведений о запросе в Application Insights вы всегда будете видеть запрос вместе со связанными элементами телеметрии.

Решение выборки основано на идентификаторе операции запроса. Это означает, что все элементы телеметрии, относящиеся к определенной операции, либо сохраняются, либо удаляются. Для элементов телеметрии без идентификатора операции (например, элементов телеметрии, о которых сообщается из асинхронных потоков без контекста HTTP), выборка просто фиксирует процент элементов телеметрии каждого типа.

Представляя вам данные телеметрии, служба Application Insights корректирует метрики в соответствии с процентом выборки, который использовался во время сбора. Это делается, чтобы компенсировать отсутствующие точки данных. Следовательно, при просмотре данных телеметрии в Application Insights пользователи видят статистически правильные приблизительные значения, очень близкие к реальным цифрам.

Точность приблизительного значения в значительной степени зависит от заданного процента выборки. Кроме того, точность возрастает для приложений, обрабатывающих большой объем сходных запросов от большого количества пользователей. С другой стороны, для приложений, которые не работают с существенной нагрузкой, выборка не требуется, так как такие приложения обычно могут отправлять все данные телеметрии, не выходя за пределы квоты и не вызывая потерю данных в результате регулирования.

Часто задаваемые вопросы

Каково такое поведение выборки по умолчанию в пакетах SDK для ASP.NET и ASP.NET Core?

  • Если вы используете одну из последних версий указанного выше пакета SDK, адаптивная выборка включается по умолчанию с пятью элементами телеметрии в секунду. По умолчанию добавлены два узла AdaptiveSamplingTelemetryProcessor. Один включает тип Event в выборку, а другой исключает тип Event из выборки. Такая конфигурация означает, что пакет SDK будет пытаться ограничить элементы телеметрии до пяти элементов телеметрии типа Event и пяти элементов телеметрии всех остальных типов вместе. Благодаря этому выборка Events будет выполняться отдельно от выборки для других типов телеметрии. События обычно используются для бизнес-телеметрии и тома диагностической телеметрии на них, скорее всего, не повлияют.

    Ниже показан созданный стандартный файл ApplicationInsights.config. В ASP.NET Core то же поведение по умолчанию разрешено в коде. Используйте примеры из предыдущего раздела на этой странице, чтобы изменить это поведение по умолчанию.

    <TelemetryProcessors>
        <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>
    

Можно ли выполнить выборку данных телеметрии несколько раз?

  • Нет. Если элемент уже выбран SamplingTelemetryProcessors не учитывает его при формировании выборки. То же самое справедливо и для выборки при приеме, при которой выборка не применяется к этим элементам, которые уже выбраны самим пакетом SDK.

Почему выборка — это не простой сбор X процентов данных телеметрии каждого типа?

  • Хотя такой подход к выборке обеспечил бы высокий уровень точности в приблизительных значениях метрик, он не позволит сопоставлять диагностические данные для каждого пользователя, сеанса и запроса, что является критически важным для диагностики. Поэтому выборка лучше всего работает с такими политиками, как "сбор всех элементов телеметрии для X процентов пользователей приложения" или "сбор всех данных телеметрии для X процентов запросов приложения". Для элементов телеметрии, не связанных с запросами (например, асинхронной фоновой обработки), резервным вариантом является "сбор X процентов всех элементов для каждого типа телеметрии".

Может ли процент выборки меняться со временем?

  • Да, адаптивная выборка постепенно меняет процент выборки в зависимости от текущего объема данных телеметрии.

Если я использую выборку с фиксированной частотой, как узнать, какой процент выборки будет оптимальным для моего приложения?

  • Один из способов — начать с адаптивной выборки, узнать подобранную частоту (см. вопрос выше) и переключиться на выборку с этой фиксированной частотой.

    В противном случае придется только угадывать. Анализируйте текущее использование телеметрии в Application Insights, наблюдайте осуществляемое регулирование и оценивайте объем собранных данных телеметрии. Эти три фактора в сочетании с выбранной ценовой категорией позволяют оценить объем собранных данных телеметрии, который может потребоваться сократить. Однако увеличение числа пользователей или некоторые другие факторы, меняющие объем данных телеметрии, могут сделать оценку недействительной.

Что произойдет, если настроить слишком низкий процент выборки?

  • Слишком низкий процент выборки, вызывающий излишне агрессивную выборку, снижает точность приблизительных значений, когда служба Application Insights пытается компенсировать отображение данных для сокращения объема данных. Кроме того, это может отрицательно повлиять на функцию диагностики, так как в выборку могут не попасть некоторые редкие сбои или медленные запросы.

Что произойдет, если настроить слишком высокий процент выборки?

  • Слишком высокий процент выборки (недостаточно агрессивная выборка) приводит к недостаточному снижению объема собранных данных телеметрии. У вас по-прежнему может наблюдаться потеря данных телеметрии, связанная с регулированием, а затраты на использование Application Insights могут быть выше запланированных из-за избыточных расходов.

На каких платформах можно использовать выборку?

  • Выборка приема может выполняться автоматически, когда объем данных телеметрии превышает определенный порог, если пакет SDK не выполняет выборку. Эта конфигурация будет работать, например, при использовании более старой версии пакета SDK для ASP.NET или Java.
  • Если вы используете пакет SDK для ASP.NET или ASP.NET Core (размещенный в Azure или на собственном сервере), адаптивная выборка работает по умолчанию, однако вы можете перейти на выборку с фиксированной частотой, как описано выше. При выборке с фиксированной частотой пакет SDK браузера выполняет автоматическую синхронизацию с событиями, связанными с выборкой.
  • Если вы используете текущий агент Java, можно настроить applicationinsights.json (для пакета SDK для Java, настройте ApplicationInsights.xml), чтобы включить выборку с фиксированной частотой. По умолчанию выборка отключена. При выборке с фиксированной частотой пакет SDK браузера и сервер выполняют автоматическую синхронизацию с событиями, связанными с выборкой.

Есть определенные редкие события, которые я всегда хочу просматривать. Как сделать так, чтобы модуль выборки не отфильтровывал их?

  • Лучший способ добиться этого — написать пользовательский TelemetryInitializer, который задает для элемента телеметрии значение 100, которое необходимо сохранить, как показано ниже. Так как инициализаторы гарантированно выполняются до обработчиков данных телеметрии (включая выборку), это обеспечивает пропуск данного элемента всеми методами выборки при ее формировании. Пользовательские инициализаторы телеметрии доступны в пакетах SDK для ASP.NET, ASP.NET Core, JavaScript и Java. Например, можно настроить инициализатор телеметрии с помощью пакета SDK для ASP.NET:

    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if(somecondition)
            {
                ((ISupportSampling)telemetry).SamplingPercentage = 100;
            }
        }
    }
    

Более старые версии пакета SDK

Адаптивная выборка доступна в пакете SDK Application Insights для ASP.NET версии 2.0.0-beta3 или более поздней версии и пакета SDK для Microsoft.ApplicationInsights.AspNetCore версии 2.2.0-beta1 и включена по умолчанию.

Выборка с фиксированной частотой — это функция пакетов SDK для ASP.NET версии 2.0.0 и выше и пакетов SDK для Java версии 2.0.1 и выше.

До версии 2.5.0-beta2 пакета SDK для ASP.NET и 2.2.0-beta3 пакета SDK для ASP.NET Core решение о выборке основывалось на хэше идентификатора пользователя для приложений, определяющих "пользователя" (то есть наиболее типичных веб-приложений). Для типов приложений, которые не определяют пользователей (например, веб-служб), решение о выборке основывалось на идентификаторе операции запроса. В последних версиях пакетов SDK для ASP.NET и ASP.NET Core используется идентификатор операции для решения выборки.

Дальнейшие действия