Amostragem no Application Insights

A amostragem é um recurso do Azure Application Insights. É a maneira recomendada para reduzir o tráfego de telemetria e os custos de dados e de armazenamento, preservando uma análise estatística correta de dados do aplicativo. A amostragem também ajuda a evitar que o Application Insights limite a telemetria. O filtro de amostragem seleciona itens relacionados para que você possa navegar entre os itens quando você estiver realizando investigações de diagnóstico.

Quando as contagens de métricas são apresentadas no portal, elas são renormalizadas para levar em consideração a amostragem. Isso minimiza o efeito nas estatísticas.

Breve resumo

  • Há três tipos diferentes de amostragem: a amostragem adaptável, a amostragem de taxa fixa e a amostragem de ingestão.
  • A amostragem adaptável está habilitada por padrão em todas as versões mais recentes dos Software Development Kits (SDKs) do Application Insights para ASP.NET e ASP.NET Core. Também é usada pelo Azure Functions.
  • A amostragem de taxa fixa está disponível nas versões recentes dos SDKs do Application Insights para ASP.NET, ASP.NET Core, Java (tanto o agente quanto o SDK) e Python.
  • No Java, as substituições de amostragem estão disponíveis e são úteis quando é necessário aplicar taxas de amostragem diferentes a dependências, solicitações e verificações de integridade selecionadas. Use substituições de amostragem para ajustar algumas dependências com ruído, enquanto, por exemplo, todos os erros importantes são mantidos em 100%. Essa é uma forma de amostragem fixa que fornece um nível de controle fino sobre a telemetria.
  • A amostragem de ingestão atua no ponto de extremidade do serviço Application Insights. Ela é aplicada quando nenhuma outra amostragem está em vigor. Se o SDK extrai amostras de telemetria, a amostragem de ingestão está desabilitada.
  • Para aplicativos Web, se você registrar eventos personalizados e precisar garantir que um conjunto de eventos seja mantido ou descartado em conjunto, os eventos deverão ter o mesmo valor de OperationId.
  • Se você escrever consultas de Análise, deverá levar em conta a amostragem. Em particular, em vez de simplesmente contar registros, você deve usar summarize sum(itemCount).
  • Alguns tipos de telemetria, incluindo métricas personalizadas e de desempenho, são sempre mantidos, independentemente de a amostragem estar habilitada ou não.

A tabela a seguir resume os tipos de amostragem disponíveis para cada SDK e tipo de aplicativo:

SDK do Application Insights Amostragem adaptável com suporte Amostragem de taxa fixa com suporte Amostragem de ingestão com suporte
ASP.NET Sim (ativado por padrão) Sim Apenas se nenhuma outra amostragem estiver em vigor
ASP.NET Core Sim (ativado por padrão) Sim Apenas se nenhuma outra amostragem estiver em vigor
Funções do Azure Sim (ativado por padrão) Não Apenas se nenhuma outra amostragem estiver em vigor
Java Não Sim Apenas se nenhuma outra amostragem estiver em vigor
Node.JS Não Sim Apenas se nenhuma outra amostragem estiver em vigor
Python Não Sim Apenas se nenhuma outra amostragem estiver em vigor
Todos os outros Não Não Sim

Observação

A maioria das informações que constam nesta página se aplica às versões atuais dos SDKs do Application Insights. Para obter informações sobre versões mais antigas dos SDKs, confira a seção abaixo.

Tipos de amostragem

Há três módulos de amostragem alternativos:

  • A amostragem adaptável ajusta automaticamente o volume da telemetria enviada do Azure Functions e do SDK para o aplicativo ASP.NET/ASP.NET Core. Essa é a amostragem padrão quando você usa o SDK do ASP.NET ou do ASP.NET Core. A amostragem adaptável está disponível apenas para telemetria ASP.NET no lado do servidor e para o Azure Functions.

  • A amostragem de taxa fixa reduz o volume da telemetria enviada do servidor Java ou ASP.NET ou ASP.NET Core e dos navegadores dos usuários. Você define a taxa. O cliente e o servidor sincronizarão suas amostragens para que, na Pesquisa, você possa navegar entre exibições de página e solicitações relacionadas.

  • A amostragem de ingestão atua no ponto de extremidade do serviço Application Insights. Ela descarta parte da telemetria que chega em seu aplicativo, na taxa de amostragem que você definir. Ela não reduz o tráfego de telemetria enviado do seu aplicativo, mas ajuda você a se manter em sua cota mensal. A principal vantagem da amostragem de ingestão é que você pode definir a taxa de amostragem sem reimplantar o aplicativo. A amostragem de ingestão funciona de maneira uniforme para todos os servidores e clientes, mas não se aplica quando outros tipos de amostragem estão em operação.

Importante

Se os métodos de amostragem adaptável ou de taxa fixa estiverem habilitados para um tipo de telemetria, a amostragem de ingestão será desabilitada para essa telemetria. No entanto, os tipos de telemetria excluídos da amostragem em nível de SDK ainda estarão sujeitos à amostragem de ingestão na taxa definida no portal.

amostragem adaptável

A amostragem adaptável afeta o volume de telemetria enviado do seu aplicativo de servidor Web para o end-point do serviço Application Insights.

Dica

A amostragem adaptável está habilitada por padrão quando você usa o SDK do ASP.NET ou do ASP.NET Core, e também está habilitada por padrão para o Azure Functions.

O volume é ajustado automaticamente para se manter em uma taxa máxima de tráfego especificada e é controlado pela configuração MaxTelemetryItemsPerSecond. Se o aplicativo produzir uma quantidade baixa de telemetria, como durante a depuração ou devido ao pouco uso, os itens não serão descartados pelo processador de amostragem, desde que o volume esteja abaixo de MaxTelemetryItemsPerSecond. À medida que o volume da telemetria aumenta, a taxa de amostragem é ajustada para alcançar o volume de destino. O ajuste é recalculado em intervalos regulares e tem base em uma média móvel da taxa de transmissão de saída.

Para atingir o volume de destino, parte da telemetria gerada é descartada. Assim como os outros tipos de amostragem, o algoritmo retém os itens de telemetria relacionados. Por exemplo, quando você estiver analisando a telemetria na Pesquisa, poderá localizar a solicitação relacionada a uma exceção específica.

As contagens de métrica, como a taxa de solicitações e a taxa de exceções são ajustadas para compensar a taxa de amostragem, para que mostrem valores aproximadamente corretos no Gerenciador de Métricas.

Configurar a amostragem adaptável para aplicativos ASP.NET

Observação

Esta seção se aplica a aplicativos ASP.NET, não a aplicativos ASP.NET Core. Saiba mais sobre como configurar a amostragem adaptável para aplicativos ASP.NET Core mais adiante neste documento.

Em ApplicationInsights.config, é possível ajustar diversos parâmetros no nó AdaptiveSamplingTelemetryProcessor. Os números mostrados são os valores padrão:

  • <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>

    A taxa de destino das operações lógicas que o algoritmo adaptável visa coletar em cada host de servidor. Se o seu aplicativo Web for executado em muitos hosts, reduza esse valor para permanecer dentro de sua taxa de destino de tráfego no portal do Application Insights.

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

    O intervalo no qual a taxa atual de telemetria é reavaliada. Avaliação é executada como uma média móvel. Talvez você queira reduzir esse intervalo se a sua telemetria estiver sujeita a picos repentinos.

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

    Quando o valor da porcentagem de amostragem muda, quanto tempo depois temos permissão para diminuir a porcentagem de amostragem novamente a fim de capturar menos dados?

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

    Quando o valor da porcentagem de amostragem muda, quanto tempo depois temos permissão para aumentar a porcentagem de amostragem novamente a fim de capturar mais dados?

  • <MinSamplingPercentage>0.1</MinSamplingPercentage>

    À medida que a porcentagem de amostragem varia, qual é o valor mínimo que podemos definir?

  • <MaxSamplingPercentage>100.0</MaxSamplingPercentage>

    À medida que a porcentagem de amostragem varia, qual é o valor máximo que podemos definir?

  • <MovingAverageRatio>0.25</MovingAverageRatio>

    No cálculo da média móvel, isso especifica o peso que deve ser atribuído ao valor mais recente. Use um valor menor ou igual a 1. Valores menores tornam o algoritmo menos reativo a mudanças repentinas.

  • <InitialSamplingPercentage>100</InitialSamplingPercentage>

    A quantidade de telemetria a ser amostrada quando o aplicativo acaba de ser iniciado. Não reduza esse valor enquanto estiver depurando.

  • <ExcludedTypes>Trace;Exception</ExcludedTypes>

    Uma lista delimitada por ponto e vírgula dos tipos que você não deseja submeter à amostragem. Os tipos reconhecidos são Dependency, Event, Exception, PageView, Request, Trace. Todos os dados telemétricos dos tipos especificados serão transmitidos; os tipos não especificados serão amostrados.

  • <IncludedTypes>Request;Dependency</IncludedTypes>

    Uma lista delimitada por ponto e vírgula dos tipos que você deseja submeter à amostragem. Os tipos reconhecidos são Dependency, Event, Exception, PageView, Request, Trace. Os tipos especificados serão amostrados; todos os outros tipos de dados telemétricos serão sempre transmitidos.

Para desativar a amostragem adaptável, remova os nós AdaptiveSamplingTelemetryProcessor de ApplicationInsights.config.

Alternativa: configurar a amostragem adaptável no código

Em vez de definir o parâmetro de amostragem no arquivo .config, você pode definir esses valores de forma programática.

  1. Remova todos os nós AdaptiveSamplingTelemetryProcessor do arquivo .config.

  2. Use o seguinte snippet para configurar a amostragem adaptável:

    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();
    

    (Saiba mais sobre os processadores de telemetria.)

Também é possível ajustar a taxa de amostragem para cada tipo de telemetria individualmente, ou mesmo excluir determinados tipos de serem amostrados:

// 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");

Configurar a amostragem adaptável para aplicativos ASP.NET Core

Não há ApplicationInsights.config para aplicativos ASP.NET Core; portanto, toda a configuração é feita por meio de código. A amostragem adaptável está habilitada por padrão para todos os aplicativos ASP.NET Core. É possível desabilitar ou personalizar o comportamento de amostragem.

Desativar a amostragem adaptável

O recurso de amostragem padrão pode ser desabilitado ao adicionar o serviço Application Insights, no método ConfigureServices, usando ApplicationInsightsServiceOptions dentro do arquivo Startup.cs:

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

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

    //...
}

O código acima desabilitará a amostragem adaptável. Siga as etapas abaixo para adicionar a amostragem com mais opções de personalização.

Definir as configurações de amostragem

Use os métodos de extensão de TelemetryProcessorChainBuilder conforme mostrado abaixo para personalizar o comportamento de amostragem.

Importante

Se você usar esse método para configurar a amostragem, não deixe de definir a propriedade aiOptions.EnableAdaptiveSampling como false ao chamar AddApplicationInsightsTelemetry(). Depois de fazer essa alteração, você precisará seguir as instruções no bloco de código abaixo exatamente na ordem para reabilitar a amostragem adaptável com suas personalizações em vigor. Não fazer isso pode resultar em excesso de ingestão de dados. Sempre teste as configurações de amostragem pós-alteração e defina um limite de dados diário apropriado para ajudar a controlar seus custos.

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();

    // ...
}

Configurar a amostragem adaptável para o Azure Functions

Siga as instruções desta página para configurar a amostragem adaptável para os aplicativos em execução no Azure Functions.

Amostragem de taxa fixa

A amostragem de taxa fixa reduz o tráfego enviado do seu servidor Web e de navegadores da Web. Ao contrário da amostragem adaptável, ela reduz a telemetria a uma taxa fixa decidida por você. A amostragem de taxa fixa está disponível para aplicativos ASP.NET, ASP.NET Core, Java e Python.

Assim como outras técnicas de amostragem, esta também mantém itens relacionados. Além disso, ela sincroniza a amostragem de servidor e de cliente para que os itens relacionados sejam mantidos, por exemplo, quando você examinar um modo de exibição de página na Pesquisa, poderá localizar as solicitações de servidor relacionadas.

No Metrics Explorer, as taxas como as contagens de solicitações e de exceções são multiplicadas por um fator para compensar a taxa de amostragem, para que elas sejam aproximadamente corretas.

Configurar a amostragem de taxa fixa para aplicativos ASP.NET

  1. Desabilitar a amostragem adaptável: em ApplicationInsights.config, remova ou transforme em comentário o nó AdaptiveSamplingTelemetryProcessor.

    <TelemetryProcessors>
        <!-- Disabled adaptive sampling:
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
        </Add>
        -->
    
  2. Habilitar o módulo de amostragem de taxa fixa. Adicione este snippet a 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>
    

    Como alternativa, em vez de definir o parâmetro de amostragem no arquivo ApplicationInsights.config, você pode definir estes valores de forma programática:

    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();
    

    (Saiba mais sobre os processadores de telemetria.)

Configurar a amostragem de taxa fixa para aplicativos ASP.NET Core

  1. Desabilitar a amostragem adaptável: as alterações podem ser feitas no método ConfigureServices, usando ApplicationInsightsServiceOptions:

    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    
        var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
        aiOptions.EnableAdaptiveSampling = false;
        services.AddApplicationInsightsTelemetry(aiOptions);
    
        //...
    }
    
  2. Habilitar o módulo de amostragem de taxa fixa. As alterações podem ser feitas no método Configure, conforme mostrado no snippet abaixo:

    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();
    
        // ...
    }
    

Configurar substituições de amostragem e amostragem de taxa fixa para aplicativos Java

Por padrão, nenhuma amostragem está habilitada no SDK e na instrumentação automática do Java. Atualmente, há suporte para a instrumentação automática do Java, substituições de amostragem e amostragem de taxa fixa. O Java não dá suporte à amostragem adaptável.

Configurar a instrumentação automática do Java

  • Para configurar substituições de amostragem que substituem a taxa de amostragem padrão e apliquem taxas de amostragem diferentes a solicitações e dependências selecionadas, use o guia de substituição de amostragem.
  • Para configurar a amostragem de taxa fixa que se aplica a toda a telemetria, use o guia de amostragem de taxa fixa.

Configurar o SDK do Java 2. x

  1. Faça download e configure o aplicativo Web com o SDK do Application insights para Java mais recente.

  2. Habilite o módulo de amostragem de taxa fixa adicionando o seguinte snippet ao arquivo ApplicationInsights.xml:

    <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. Você pode incluir ou excluir tipos específicos de telemetria da amostragem usando as seguintes marcas dentro da marca FixedRateSamplingTelemetryProcessor do Processor:

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

Os tipos de telemetria que podem ser incluídos ou excluídos da amostragem são: Dependency, Event, Exception, PageView, Request e Trace.

Observação

Para o percentual de amostragem, escolha um percentual que esteja próximo a 100/N, em que N é um inteiro. Atualmente, a amostragem não dá suporte a outros valores.

Configurar a amostragem de taxa fixa para aplicativos OpenCensus Python

Instrumente o aplicativo com a versão mais recente dos Exportadores do OpenCensus para o Azure Monitor.

Observação

A amostragem de taxa fixa não está disponível para o exportador de métricas. Isso significa que as métricas personalizadas são o único tipo de telemetria em que a amostragem NÃO pode ser configurada. O exportador de métricas enviará todos os dados telemétricos que ele monitora.

Amostragem de taxa fixa para rastreamento

Você pode especificar um sampler como parte da configuração do Tracer. Se nenhum amostrador for fornecido explicitamente, o ProbabilitySampler será usado por padrão. O ProbabilitySampler usaria uma taxa de 1/10000 por padrão, o que significa que uma das solicitações de 10000 será enviada para Application Insights. Se você quiser especificar uma taxa de amostragem, veja abaixo.

Para especificar a taxa de amostragem, verifique se o Tracer especifica um amostrador com uma taxa de amostragem entre 0,0 e 1,0, inclusive. Uma taxa de amostragem de 1,0 representa 100%, o que significa que todas as suas solicitações serão enviadas como telemetria para Application Insights.

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

Amostragem de taxa fixa para logs

Você pode configurar a amostragem de taxa fixa para AzureLogHandler modificando o argumento opcional logging_sampling_rate. Se nenhum argumento for fornecido, uma taxa de amostragem de 1,0 será usada. Uma taxa de amostragem de 1,0 representa 100%, o que significa que todas as suas solicitações serão enviadas como telemetria para Application Insights.

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

Configurar a amostragem de taxa fixa para páginas da Web com JavaScript

As páginas da Web baseadas em JavaScript podem ser configuradas para usar o Application Insights. A telemetria é enviada do aplicativo cliente em execução no navegador do usuário, e as páginas podem estar hospedadas em qualquer servidor.

Ao configurar as páginas da Web baseadas em JavaScript para o Application Insights, modifique o snippet JavaScript que você receber do portal do Application Insights.

Dica

Em aplicativos ASP.NET com JavaScript incluído, o snippet normalmente está em _Layout.cshtml.

Insira uma linha como samplingPercentage: 10, antes da chave de instrumentação:

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

Para o percentual de amostragem, escolha um percentual que esteja próximo a 100/N, em que N é um inteiro. Atualmente, a amostragem não dá suporte a outros valores.

Coordenar a amostragem do lado do servidor e do cliente

O SDK do JavaScript do lado do cliente participa da amostragem de taxa fixa em conjunto com o SDK do lado do servidor. As páginas instrumentadas enviarão apenas a telemetria do lado do cliente do mesmo usuário para o qual o SDK do lado do servidor tomou a decisão de incluir na amostragem. Essa lógica é projetada para manter a integridade das sessões de usuário em aplicativos do lado do cliente e do servidor. Como resultado, você pode encontrar todos os outros itens de telemetria para esse usuário ou sessão de qualquer item de telemetria específico no Application Insights e, na Pesquisa, você pode navegar pelas exibições de página e pelas solicitações relacionadas.

Se a telemetria do lado do cliente e do servidor não mostrar amostras coordenados:

  • Verifique se você habilitou a amostragem no servidor e no cliente.
  • Verifique se você definiu o mesmo percentual de amostragem no cliente e no servidor.
  • Certifique-se de que a versão do SDK é 2.0 ou superior.

amostragem de ingestão

A amostragem de ingestão opera no ponto em que a telemetria de seu servidor Web, seus navegadores e seus dispositivos atinge o ponto de extremidade do serviço Application Insights. Embora ela não reduza o tráfego de telemetria enviado do seu aplicativo, reduz a quantidade processada e mantida (e cobrada) pelo Application Insights.

Use esse tipo de amostragem se seu aplicativo geralmente ultrapassar a cota mensal e se você não tiver a opção de usar os tipos de amostragem baseados em SDK.

Defina a taxa de amostragem na página Uso e custos estimados:

Na folha Visão Geral do aplicativo, clique em Configurações, Cota, Amostras, escolha uma taxa de amostragem e clique em Atualizar.

Assim como outros tipos de amostragem, o algoritmo retém os itens relacionados de telemetria. Por exemplo, quando você estiver analisando a telemetria na Pesquisa, poderá localizar a solicitação relacionada a uma exceção específica. As contagens de métrica como a taxa de solicitação e a taxa de exceções são mantidas corretamente.

Os pontos de dados que são descartados pela amostragem não estão disponíveis em nenhum recurso do Application Insights como Exportação Contínua.

A amostragem de ingestão não funciona enquanto a amostragem adaptável ou de taxa fixa estiver em operação. A amostragem adaptável é habilitada por padrão quando o SDK do ASP.NET ou do ASP.NET Core é usado, ou quando o Application Insights está habilitado no Serviço de Aplicativo do Azure ou ao usar o Status Monitor. Quando a telemetria é recebida pelo ponto de extremidade do serviço Application Insights, ele examina a telemetria e, se a taxa de amostragem for inferior a 100% (o que indica que a telemetria está sendo amostrada), a taxa de amostragem de ingestão definida será ignorada.

Aviso

O valor mostrado no bloco do portal indica o valor definido para a amostragem de ingestão. Ele não representa a taxa de amostragem real se qualquer tipo de amostragem de SDK (amostragem adaptável ou de taxa fixa) estiver em operação.

Quando usar a amostragem?

Em geral, para a maioria dos aplicativos de pequeno e médio porte, você não precisa de amostragem. As informações de diagnóstico mais úteis e as estatísticas mais precisas são obtidas por meio da coleta de dados em todas as atividades de usuário.

As principais vantagens da amostragem são:

  • O serviço Application Insights remove (“limita”) os pontos de dados quando o aplicativo envia uma taxa muito alta de telemetria em um curto intervalo de tempo. A amostragem reduz a probabilidade de o aplicativo detectar a limitação.
  • Permanecer dentro da cota de pontos de dados para o seu tipo de preço.
  • Para reduzir o tráfego de rede da coleção de telemetria.

Que tipo de amostragem eu devo usar?

Use a amostragem de ingestão se:

  • Você costuma usar sua cota mensal de telemetria.
  • Você recebe muita telemetria dos navegadores da Web dos usuários.
  • Você estiver usando uma versão do SDK que não oferece suporte à amostragem. Por exemplo, o ASP.NET anteriores à 2.

Use a amostragem de taxa fixa se:

  • Você quiser uma amostragem sincronizada entre cliente e servidor, para que quando estiver investigando eventos na Pesquisa, você possa navegar entre os eventos relacionados no cliente e no servidor, por exemplo, exibições de página e solicitações HTTP.
  • Você tiver certeza sobre a porcentagem de amostragem apropriada para seu aplicativo. Ela deve ser alta o suficiente para obter métricas precisas, mas abaixo da taxa que excede sua cota de preços e limitações.

Use a amostragem adaptável:

Se as condições para usar outras formas de amostragem não se aplicarem, é recomendável a amostragem adaptável. Essa configuração está habilitada por padrão no SDK do ASP.NET/ASP.NET Core. Ela não reduzirá o tráfego até que uma determinada taxa mínima seja atingida; portanto, os sites de baixo uso provavelmente não serão amostrados.

Saber se a amostragem está em operação

Para descobrir a taxa de amostragem real, independentemente de onde ela tiver sido aplicada, use uma consulta do Analytics como esta:

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

Se você vir que RetainedPercentage para qualquer tipo é menor que 100, então esse tipo de telemetria está sendo amostrado.

Importante

O Application Insights não faz a amostragem dos tipos de telemetria de sessão, métrica (incluindo métrica personalizada) ou contador de desempenho em qualquer uma das técnicas de amostragem. Esses tipos são sempre excluídos da amostragem, pois uma redução na precisão pode ser altamente indesejável para esses tipos de telemetria.

Como a amostragem funciona?

O algoritmo de amostragem decide quais itens de telemetria remover e manter. Isso é verdadeiro quando a amostragem é feita pelo SDK ou no serviço Application Insights. A decisão de amostragem baseia-se em várias regras que visam preservar todos os pontos de dados inter-relacionados intactos, mantendo uma experiência de diagnóstico no Application Insights que seja acionável e confiável mesmo com um conjunto reduzido de dados. Por exemplo, se o aplicativo tiver uma solicitação com falha incluída em uma amostra, os itens de telemetria adicionais (como exceções e rastreamentos registrados para essa solicitação) serão mantidos. A amostragem remove ou mantém todos juntos. Como resultado, quando você examinar os detalhes da solicitação no Application Insights, é possível ver sempre a solicitação junto com seus itens de telemetria associados.

A decisão de amostragem baseia-se na ID da operação da solicitação, o que significa que todos os itens de telemetria que pertencem a uma determinada operação são preservados ou descartados. Para os itens de telemetria que não têm uma ID de usuário definida (como itens telemetria relatados dos threads assíncronos sem contexto HTTP), a amostragem apenas captura um percentual dos itens de telemetria de cada tipo.

Ao apresentar a telemetria de volta para você, o serviço Application Insights ajusta as métricas pelo mesmo percentual de amostragem usado no momento da coleta, para compensar os pontos de dados ausentes. Portanto, ao examinar a telemetria no Application Insights, os usuários veem aproximações estatisticamente corretas que estão muito próximas aos números reais.

A precisão da aproximação depende principalmente do percentual de amostragem configurado. Além disso, a precisão aumenta para os aplicativos que lidam com um grande volume de solicitações geralmente semelhantes de uma grande quantidade de usuários. Por outro lado, para aplicativos que não funcionam com uma carga significativa, a amostragem não é necessária, pois esses aplicativos geralmente podem enviar toda a sua telemetria, ao mesmo tempo que permanecem dentro da cota, sem causar perda de dados da limitação.

Perguntas frequentes

Qual é o comportamento de amostragem padrão nos SDKs do ASP.NET e do ASP.NET Core?

  • Se você estiver usando uma das versões mais recentes do SDK acima, a amostragem adaptável será habilitada por padrão com cinco itens de telemetria por segundo. Há dois nós AdaptiveSamplingTelemetryProcessor adicionados por padrão e um deles inclui o tipo Event na amostragem, enquanto o outro exclui o tipo Event da amostragem. Essa configuração significa que o SDK tentará limitar a cinco itens de telemetria do tipo Event e cinco itens de telemetria de todos os outros tipos combinados, garantindo assim que Events sejam amostrados separadamente dos outros tipos de telemetria. Os eventos costumam ser usados para telemetria de negócios e não devem ser afetados por volumes de telemetria de diagnóstico.

    O arquivo padrão ApplicationInsights.config gerado é mostrado abaixo. No ASP.NET Core, o mesmo comportamento padrão está habilitado no código. Use os exemplos na seção anterior desta página para alterar esse comportamento padrão.

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

A telemetria pode ser amostrada mais de uma vez?

  • Não. SamplingTelemetryProcessors ignora os itens das considerações de amostragem se já estiverem sendo amostrados. Isso também vale para a amostragem de ingestão, que não aplicará amostragem a esses itens já amostrados no próprio SDK.

Por que a amostragem não se trata apenas de “coletar X% de cada tipo de telemetria”?

  • Embora essa abordagem de amostragem forneceria um alto nível de precisão em aproximações de métrica, ela interromperia a capacidade de correlacionar dados de diagnóstico por usuário, sessão e solicitação, que são essenciais para o diagnóstico. Portanto, a amostragem funciona melhor com políticas como “coletar todos os itens de telemetria para X% de usuários do aplicativo” ou “coletar toda a telemetria para X% das solicitações do aplicativo”. Para os itens de telemetria não associados às solicitações (como o processamento assíncrono em segundo plano), o fallback é “coletar X% de todos os itens para cada tipo de telemetria”.

O percentual de amostragem pode ser alterado com o tempo?

  • Sim, a amostragem adaptável altera gradualmente a porcentagem de amostragem com base no volume atualmente observado da telemetria.

Se eu usar a amostragem de taxa fixa, como saber qual percentual de amostragem funcionará melhor para o meu aplicativo?

  • Uma maneira é iniciar com a amostragem adaptável, descobrir qual taxa se adequa (consulte a pergunta anterior) e, em seguida, alternar para a amostragem de taxa fixa usando essa taxa.

    Caso contrário, é preciso adivinhar. Analise o seu uso atual da telemetria na em Application Insights, observe qualquer limitação que esteja ocorrendo e estime o volume da telemetria coletada. Essas três entradas, junto com seu tipo de preço selecionado, sugere o quanto você talvez queira reduzir o volume da telemetria coletada. No entanto, um aumento no número de usuários ou alguma outra mudança no volume de telemetria pode invalidar sua estimativa.

O que acontece se eu configurar o percentual de amostragem com um valor muito baixo?

  • Um percentual de amostragem excessivamente baixo causa amostragem superagressiva e reduz a precisão das aproximações quando o Application Insights tenta compensar a visualização dos dados para a redução do volume de dados. Além disso, a experiência de diagnóstico pode ser afetada negativamente, já que algumas das solicitações lentas ou raramente com falhas podem ser amostradas.

O que acontece se eu configurar o percentual de amostragem com um valor muito alto?

  • Configurar um percentual de amostragem muito alto (não agressivo o suficiente) resultará em uma redução insuficiente no volume da telemetria coletada. Ainda pode ocorrer perda de dados de telemetria relacionada à limitação, e o custo do uso do Application Insights pode ser maior do que o planejado devido a encargos excedentes.

Em quais plataformas posso usar a amostragem?

  • A amostragem de ingestão pode ocorrer automaticamente para qualquer telemetria acima de um determinado volume, se o SDK não estiver executando a amostragem. Essa configuração funcionaria, por exemplo, se você estivesse usando uma versão mais antiga do SDK do ASP.NET ou do Java.
  • Se você estiver usando o SDK atual do ASP.NET ou do ASP.NET Core (hospedado no Azure ou em seu próprio servidor), terá a amostragem adaptável por padrão, mas poderá alternar para a taxa fixa, conforme descrito acima. Com a amostragem de taxa fixa, o SDK do navegador sincroniza automaticamente os eventos relacionados ao exemplo.
  • Se você estiver usando o agente Java atual, poderá configurar applicationinsights.json (para o SDK do Java, configure ApplicationInsights.xml) para ativar a amostragem de taxa fixa. A amostragem é desativada por padrão. Com a amostragem de taxa fixa, o SDK do navegador e o servidor sincronizam automaticamente os eventos relacionados à amostra.

Há alguns eventos raros que sempre desejo ver. Como posso fazê-los passar pelo módulo de amostragem?

  • A melhor maneira de fazer isso é gravar um TelemetryInitializer personalizado, que define SamplingPercentage para 100 no item de telemetria que você deseja manter, conforme mostrado abaixo. Como a execução dos inicializadores antes dos processadores de telemetria (incluindo amostragem) é garantida, todas as técnicas de amostragem ignorarão esse item de quaisquer considerações de amostragem. Inicializadores de telemetria personalizados estão disponíveis no SDK do ASP.NET, do ASP.NET Core, do JavaScript e do Java. Por exemplo, você pode configurar um inicializador de telemetria usando o SDK do ASP.NET:

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

Versões mais antigas do SDK

A amostragem adaptável está disponível para o SDK do Application Insights para o ASP.NET v2.0.0-beta3 e posterior e para o SDK Microsoft.ApplicationInsights.AspNetCore v2.2.0-beta1 e posterior, e está habilitada por padrão.

A taxa de amostragem fixa é um recurso do SDK do ASP.NET a partir da versão 2.0.0 e do Java a partir da versão 2.0.1.

Antes de v2.5.0-beta2 do SDK do ASP.NET e v2.2.0-beta3 do SDK do ASP.NET Core, a decisão de amostragem foi baseada no hash da ID do usuário para aplicativos que definem o "usuário" (ou seja, aplicativos web mais comuns). Para os tipos de aplicativos que não definiam usuários (como serviços Web), a decisão de amostragem baseava-se na ID de operação da solicitação. As versões recentes do SDK do ASP.NET e do ASP.NET Core usam a ID da operação para a decisão de amostragem.

Próximas etapas