Compartir por


Muestreo en Application Insights.

El muestreo es una característica de Application Insights. Se trata de la manera recomendada de reducir el tráfico de telemetría, los costos de datos y los costos de almacenamiento, conservando al mismo tiempo un análisis estadísticamente correcto de los datos de las aplicaciones. El muestreo también le ayuda a evitar que Application Insights limite los datos de telemetría. El filtro de muestreo selecciona los elementos relacionados para que pueda desplazarse entre ellos cuando realiza investigaciones de diagnóstico.

Cuando los recuentos de métricas se presentan en el portal, se vuelven a normalizar para tener en cuenta el muestreo. De este modo, se minimizan los efectos en las estadísticas.

Nota:

Nota:

La siguiente documentación se basa en la API clásica de Application Insights. El plan a largo plazo de Application Insights consiste en recopilar datos mediante OpenTelemetry. Para más información, consulte Habilitación de Azure Monitor OpenTelemetry para aplicaciones de .NET, Node.js, Python y Java.

Captura de pantalla de las opciones de configuración de muestreo.

Resumen breve

  • Hay tres tipos diferentes de muestreo: muestreo adaptable, muestreo de frecuencia fija y muestreo de ingesta.
  • El muestreo adaptable está habilitado de manera predeterminada en todas las versiones más recientes de los kits de desarrollo de software (SDK) de Application Insights para ASP.NET y ASP.NET Core y Azure Functions.
  • El muestreo de frecuencia fija está disponible en las versiones recientes de los SDK de Application Insights para ASP.NET, ASP.NET Core, Java (tanto el agente como el SDK), JavaScript y Python.
  • En Java, hay disponibles invalidaciones de muestreo, que son útiles cuando se necesita aplicar diferentes velocidades de muestreo a algunas dependencias, solicitudes y comprobaciones de estado. Use invalidaciones de muestreo para optimizar algunas dependencias ruidosas, mientras que, por ejemplo, todos los errores importantes se mantienen al 100 %. Este comportamiento es una forma de muestreo fijo que proporciona un nivel de control pormenorizado de la telemetría.
  • El muestreo de ingesta funciona en el punto de conexión de servicio de Application Insights. Solo se aplica cuando no hay ningún otro muestreo en vigor. Si el SDK muestrea los datos de telemetría, el muestreo de ingesta está deshabilitado.
  • Para aplicaciones web, si registra eventos personalizados y necesita asegurarse de que un conjunto de eventos se conserva o descarta en conjunto, los eventos deben tener el mismo valor de OperationId.
  • Si escribe consultas de Analytics, debería tener en cuenta el muestreo. En concreto, en lugar de simplemente contar registros, debería usar summarize sum(itemCount).
  • Algunos tipos de telemetría, incluidas las métricas de rendimiento y las métricas personalizadas, siempre se conservan independientemente de si el muestreo está habilitado o no.

En la tabla siguiente se resumen los tipos de muestreo disponibles para cada SDK y tipo de aplicación:

SDK de Application Insights Se admite el muestreo adaptable Se admite el muestreo de frecuencia fija Se admite el muestreo de ingesta
ASP.NET Sí (activado de forma predeterminada) Solo si no hay otro muestreo en vigor
ASP.NET Core Sí (activado de forma predeterminada) Solo si no hay otro muestreo en vigor
Azure Functions Sí (activado de forma predeterminada) No Solo si no hay otro muestreo en vigor
Java No Solo si no hay otro muestreo en vigor
JavaScript No Solo si no hay otro muestreo en vigor
Node.JS No Solo si no hay otro muestreo en vigor
Python No Solo si no hay otro muestreo en vigor
Todos los demás No No

Nota

  • Java Application Agent 3.4.0 y versiones posteriores usan el muestreo de limitación de velocidad como valor predeterminado al enviar telemetría a Application Insights. Para obtener más información, consulte Muestreo de limitación de velocidad.
  • La información de la mayor parte de esta página se aplica a las versiones actuales de los SDK de Application Insights. Para obtener información sobre las versiones anteriores de los SDK, consulte las versiones de SDK antiguas.

¿Cuándo usar el muestreo?

En general, para la mayoría de las aplicaciones pequeñas y medianas no es necesario realizar muestreos. La información de diagnóstico más útil y las estadísticas más precisas se obtienen mediante la recopilación de datos en todas las actividades del usuario.

Las principales ventajas del muestreo son:

  • El servicio de Application Insights descarta ("limita") puntos de datos cuando la aplicación envía un número elevado de datos de telemetría en un intervalo de tiempo corto. El muestreo reduce la probabilidad de que se produzca una limitación en la aplicación.
  • Para mantenerse dentro de la cuota de puntos de datos de su plan de tarifa.
  • Para reducir el tráfico de red de la recopilación de telemetría.

Cómo funciona el muestreo

El algoritmo de muestreo decide qué elementos de telemetría quitar y cuáles conservar, ya realice el muestreo el SDK o el servicio de Application Insights. Sigue las reglas para mantener intactos todos los puntos de datos interrelacionados, lo que garantiza que Application Insights proporciona una experiencia de diagnóstico accionable y confiable, incluso con menos datos. Por ejemplo, si un ejemplo incluye una solicitud con error, conserva todos los elementos de telemetría relacionados, como excepciones y seguimientos. De esta manera, al examinar los detalles de solicitud en Application Insights, siempre se ve la solicitud y su telemetría asociada.

La decisión de muestreo se basa en el identificador de operación de la solicitud, lo que significa que todos los elementos de telemetría que pertenecen a una operación determinada se conservan o se descartan. Para los elementos de telemetría que no tienen establecido un identificador de operación (por ejemplo, los elementos de telemetría notificados desde subprocesos asincrónicos sin contexto HTTP), el muestreo simplemente captura un porcentaje de elementos de telemetría de cada tipo.

Al presentarle la telemetría, el servicio de Application Insights ajusta las métricas con el mismo porcentaje de muestreo que se usó en el momento de la recopilación, para compensar por los puntos de datos que faltan. Por lo tanto, al examinar la telemetría en Application Insights, los usuarios ven aproximaciones estadísticamente correctas que están próximas a los números reales.

La precisión de la aproximación depende en gran medida del porcentaje de muestreo configurado. También, la precisión aumenta en las aplicaciones que administran un gran volumen de solicitudes similares de muchos usuarios. Por otro lado, para las aplicaciones que no funcionan con una carga significativa, el muestreo no es necesario ya que estas aplicaciones normalmente pueden enviar toda su telemetría manteniéndose dentro de la cuota, sin causar pérdida de datos por causa de la limitación.

Tipos de muestreo

Hay tres métodos de muestreo diferentes:

  • El muestreo adaptable ajusta automáticamente el volumen de telemetría que se envía desde el SDK en la aplicación de ASP.NET/ASP.NET Core y desde Azure Functions. Es el muestreo predeterminado cuando se usa el SDK de ASP.NET o ASP.NET Core. Actualmente, el muestreo adaptable solo está disponible para la telemetría del lado servidor de ASP.NET/ASP.NET Core y para Azure Functions.

  • El muestreo de frecuencia fija reduce el volumen de telemetría que se envía desde el servidor ASP.NET, ASP.NET Core o Java y desde los exploradores de los usuarios. El usuario establece la frecuencia. El cliente y el servidor sincronizan su muestreo por lo que, en Búsqueda, puede desplazarse entre las solicitudes y las vistas de página relacionadas.

  • El muestreo de ingesta se produce en el punto de conexión de servicio de Application Insights. Lo que hace es descartar algunos de los datos de telemetría que llegan desde su aplicación según la frecuencia de muestreo establecida. Aunque no reduce el tráfico de telemetría enviado desde su aplicación, le ayuda a mantenerse dentro de su cuota mensual. La principal ventaja del muestreo de ingesta es que puede establecer la frecuencia de muestreo sin volver a implementar la aplicación. El muestreo de ingesta funciona de manera uniforme para todos los servidores y clientes, pero no se aplica cuando están en funcionamiento otros tipos de muestreo.

Importante

Si se habilitan los métodos de muestreo de frecuencia fija o adaptable para un tipo de telemetría, el muestreo de ingesta queda deshabilitado para esa telemetría. Pero los tipos de telemetría que se excluyen del muestreo en el nivel de SDK siguen sujetos al muestreo de ingesta a la frecuencia establecida en el portal.

muestreo adaptable

Influye en el volumen de telemetría enviado desde su aplicación de servidor web hasta el punto de conexión del servicio de Application Insights.

Sugerencia

El muestreo adaptable está habilitado de forma predeterminada cuando se usa el SDK de ASP.NET o el SDK de ASP.NET Core y también está habilitado de forma predeterminada para Azure Functions.

El volumen se ajusta automáticamente para permanecer dentro del límite de velocidad de MaxTelemetryItemsPerSecond. Si la aplicación genera una telemetría baja, como durante la depuración o el uso bajo, no quita los elementos siempre y cuando el volumen permanezca en MaxTelemetryItemsPerSecond. A medida que aumenta el volumen de telemetría, ajusta la frecuencia de muestreo para alcanzar el volumen de destino. Este ajuste se actualiza a intervalos regulares y se basa en la media móvil de la velocidad de transmisión de salida.

Para lograr el volumen objetivo, se descartan algunos de los datos de telemetría generados. Pero, al igual que otros tipos de muestreo, el algoritmo conserva los elementos de telemetría relacionados. Por ejemplo, cuando se inspeccione la telemetría en Búsqueda, puede buscar la solicitud relacionada con una excepción determinada.

Los recuentos de métricas, como la tasa de solicitudes y la tasa de excepciones, se ajustan para compensar la frecuencia de muestreo, de modo que indican valores aproximados en el explorador de métricas.

Configuración del muestreo adaptable para aplicaciones de ASP.NET

Nota

Esta sección se aplica a las aplicaciones de ASP.NET, no a las aplicaciones de ASP.NET Core. Obtenga información sobre cómo configurar el muestreo adaptable para aplicaciones de ASP.NET Core más adelante en este documento.

En ApplicationInsights.config, puede ajustar varios parámetros en el nodo AdaptiveSamplingTelemetryProcessor. Las cifras que se muestran son los valores predeterminados:

  • <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>

    La velocidad de destino de las operaciones lógicas que el algoritmo adaptativo pretende recopilar en cada host de servidor. Si la aplicación web se ejecuta en varios hosts, reduzca este valor para que se mantenga dentro de la velocidad objetivo de tráfico en el portal de Application Insights.

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

    Intervalo en el que se vuelve a evaluar la velocidad actual de telemetría. La evaluación se realiza como una media móvil. Se recomienda acortar este intervalo si la telemetría experimenta ráfagas repentinas.

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

    Cuando se cambia el valor del porcentaje de muestreo, se determina la rapidez con la que podemos reducir el porcentaje de muestreo para capturar menos datos.

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

    Cuando se cambia el valor del porcentaje de muestreo, se dictamina lo pronto que podemos aumentar el porcentaje de muestreo para capturar más datos.

  • <MinSamplingPercentage>0.1</MinSamplingPercentage>

    A medida que el porcentaje de muestreo varía, ¿cuál es el valor mínimo que se permite establecer?

  • <MaxSamplingPercentage>100.0</MaxSamplingPercentage>

    A medida que el porcentaje de muestreo varía, ¿cuál es el valor máximo que se permite establecer?

  • <MovingAverageRatio>0.25</MovingAverageRatio>

    En el cálculo de la media móvil, este valor especifica el peso que se debe asignar al valor más reciente. Use un valor igual o menor que 1. Los valores menores hacen que el algoritmo reaccione con menor agilidad a los cambios repentinos.

  • <InitialSamplingPercentage>100</InitialSamplingPercentage>

    Cantidad de datos de telemetría que se muestrea cuando se ha iniciado la aplicación. No reduzca este valor durante la depuración.

  • <ExcludedTypes>type;type</ExcludedTypes>

    Lista de tipos delimitados por punto y coma que no desea que estén sujetos a muestreo. Los tipos reconocidos son: Dependency, Event, Exception, PageView, Request y Trace. Se transmiten todos los datos de telemetría de los tipos especificados; los tipos no especificados se muestrean.

  • <IncludedTypes>type;type</IncludedTypes>

    Una lista delimitada por puntos y coma de tipos que desea que estén sujetos a muestreo. Los tipos reconocidos son: Dependency, Event, Exception, PageView, Request y Trace. Los tipos especificados se muestrean, todos los datos de telemetría del resto de tipos siempre se transmiten.

Para desactivar el muestreo adaptable, elimine los nodos AdaptiveSamplingTelemetryProcessor de ApplicationInsights.config.

Alternativa: Configuración del muestreo adaptable en el código

En lugar de establecer el parámetro de muestreo en el archivo .config, puede establecer estos valores mediante programación.

  1. Elimine todos los nodos AdaptiveSamplingTelemetryProcessor del archivo .config.

  2. Use el siguiente fragmento de código para configurar el muestreo adaptable:

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

    (Más información sobre los procesadores de telemetría).

También puede ajustar la frecuencia de muestreo para cada tipo de telemetría individualmente o incluso puede excluir determinados tipos del muestreo:

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

Configuración del muestreo adaptable para aplicaciones de ASP.NET Core

Las aplicaciones de ASP.NET Core se pueden configurar en código o a través del archivo appsettings.json. Para más información, consulte Configuración en ASP.NET Core.

El muestreo adaptable está habilitado de forma predeterminada para todas las aplicaciones de ASP.NET Core. Puede deshabilitar o personalizar el comportamiento de muestreo.

Desactivación del muestreo adaptable

La característica predeterminada de muestreo se puede deshabilitar al agregar el servicio de Application Insights.

Agregue ApplicationInsightsServiceOptions después del método WebApplication.CreateBuilder() en el archivo 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();

El código anterior deshabilita el muestreo adaptable. Siga los siguientes pasos para agregar el muestreo con más opciones de personalización.

Configuración de las opciones de muestreo

Use los métodos de extensión siguientes de TelemetryProcessorChainBuilder para personalizar el comportamiento de muestreo.

Importante

Si usa este método para configurar el muestreo, asegúrese de establecer la propiedad aiOptions.EnableAdaptiveSampling en false al llamar a AddApplicationInsightsTelemetry(). Tras este cambio, debe seguir las instrucciones del bloque de código siguiente tal cual para volver a habilitar el muestreo adaptable con las personalizaciones en su lugar. Si no lo hace, puede producirse un exceso de ingesta de datos. Pruebe la configuración de muestreo siempre después de cambiarla y establezca un límite de datos diario adecuado para ayudar a controlar los costos.

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

Puedes personalizar otras configuraciones de muestreo utilizando la clase SamplingPercentageEstimatorSettings:

using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;

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

Configuración del muestreo adaptable para Azure Functions

Siga las instrucciones de esta página para configurar el muestreo adaptable para las aplicaciones que se ejecutan en Azure Functions.

Muestreo de frecuencia fija

El muestreo de frecuencia fija reduce el tráfico enviado desde el servidor web y los exploradores web. A diferencia del muestreo adaptable, reduce la telemetría a una tasa fija que usted decide. El muestreo de frecuencia fija está disponible para las aplicaciones de ASP.NET, ASP.NET Core, Java y Python.

Al igual que otras técnicas, también conserva los elementos relacionados. También sincroniza el muestreo de cliente y servidor para que se conserven los elementos relacionados. Por ejemplo, al examinar una vista de página en Búsqueda, puede encontrar las solicitudes de servidor relacionadas.

En el explorador de métricas, las tasas, como los recuentos de solicitudes y de excepciones, se multiplican por un factor para compensar la frecuencia de muestreo, de modo que sean los más correctas posible.

Configuración del muestreo de frecuencia fija para aplicaciones de ASP.NET

  1. Deshabilite el muestreo adaptable: En ApplicationInsights.config, elimine o marque como comentario el nodo AdaptiveSamplingTelemetryProcessor.

    <TelemetryProcessors>
        <!-- Disabled adaptive sampling:
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
        </Add>
        -->
    
  2. Habilite el módulo de muestreo de frecuencia fija. Agregue este fragmento de código a ApplicationInsights.config:

    En este ejemplo, SamplingPercentage es 20, por lo que se muestrea el 20 % de todos los elementos. Los valores del Explorador de métricas se multiplican 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, en lugar de establecer el parámetro de muestreo en el archivo ApplicationInsights.config, puede establecer estos valores mediante programación:

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

    (Más información sobre los procesadores de telemetría).

Configuración del muestreo de frecuencia fija para aplicaciones de ASP.NET Core

  1. Deshabilite el muestreo adaptable:

    Se pueden realizar cambios después del método WebApplication.CreateBuilder() mediante 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. Habilite el módulo de muestreo de frecuencia fija.

    Los cambios se pueden realizar después del 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(); 
    

Configuración de invalidaciones de muestreo y muestreo de frecuencia fija para aplicaciones Java

De manera predeterminada, no hay ningún muestreo habilitado ni en la instrumentación automática y ni en el SDK de Java. Actualmente se admiten la instrumentación automática de Java, las invalidaciones de muestreo y el muestreo de frecuencia fija. En Java no se admite el muestreo adaptable.

Configuración de la instrumentación automática de Java

  • Para configurar invalidaciones de muestreo que invaliden la frecuencia de muestreo predeterminada y apliquen diferentes velocidades de muestreo a las solicitudes y dependencias seleccionadas, use la guía de invalidación de muestreo.
  • Para configurar el uso de velocidad fija que se aplica a todos los datos de telemetría, use la guía de muestreo de frecuencia fija.

Nota

Para el porcentaje de muestreo, elija un porcentaje que esté cerca de 100/N, donde N es un número entero. Actualmente el muestreo no es compatible con otros valores.

Configuración del muestreo de frecuencia fija para aplicaciones de Python de OpenCensus

Instrumente la aplicación con los exportadores de Azure Monitor de OpenCensus más recientes.

Nota

El muestreo de frecuencia fija no está disponible para el exportador de métricas. Esto significa que las métricas personalizadas son los únicos tipos de telemetría en los que NO se puede configurar el muestreo. El exportador de métricas enviará toda la telemetría de la que realice el seguimiento.

Muestreo de frecuencia fija para seguimiento

Puede especificar un elemento sampler como parte de la configuración de Tracer. Si no se proporciona ningún elemento sampler explícito, se usa de forma predeterminada ProbabilitySampler. ProbabilitySampler usaría una frecuencia de 1/10000 de forma predeterminada, lo que significa que se envía a Application Insights una de cada 10,000 solicitudes. Si desea especificar una frecuencia de muestreo, consulte los detalles siguientes.

Para especificar la frecuencia de muestreo, asegúrese de que Tracer especifica un elemento sampler con una frecuencia de muestreo entre 0,0 y 1,0, ambos inclusive. Una velocidad de muestreo de 1,0 representa el 100 %, lo que significa que todas las solicitudes se envían como datos de telemetría a Application Insights.

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

Muestreo de frecuencia fija para registros

Puede configurar el muestreo de frecuencia fija para AzureLogHandler mediante la modificación del argumento opcional logging_sampling_rate. Si no se proporciona ningún argumento, se usa una frecuencia de muestreo de 1.0. Una velocidad de muestreo de 1,0 representa el 100 %, lo que significa que todas las solicitudes se envían como datos de telemetría a Application Insights.

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

Configuración del muestreo de frecuencia fija para páginas web con JavaScript

Las páginas web basadas en JavaScript se pueden configurar para usar Application Insights. Los datos de telemetría se envían desde la aplicación cliente que se ejecuta en el explorador del usuario y las páginas se pueden hospedar en cualquier servidor.

Cuando configure las páginas web basadas en JavaScript para Application Insights, modifique el fragmento de código de JavaScript que obtiene del portal de Application Insights.

Sugerencia

En aplicaciones de ASP.NET con JavaScript incluido, el fragmento de código suele ir en _Layout.cshtml.

Inserte una línea como samplingPercentage: 10, antes de la clave de instrumentación:

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

Nota

El 31 de marzo de 2025 finalizará la compatibilidad con la ingesta de claves de instrumentación. La ingesta de claves de instrumentación seguirá funcionando, pero la característica ya no recibirá actualizaciones ni soporte técnico. Transición a las cadenas de conexión para aprovechar las nuevas funcionalidades.

Para el porcentaje de muestreo, elija un porcentaje que esté cerca de 100/N, donde N es un número entero. Actualmente el muestreo no es compatible con otros valores.

Coordinación del muestreo en el lado servidor y en el cliente

El SDK de JavaScript del lado cliente participa en el muestreo de frecuencia fija junto con el SDK del lado servidor. Las páginas instrumentadas solo envían telemetría del cliente desde el mismo usuario para el que el SDK del servidor decidió incluir en el muestreo. Esta lógica está diseñada para mantener la integridad de la sesión de usuario entre las aplicaciones en el lado cliente y el lado servidor. Como resultado, a partir de cualquier elemento específico de telemetría en Application Insights, puede encontrar todos los demás elementos de telemetría para ese usuario o esa sesión y, en Buscar, puede desplazarse entre las vistas de página y las solicitudes relacionadas.

Si la telemetría del lado cliente y la del lado servidor no muestran muestras coordinadas:

  • Compruebe que habilitó el muestreo tanto en el cliente como en el servidor.
  • Compruebe que establece el mismo porcentaje de muestreo en el cliente y el servidor.
  • Asegúrese de que la versión del SDK es 2.0 o superior.

muestreo de ingesta

El muestreo de ingesta funciona en el punto en el que la telemetría del servidor web, los exploradores y los dispositivos alcanzan el punto de conexión de servicio de Application Insights. Aunque no reduce el tráfico de telemetría enviado desde su aplicación, sí reduce la cantidad procesada y retenida (y cobrada) por Application Insights.

Utilice este tipo de muestreo si con frecuencia su aplicación sobrepasa su cuota mensual y no tiene la opción de usar ninguno de los tipos de muestreo basados en el SDK.

Establecer la frecuencia de muestreo en la página Uso y costos estimados:

En el panel Información general de la aplicación, seleccione Configuración, Cuota y Muestras. Después, seleccione una frecuencia de muestreo y seleccione Actualizar.

Al igual que otros tipos de muestreo, el algoritmo conserva elementos de telemetría relacionados. Por ejemplo, cuando se inspeccione la telemetría en Búsqueda, puede buscar la solicitud relacionada con una excepción determinada. Los recuentos de métrica, como la tasa de solicitudes y la tasa de excepciones se mantienen correctamente.

El muestreo descarta determinados puntos de datos, lo que hace que no estén disponibles en ninguna característica de Application Insights como Exportación continua.

El muestreo de ingesta no funciona junto con el muestreo adaptable o el de frecuencia fija. El muestreo adaptable se activa automáticamente con el SDK de ASP.NET, el SDK de ASP.NET Core, en Azure App Service o con el agente de Application Insights. Cuando el punto de conexión de servicio de Application Insights recibe telemetría y detecta una frecuencia de muestreo inferior al 100 % (que indica el muestreo activo), omite cualquier frecuencia de muestreo de ingesta establecida.

Advertencia

El valor que se muestra en el icono del portal indica el valor que ha establecido para el muestreo de ingesta. Si un muestreo del SDK está en funcionamiento (muestreo adaptable o de frecuencia fija), no representa la frecuencia real de muestreo.

¿Qué tipo de muestreo debo utilizar?

Use el muestreo de ingesta si:

  • Sobrepasa con frecuencia su cuota mensual de telemetría.
  • Recibe muchos datos de telemetría de los exploradores web de los usuarios.
  • Usa una versión del SDK que no admite el muestreo; por ejemplo, las versiones de ASP.NET anteriores a la 2.0.

Use el muestreo de frecuencia fija si:

  • Necesita un muestreo sincronizado entre el cliente y el servidor para navegar entre eventos relacionados. Por ejemplo, las vistas de página y las solicitudes HTTP en Buscar al investigar eventos.
  • Está seguro del porcentaje de muestreo adecuado para la aplicación. Debe ser lo bastante alto como para obtener métricas precisas, pero inferior a la frecuencia que supera la cuota de precios y los valores de limitación.

Use el muestreo adaptable si:

Si no se cumplen las condiciones para usar las otras formas de muestreo, le recomendamos el muestreo adaptable. Esta opción está habilitada de manera predeterminada en el SDK de ASP.NET y ASP.NET Core. No reduce el tráfico hasta que se alcance un determinado índice mínimo; por lo tanto, los sitios con poco uso probablemente no se muestren.

¿Cómo se puede saber si el muestreo está en funcionamiento?

Use una consulta de Analytics para buscar la frecuencia de muestreo.

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

Si ve que RetainedPercentage para cualquier tipo es inferior a 100, se muestrea ese tipo de telemetría.

Importante

Application Insights no realiza el muestreo de los contadores de sesión, métricas (incluidas las métricas personalizadas) ni rendimiento de los tipos de telemetría en ninguna de las técnicas de muestreo. Estos tipos siempre se excluyen del muestreo, ya que la reducción en la precisión puede ser altamente indeseable para estos tipos de telemetría.

Precisión de las consultas de registro y frecuencia de muestreo elevadas

A medida que la aplicación se escala verticalmente, puede procesar docenas, cientos o miles de elementos de trabajo por segundo. Registrar un evento para cada uno de ellos no es rentable ni en términos de recursos. Application Insights utiliza el muestreo para adaptarse al creciente volumen de telemetría de una manera flexible y para controlar el uso y el costo de los recursos.

Advertencia

La integridad de la vista de un extremo a otro de una operación distribuida puede verse afectada si alguna aplicación de la operación distribuida ha activado el muestreo. Cada aplicación toma decisiones de muestreo diferentes en una operación distribuida, por lo que una aplicación puede guardar los datos de telemetría de un identificador de operación, mientras que otras aplicaciones pueden decidir no muestrear los datos de telemetría de ese mismo identificador de operación.

A medida que las frecuencias de muestreo aumentan, la precisión de las consultas basadas en registros disminuye y se infla. Solo afecta a la precisión de las consultas basadas en registros cuando el muestreo está habilitado y las tasas de muestreo están en un intervalo mayor (~ 60 %). El impacto varía en función de los tipos de telemetría, los recuentos de telemetría por operación y otros factores.

Los SDK usan métricas agregadas previamente para resolver problemas causados por el muestreo. Para más información sobre estas métricas, consulte Azure Application Insights: Azure Monitor | Microsoft Docs. Los SDK identifican las propiedades pertinentes de los datos registrados y extraen estadísticas antes del muestreo. Para minimizar el uso y los costos de los recursos, se agregan métricas. Este proceso da como resultado algunos elementos de telemetría de métricas por minuto, en lugar de miles de elementos de telemetría de eventos. Por ejemplo, estas métricas podrían notificar "que esta aplicación web procesó 25 solicitudes" a la cuenta MDM, con un itemCount de 100 en el registro de telemetría de solicitud enviado. Estas métricas agregadas previamente proporcionan números precisos y son confiables incluso cuando el muestreo afecta a los resultados de la consulta basada en registros. Puede verlas en el panel Métricas del portal de Application Insights.

Preguntas más frecuentes

¿El muestreo afecta a la precisión de las alertas?

  • Sí. Solo se pueden desencadenar alertas con datos sometidos a muestreo. El filtrado agresivo puede dar lugar a que no se activen alertas según lo previsto.

Nota:

El muestreo no se aplica a las métricas, pero se pueden derivar métricas de los datos sometidos a muestreo. De esta manera, el muestreo puede afectar indirectamente a la precisión de las alertas.

¿Cuál es el comportamiento de muestreo predeterminado en los SDK de ASP.NET y ASP.NET Core?

  • Si usa una de las versiones más recientes del SDK anterior, el muestreo adaptable está habilitado de manera predeterminada con cinco elementos de telemetría por segundo. De forma predeterminada, el sistema agrega dos nodos AdaptiveSamplingTelemetryProcessor: uno incluye el tipo Event en el muestreo, mientras que el otro lo excluye. Esta configuración limita la telemetría a cinco elementos de tipo Event y cinco elementos de todos los demás tipos combinados, lo que garantiza que se muestree Events por separado de otros tipos de telemetría.

Use los ejemplos de la sección anterior de esta página para cambiar este comportamiento predeterminado.

¿La telemetría se puede muestrear más de una vez?

  • No. Los elementos SamplingTelemetryProcessors omiten elementos de las consideraciones de muestreo si el elemento ya se ha muestreado. Lo mismo sucede para el muestreo de ingesta, que no aplicará el muestreo a los elementos ya muestreados en el propio SDK.

¿Por qué realizar un muestreo no consiste simplemente en "recopilar X por ciento de cada tipo de telemetría"?

  • Aunque este método de muestreo proporcionaría un nivel de precisión alto en las aproximaciones de métricas, destruiría la capacidad de poner en correlación datos de diagnóstico por usuario, sesión y solicitud, lo cual es crítico para el diagnóstico. Por lo tanto, el muestreo funciona mejor con directivas como "recopilar todos los elementos de telemetría para el X por ciento de los usuarios de la aplicación" o "recopilar toda la telemetría para el X por ciento de las solicitudes de la aplicación". Para los elementos de telemetría no asociados con las solicitudes (por ejemplo, el procesamiento asincrónico en segundo plano), la acción de reserva es "recopilar X por ciento de todos los elementos para cada tipo de telemetría".

¿Se puede cambiar el porcentaje de muestreo con el tiempo?

  • Sí, el muestreo adaptable cambia gradualmente el porcentaje de muestreo, en función del volumen de datos de telemetría observado en ese momento.

Si uso el muestreo de frecuencia fija, ¿cómo sé cuál es el porcentaje de muestreo que funciona mejor para mi aplicación?

  • Una manera de comenzar es con muestreo adaptable, averigüe qué velocidad elige (consulte la pregunta anterior) y luego cambie a muestreo de tasa fija con esa velocidad.

    Si no, lo tendrá que adivinar. Analice su uso actual de telemetría en Application Insights, observe las limitaciones que se produzcan y estime el volumen de telemetría recopilado. Estas tres entradas, junto con el plan de tarifa seleccionado, le sugerirán cuánto debería reducir el volumen de telemetría recopilado. Sin embargo, un aumento del número de usuarios o algún otro incremento en el volumen de datos de telemetría podrían provocar que la estimación no fuese válida.

¿Qué sucede si configuro un porcentaje de muestreo demasiado bajo?

  • Un porcentaje de muestreo excesivamente bajo provoca un muestreo excesivo y reduce la precisión de las aproximaciones cuando Application Insights intenta compensar la visualización de los datos por la reducción del volumen de datos. Además, la experiencia de diagnóstico puede verse afectada negativamente, ya que algunas de las solicitudes con poca frecuencia errores o lentas pueden quedar fuera del muestreo.

¿Qué sucede si configuro un porcentaje de muestreo demasiado alto?

  • Configurar un porcentaje de muestreo demasiado alto (no suficientemente drástico) da como resultado una reducción insuficiente del volumen de telemetría recopilada. Se pueden seguir produciendo pérdidas de datos de telemetría relacionadas con la limitación, y el costo de usar Application Insights puede ser mayor de lo planeado, debido a los cargos debidos al uso por encima del límite.

¿Qué ocurre si configuro los valores IncludedTypes y ExcludedTypes?

  • Es mejor no establecer ExcludedTypes ni IncludedTypes en la configuración para evitar conflictos y garantizar una configuración clara de recopilación de telemetría.
  • Los tipos de telemetría que aparecen en ExcludedTypes se excluyen incluso si también se establecen en la configuración de IncludedTypes. ExcludedTypes tendrá prioridad sobre IncludedTypes.

¿En qué plataformas puedo usar muestreo?

  • El muestreo de ingesta puede producirse automáticamente cuando cualquier dato de telemetría se sitúa por encima de un determinado volumen, si el SDK no realiza muestreo. Esta configuración funcionaría, por ejemplo, si usa una versión antigua del SDK de ASP.NET o del SDK de Java.
  • Si usa los SDK de ASP.NET o ASP.NET Core actuales (hospedado en Azure o en su propio servidor), obtendrá de forma predeterminada el muestreo adaptable, pero puede cambiar al de frecuencia fija como se ha descrito anteriormente. Con el muestreo de frecuencia fija, el SDK del explorador se sincroniza automáticamente con los eventos relacionados con el muestreo.
  • Si usa el agente de Java actual, puede configurar applicationinsights.json (para el SDK de Java, configure ApplicationInsights.xml) para activar el muestreo de frecuencia fija. De manera predeterminada, el muestreo está desactivado. Con el muestreo de frecuencia fija, el SDK del explorador y el servidor se sincronizan automáticamente para muestrear los eventos relacionados.

Hay ciertos eventos excepcionales que siempre quiero ver. ¿Cómo se consigue que el módulo de muestreo los reconozca?

  • La mejor forma de ver siempre ciertos eventos es escribir un objeto TelemetryInitializer personalizado, que establece SamplingPercentage en 100 en el elemento de telemetría que desee retener, tal como se muestra en el ejemplo siguiente. Se garantiza que los inicializadores se ejecutan antes que los procesadores de telemetría (incluido el muestreo), se tiene la seguridad de que todas las técnicas de muestreo omiten este elemento de cualquier consideración de muestreo. Se dispone de inicializadores de telemetría personalizados en el SDK de ASP.NET, el SDK de ASP.NET Core, el SDK de JavaScript y el SDK de Java. Por ejemplo, puede configurar un inicializador de telemetría mediante el SDK de ASP.NET:

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

Versiones anteriores de SDK

El muestreo adaptable está disponible para el SDK de Application Insights para ASP.NET v2.0.0-beta3 y versiones posteriores y el SDK de Microsoft.ApplicationInsights.AspNetCore v2.2.0-beta1 y versiones posteriores y está habilitado de manera predeterminada.

El muestreo de frecuencia fija es una característica del SDK de ASP.NET de la versión 2.0.0 y posteriores y del SDK de Java de la versión 2.0.1 y posteriores.

Antes de la versión 2.5.0-beta2 del SDK de ASP.NET y de la versión 2.2.0-beta3 del SDK de ASP.NET Core, las decisiones de muestreo para las aplicaciones que definen "usuario" (como la mayoría de las aplicaciones web) se basaban en el hash del identificador de usuario. En el caso de las aplicaciones que no definen usuarios (como los servicios web), se basa en la decisión sobre el identificador de operación de la solicitud. Las versiones recientes de ambos SDK, de ASP.NET y ASP.NET Core, ahora usan el identificador de operación para las decisiones de muestreo.

Pasos siguientes