Compartilhar via


Amostragem no Application Insights

A amostragem é um recurso do 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.

Observação

  • Se você adotou nossa distribuição OpenTelemetry e está procurando opções de configuração, consulte Habilitar Amostragem.

Observação

A documentação a seguir depende da API clássica do Application Insights. O plano de longo prazo do Application Insights é coletar dados usando o OpenTelemetry. Para obter mais informações, consulte Habilitar o OpenTelemetry do Azure Monitor para aplicativos .NET, Node.js, Python e Java e nosso Roteiro do OpenTelemetry. As diretrizes de migração estão disponíveis para o .NET, o Node.js e o Python.

Uma captura de tela das opções de configuração de amostragem.

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 e 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), JavaScript 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%. Esse comportamento é 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
JavaScript 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 No Sim

Observação

  • O Java Application Agent 3.4.0 e posterior usa uma amostragem com limitação de taxa como padrão ao enviar telemetria para o Application Insights. Para obter mais informações, confira Amostragem com limitação de taxa.
  • 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 versões mais antigas do SDK.

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 (“restringe”) pontos de dados quando o aplicativo envia uma taxa 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.

Como a amostragem funciona?

O algoritmo de amostragem decide quais itens de telemetria manter ou descartar, seja o serviço Application Insights ou SDK fazendo a amostragem. Esse algoritmo segue regras para manter todos os pontos de dados inter-relacionados intactos, garantindo que o Application Insights forneça uma experiência de diagnóstico acionável e confiável, mesmo com menos dados. Por exemplo, se uma amostra incluir uma solicitação com falha, ela retém todos os itens de telemetria relacionados, como exceções e rastreamentos. Dessa forma, ao visualizar detalhes da solicitação no Application Insights, você sempre verá a solicitação e as telemetrias relacionadas.

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 operação definida (como itens telemetria notificados por threads assíncronos sem contexto HTTP), a amostragem simplesmente 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 estarão vendo aproximações estatisticamente corretas próximas dos 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 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 e, ao mesmo tempo, permanecer dentro da cota, sem causar perda de dados devido à limitação.

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. É 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 a telemetria ASP.NET/ASP.NET Core do 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 sincronizam as amostragens, para que, no Search, 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 permanecer dentro do limite de taxa MaxTelemetryItemsPerSecond. Se o aplicativo gerar pouca telemetria, como durante a depuração ou o baixo uso, ele não descarta itens, desde que o volume permaneça abaixo de MaxTelemetryItemsPerSecond. À medida que o volume de telemetria aumenta, ele ajusta a taxa de amostragem para atingir o volume desejado. Esse ajuste, recalculado em intervalos regulares, é baseado na 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 estiver inspecionando a telemetria no Search, você conseguirá 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 aproximados 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, ele determina quão rapidamente podemos reduzir novamente a porcentagem de amostragem a fim de capturar menos dados.

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

    Da mesma forma, quando o valor da porcentagem de amostragem muda, ele dita quão rapidamente podemos aumentar novamente a porcentagem de amostragem para 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, esse valor 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 iniciar. Não reduza esse valor enquanto estiver depurando.

  • <ExcludedTypes>type;type</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 são transmitidos; os tipos não especificados serão amostrados.

  • <IncludedTypes>type;type</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 são amostrados; todos os dados telemétricos de todos os demais tipos sã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

Aplicativos ASP.NET Core podem ser configurados no código ou por meio do arquivo appsettings.json. Para obter mais informações, consulte Configuração no ASP.NET Core.

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 do Application Insights.

Adicione ApplicationInsightsServiceOptions após o método WebApplication.CreateBuilder() no arquivo Program.cs:

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

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

Definir as configurações de amostragem

Use os seguintes métodos de extensão de TelemetryProcessorChainBuilder 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 seguinte bloco de código 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.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;

var builder = WebApplication.CreateBuilder(args);

builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
   var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;

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

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

   telemetryProcessorChainBuilder.Build();
});

builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
   EnableAdaptiveSampling = false,
});

var app = builder.Build();

Você pode personalizar outras configurações de amostragem por meio da classe SamplingPercentageEstimatorSettings:

using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;

telemetryProcessorChainBuilder.UseAdaptiveSampling(new SamplingPercentageEstimatorSettings
{
     MinSamplingPercentage = 0.01,
     MaxSamplingPercentage = 100,
     MaxTelemetryItemsPerSecond = 5
 }, null, excludedTypes: "Dependency"); 

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, ela também mantém itens relacionados. Ela também sincroniza a amostragem do cliente e do servidor, para que os itens relacionados sejam retidos. Como exemplo, quando você olha a exibição de página em Buscar, você pode encontrar suas 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 o mais exatas possível.

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:

    Nesse exemplo, SamplingPercentage é 20, portanto, 20% de todos os itens são amostrados. Os valores em no Metrics Explorer serão multiplicados por (100/20) = 5 para compensar.

    <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>20</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 amostragem adaptável

    As alterações podem ser feitas após o método WebApplication.CreateBuilder(), usando ApplicationInsightsServiceOptions:

    var builder = WebApplication.CreateBuilder(args);
    
    var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
    aiOptions.EnableAdaptiveSampling = false;
    builder.Services.AddApplicationInsightsTelemetry(aiOptions);
    
    var app = builder.Build();
    
  2. Habilitar o módulo de amostragem de taxa fixa

    As alterações podem ser feitas após o método WebApplication.CreateBuilder():

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
    {
        var builder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
    
        // Using fixed rate sampling
        double fixedSamplingPercentage = 10;
        builder.UseSampling(fixedSamplingPercentage);
        builder.Build();
    });
    
    builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
    {
        EnableAdaptiveSampling = false,
    });
    
    var app = 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 aplicam 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 sua telemetria, use o guia de amostragem de taxa fixa.

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 explícito for fornecido, o ProbabilitySampler é usado por padrão. O ProbabilitySampler usaria uma taxa de 1/10000 por padrão, o que significa que uma das solicitações de 10,000 seria enviada para o Application Insights. Se você quiser especificar uma taxa de amostragem, veja os detalhes a seguir.

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 são enviadas como telemetria para o 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 é usada. Uma taxa de amostragem de 1,0 representa 100%, o que significa que todas as suas solicitações sã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>

Observação

Em 31 de março de 31, 2025, o suporte à ingestão de chave de instrumentação será encerrado. A ingestão de chave de instrumentação continuará funcionando, mas não forneceremos mais atualizações ou suporte para o recurso. Transição para cadeias de conexão para aproveitar as novas funcionalidades.

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 com o SDK do lado do servidor. As páginas instrumentadas enviam 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 seja 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:

No painel Visão Geral do aplicativo, selecione Configurações, Cota, Amostras e, a seguir, selecione uma taxa de amostragem e selecione em Atualizar.

Assim como outros tipos de amostragem, o algoritmo retém os itens relacionados de telemetria. Por exemplo, quando estiver inspecionando a telemetria no Search, você conseguirá 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.

A amostragem descarta determinados pontos de dados, tornando-os indisponíveis em qualquer recurso do Application Insights, como a Exportação Contínua.

A amostragem de ingestão não funciona em conjunto com a amostragem adaptável ou de taxa fixa. A amostragem adaptável é ativada automaticamente com o SDK do ASP.NET, o SDK do ASP.NET Core, no Serviço de Aplicativo do Azure ou com o Agente do Application Insights. Quando o ponto de extremidade de serviço do Application Insights recebe telemetria e detecta uma taxa de amostragem abaixo de 100% (indicando amostragem ativa), ele ignora qualquer taxa de amostragem de ingestão definida.

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.

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

Use a amostragem de taxa fixa se:

  • É necessário ter a amostragem sincronizada entre o cliente e o servidor para navegar entre eventos relacionados. Por exemplo, exibições de página e solicitações HTTP no Search durante a investigação de eventos.
  • Você estiver confiante quanto ao percentual de amostragem adequado ao 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, recomendamos a amostragem adaptável. Essa configuração está habilitada por padrão no SDK do ASP.NET/ASP.NET Core. A amostragem não reduz o tráfego até que uma determinada taxa mínima seja atingida, portanto, os sites com baixo uso provavelmente não são amostrados.

Saber se a amostragem está em operação

Use uma Consulta de análise para encontrar a taxa de amostragem.

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.

Precisão da consulta de log e altas taxas de amostragem

À medida que o aplicativo é escalado verticalmente, ele pode processar dezenas, centenas ou milhares de itens de trabalho por segundo. Registrar um evento para cada um deles não é economicamente viável nem eficaz para o recurso. O Application Insights usa amostragem para se adaptar ao volume crescente de telemetria de maneira flexível e controlar o uso e o custo dos recursos.

Aviso

A integridade de exibição de ponta a ponta de uma operação distribuída poderá ser afetada se algum aplicativo na operação distribuída tiver ativado a amostragem. Decisões de amostragem diferentes são feitas por cada aplicativo em uma operação distribuída, portanto, a telemetria para uma ID de operação pode ser salva por um aplicativo, enquanto outros aplicativos podem decidir não fazer a amostra da telemetria para a mesma ID de operação.

À medida que as taxas de amostragem aumentam, a precisão das consultas baseadas em log diminui e passa a ser superestimada. Isso só afeta a precisão das consultas baseadas em log quando a amostragem está habilitada e as taxas de amostragem estão em um intervalo mais alto (cerca de 60%). O impacto varia com base nos tipos de telemetria, no número de dados telemétricos por operação e outros fatores.

Os SDKs usam métricas pré-agregadas para resolver problemas causados pela amostragem. Para obter mais informações sobre essas métricas, confira Azure Application Insights – Azure Monitor | Microsoft Docs. Os SDKs identificam propriedades relevantes dos dados registrados e extraem estatísticas antes da amostragem. Para minimizar o uso de recursos e custos, as métricas são agregadas. Esse processo resulta em alguns itens de telemetria por minuto, em vez de milhares de itens de telemetria de eventos. Por exemplo, essas métricas podem relatar "este aplicativo Web processou 25 solicitações" para a conta de MDM, com uma itemCount de 100 no registro de telemetria de solicitação enviada. Essas métricas pré-agregadas fornecem números precisos e são confiáveis mesmo quando a amostragem afeta os resultados de consultas baseadas em logs. Você pode visualizá-las no painel Métricas do portal do Application Insights.

Perguntas frequentes

A amostragem afeta a precisão do alerta?

  • Sim. Os alertas só podem ser disparados com base em dados amostrados. A filtragem agressiva pode fazer com que os alertas não sejam disparados conforme o esperado.

Observação

A amostragem não é aplicada a métricas, mas as métricas podem ser derivadas de dados amostrados. Dessa forma, a amostragem pode afetar indiretamente a precisão do alerta.

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. Por padrão, o sistema adiciona dois nós AdaptiveSamplingTelemetryProcessor: um inclui o tipo Event na amostragem, enquanto o outro o exclui. Essa configuração limita a telemetria a cinco itens do tipo Event e cinco itens de todos os outros tipos combinados, garantindo que os Events sejam amostrados separadamente de outros tipos de telemetria.

Use os exemplos na seção anterior desta página para alterar esse comportamento padrão.

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 aplica 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 funciona 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.

O que acontece se eu definir as configurações IncludedTypes e ExcludedTypes?

  • É melhor não definir ExcludedTypes e IncludedTypes em sua configuração para evitar conflitos e garantir configurações claras de coleção de telemetria.
  • Os tipos de telemetria listados em ExcludedTypes são excluídos mesmo se também estiverem definidos nas configurações IncludedTypes. ExcludedTypes terá precedência sobre IncludedTypes.

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 anteriormente. 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 sempre ver determinados eventos é gravar um TelemetryInitializer personalizado, que define SamplingPercentage como 100 no item de telemetria que você deseja reter, conforme mostrado abaixo. A execução dos inicializadores é garantida antes dos processadores de telemetria (incluindo amostragem), portanto, todas as técnicas de amostragem ignoram 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 da versão v2.5.0-beta2 do SDK do ASP.NET e da versão v2.2.0-beta3 do SDK do ASP.NET Core, as decisões de amostragem para aplicativos que definem "usuário" (como a maioria dos aplicativos Web) dependiam do hash da ID do usuário. Para aplicativos que não definem usuários (como serviços Web), a decisão foi baseada na ID de operação da solicitação. As versões recentes do SDK do ASP.NET e do ASP.NET Core agora usam a ID de operação para as decisões de amostragem.

Próximas etapas