Contadores de rendimiento de sistema en Application Insights

Windows proporciona una variedad de contadores de rendimiento, como las que se usan para obtener las estadísticas de uso del disco, la memoria y el procesador. También puede definir sus propios contadores de rendimiento.

La colección de contadores de rendimiento es compatible si la aplicación se ejecuta en IIS en un host local o si es una máquina virtual para la que tenga acceso administrativo. Aunque las aplicaciones que se ejecutan como Azure Web Apps no tienen acceso directo a los contadores de rendimiento, Application Insights recopila un subconjunto de contadores disponibles.

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.

Requisitos previos

Conceda permiso a la cuenta de servicio del grupo de aplicaciones para supervisar los contadores de rendimiento agregándola al grupo Usuarios del monitor de sistema.

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"

Visualización de contadores

El panel Métricas muestra el conjunto predeterminado de contadores de rendimiento.

Screenshot that shows performance counters reported in Application Insights.

Contadores predeterminados actuales para aplicaciones web de ASP.NET:

  • % Process\Processor Time
  • % Process\Processor Time Normalized
  • Memory\Available Bytes
  • Solicitudes de ASP.NET/segundo
  • Excepciones de .NET CLR iniciadas/segundo
  • Tiempo de ejecución de solicitudes de aplicaciones ASP.NET
  • Proceso\Bytes privados
  • Process\IO Data Bytes/sec
  • ASP.NET Applications\Requests In Application Queue
  • Processor(_Total)\% de tiempo de procesador

Los contadores predeterminados actuales que se recopilan para aplicaciones web de ASP.NET Core son:

  • % Process\Processor Time
  • % Process\Processor Time Normalized
  • Memory\Available Bytes
  • Proceso\Bytes privados
  • Process\IO Data Bytes/sec
  • Processor(_Total)\% de tiempo de procesador

Adición de contadores

Si el contador de rendimiento que quiere no está incluido en la lista de métricas, puede agregarlo.

  1. Averigüe qué contadores están disponibles en el servidor mediante este comando de PowerShell en el servidor local:

    Get-Counter -ListSet *
    

    Para obtener más información, vea Get-Counter.

  2. Abra ApplicationInsights.config.

    He agregado Application Insights a mi aplicación durante el desarrollo:

    1. Edite ApplicationInsights.config en el proyecto.
    2. Vuelva a implementarlo en los servidores.
  3. Edite la directiva del recopilador de rendimiento:

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

Nota

Las aplicaciones de ASP.NET Core no tienen ApplicationInsights.config, por lo que el método anterior no es válido para aplicaciones de ASP.NET Core.

Puede capturar tanto los contadores estándar como los que ha implementado usted mismo. \Objects\Processes es un ejemplo de contador estándar que está disponible en todos los sistemas Windows. \Sales(photo)\# Items Sold es un ejemplo de contador personalizado que podría implementarse en un servicio web.

El formato es \Category(instance)\Counter o, para las categorías que no tienen instancias, simplemente \Category\Counter.

El parámetro ReportAs es necesario para los nombres de contador que no coinciden con [a-zA-Z()/-_ \.]+. Es decir, contienen caracteres que no están en los siguientes conjuntos: letras, paréntesis, barra diagonal, guion, subrayado, espacio y punto.

Si especifica una instancia, se recopilará como una dimensión CounterInstanceName de la métrica notificada.

Recopilación de contadores de rendimiento en el código para aplicaciones web de ASP.NET o aplicaciones de consola de .NET/.NET Core

Para recopilar contadores de rendimiento del sistema y enviarlos a Application Insights, puede adaptar el siguiente fragmento:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

También puede hacer lo mismo con las métricas personalizadas que haya creado:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Recopilación de contadores de rendimiento en el código para aplicaciones web de ASP.NET Core

Agregue PerformanceCollectorModule después del método WebApplication.CreateBuilder() en Program.cs:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
    {
        // The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
        module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
    });

var app = builder.Build();

Contadores de rendimiento en Log Analytics

Puede buscar y mostrar informes de contador de rendimiento en Log Analytics.

El esquema performanceCounters expone category, el nombre de counter y el nombre de instance de cada contador de rendimiento. En la telemetría de cada aplicación, solo se ven los contadores de dicha aplicación. Por ejemplo, para ver qué contadores están disponibles:

Screenshot that shows performance counters in Application Insights analytics.

Aquí, Instance hace referencia a la instancia de contador de rendimiento, no al rol ni a la instancia de máquina de servidor. El nombre de la instancia del contador de rendimiento normalmente segmenta contadores, como el tiempo de procesador, por el nombre del proceso o la aplicación.

Para obtener un gráfico de la memoria disponible en un período reciente:

Screenshot that shows a memory time chart in Application Insights analytics.

Al igual que otros datos de telemetría, performanceCounters también tiene una columna cloud_RoleInstance que indica la identidad de la instancia del servidor host en el que se ejecuta la aplicación. Por ejemplo, para comparar el rendimiento de una aplicación en distintas máquinas:

Screenshot that shows performance segmented by role instance in Application Insights analytics.

Recuentos de ASP.NET y Application Insights

En las secciones siguientes se describen los recuentos de ASP.NET y Application Insights.

¿En qué se diferencian la tasa de excepciones y las métricas de excepciones?

  • Exception rate: la tasa de excepciones es un contador de rendimiento del sistema. El CLR cuenta todas las excepciones controladas y no controladas que se producen, y divide el total de un intervalo de muestreo entre la duración del intervalo. El SDK de Application Insights recopila este resultado y lo envía al portal.
  • Exceptions: la métrica de Excepciones es un recuento de los informes de TrackException recibidos a través del portal en el intervalo de muestreo del gráfico. Incluye solo las excepciones controladas en las que ha escrito TrackException llamadas en el código. No incluye todas las excepciones no controladas.

Contadores de rendimiento para aplicaciones que se ejecutan en Azure Web Apps y contenedores de Windows en Azure App Service

Las aplicaciones de ASP.NET y ASP.NET Core implementadas en Azure Web Apps se ejecutan en un entorno de espacio aislado especial. Las aplicaciones implementadas en Azure App Service pueden usar un contenedor de Windows u hospedarse en un entorno de espacio aislado. Si la aplicación se implementa en un contenedor de Windows, todos los contadores de rendimiento estándar estarán disponibles en la imagen de contenedor.

Este entorno de espacio aislado no permite el acceso directo a los contadores de rendimiento del sistema. Sin embargo, un subconjunto limitado de contadores se expone como variables de entorno, como se describe en Contadores de rendimiento expuestos como variables de entorno. Solo un subconjunto de contadores está disponible en este entorno. Para obtener la lista completa, consulte Contadores de rendimiento expuestos como variables de entorno.

El SDK de Application Insights para ASP.NET y ASP.NET Core detecta si el código se implementa en una aplicación web y un contenedor que no sea de Windows. La detección determina si recopila contadores de rendimiento en un entorno de espacio aislado o si utiliza el mecanismo de recopilación estándar cuando se hospeda en un contenedor o una máquina virtual Windows.

Contadores de rendimiento en aplicaciones de ASP.NET Core

La compatibilidad con los contadores de rendimiento en ASP.Net Core es limitada:

  • Las versiones 2.4.1 y posteriores del SDK recopilan contadores de rendimiento si la aplicación se ejecuta en Azure Web Apps (Windows).
  • Las versiones 2.7.1 y posteriores del SDK recopilan contadores de rendimiento si la aplicación se ejecuta en Windows y tiene como destino NETSTANDARD2.0 o una versión posterior.
  • Para las aplicaciones que tienen como destino .NET Framework, todas las versiones del SDK admiten contadores de rendimiento.
  • Las versiones 2.8.0 y posteriores del SDK admiten el contador de CPU/memoria de Linux. No se admite ningún otro contador en Linux. Para obtener contadores del sistema en Linux (y otros entornos que no son Windows), use EventCounters.

Alertas

Al igual que otras métricas, puede establecer una alerta para advertirle si un contador de rendimiento queda fuera de un límite especificado. Para establecer una alerta, abra el panel Alertas y seleccione Agregar alerta.

Pasos siguientes