Contadores de desempenho do sistema no Application Insights

O Windows fornece uma variedade de contadores de desempenho, como aqueles usados para coletar estatísticas de uso de processador, memória e disco. Você também pode definir seus próprios contadores de desempenho.

A coleta de contadores de desempenho é suportada se seu aplicativo estiver sendo executado no IIS em um host local ou se for uma máquina virtual à qual você tenha acesso administrativo. Embora os aplicativos executados como Aplicativos Web do Azure não tenham acesso direto aos contadores de desempenho, um subconjunto de contadores disponíveis é coletado pelo Application Insights.

Nota

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

Pré-requisitos

Conceda permissão à conta de serviço do pool de aplicativos para monitorar contadores de desempenho adicionando-a ao grupo Usuários do Monitor de Desempenho.

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

Ver contadores

O painel Métricas mostra o conjunto padrão de contadores de desempenho.

Screenshot that shows performance counters reported in Application Insights.

Contadores padrão atuais para ASP.NET aplicativos Web:

  • % Processo\Tempo do processador
  • % Processo\Tempo do processador normalizado
  • Memória\Bytes disponíveis
  • ASP.NET pedidos/seg
  • Exceções CLR do .NET lançadas/s
  • ASP.NET AplicaçõesSolicitar Tempo de Execução
  • Processo\Bytes privados
  • Processar\Bytes de dados de E/S/s
  • ASP.NET Aplicativos\Solicitações na fila de aplicativos
  • Processador(_Total)\% Tempo do processador

Contadores padrão atuais coletados para ASP.NET aplicativos Web principais:

  • % Processo\Tempo do processador
  • % Processo\Tempo do processador normalizado
  • Memória\Bytes disponíveis
  • Processo\Bytes privados
  • Processar\Bytes de dados de E/S/s
  • Processador(_Total)\% Tempo do processador

Adicionar contadores

Se o contador de desempenho desejado não estiver incluído na lista de métricas, você poderá adicioná-lo.

  1. Descubra quais contadores estão disponíveis em seu servidor usando este comando do PowerShell no servidor local:

    Get-Counter -ListSet *
    

    Para obter mais informações, veja Get-Counter.

  2. Abrir ApplicationInsights.config.

    Se você adicionou o Application Insights ao seu aplicativo durante o desenvolvimento:

    1. Edite ApplicationInsights.config no seu projeto.
    2. Reimplante-o em seus servidores.
  3. Edite a diretiva do coletor de desempenho:

    
        <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

ASP.NET aplicativos Core não têm ApplicationInsights.config, portanto, o método anterior não é válido para aplicativos ASP.NET Core.

Você pode capturar contadores padrão e contadores que você mesmo implementou. \Objects\Processes é um exemplo de um contador padrão que está disponível em todos os sistemas Windows. \Sales(photo)\# Items Sold é um exemplo de um contador personalizado que pode ser implementado em um serviço Web.

O formato é \Category(instance)\Counter, ou para categorias que não têm instâncias, apenas \Category\Counter.

O ReportAs parâmetro é necessário para nomes de contadores que não correspondem ao [a-zA-Z()/-_ \.]+. Ou seja, eles contêm caracteres que não estão nos seguintes conjuntos: letras, colchetes redondos, barra para frente, hífen, sublinhado, espaço e ponto.

Se você especificar uma instância, ela será coletada como uma dimensão CounterInstanceName da métrica relatada.

Coletar contadores de desempenho em código para aplicativos Web ASP.NET ou aplicativos de console .NET/.NET Core

Para coletar contadores de desempenho do sistema e enviá-los para o Application Insights, você pode adaptar o seguinte trecho:

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

Ou você pode fazer a mesma coisa com métricas personalizadas que você criou:

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

Coletar contadores de desempenho no código para ASP.NET aplicativos Web principais

Configure PerformanceCollectorModule após o WebApplication.CreateBuilder() método em 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 desempenho no Log Analytics

Você pode pesquisar e exibir relatórios do contador de desempenho no Log Analytics.

O esquema performanceCounters expõe o categorycounter , nome e instance nome de cada contador de desempenho. Na telemetria de cada aplicativo, você verá apenas os contadores desse aplicativo. Por exemplo, para ver quais contadores estão disponíveis:

Screenshot that shows performance counters in Application Insights analytics.

Aqui, refere-se à instância do contador de desempenho, Instance não à instância da função ou da máquina do servidor. O nome da instância do contador de desempenho normalmente segmenta os contadores, como o tempo do processador, pelo nome do processo ou aplicativo.

Para obter um gráfico de memória disponível durante o período recente:

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

Como outras telemetrias, performanceCounters também tem uma coluna cloud_RoleInstance que indica a identidade da instância do servidor host na qual seu aplicativo está sendo executado. Por exemplo, para comparar o desempenho do seu aplicativo nas diferentes máquinas:

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

Contagens de ASP.NET e Application Insights

As próximas seções discutem ASP.NET e contagens do Application Insights.

Qual é a diferença entre as métricas Taxa de exceção e Exceções?

  • Exception rate: A taxa de exceção é um contador de desempenho do sistema. O CLR conta todas as exceções manipuladas e não tratadas que são lançadas e divide o total em um intervalo de amostragem pelo comprimento do intervalo. O SDK do Application Insights coleta esse resultado e o envia para o portal.
  • Exceptions: A métrica Exceções é uma contagem dos TrackException relatórios recebidos pelo portal no intervalo de amostragem do gráfico. Inclui apenas as exceções tratadas em que você escreveu TrackException chamadas em seu código. Ele não inclui todas as exceções não tratadas.

Contadores de desempenho para aplicações em execução nas Aplicações Web do Azure e contentores do Windows no Serviço de Aplicações do Azure

Os aplicativos ASP.NET e ASP.NET Core implantados nos Aplicativos Web do Azure são executados em um ambiente de área restrita especial. Os aplicativos implantados no Serviço de Aplicativo do Azure podem utilizar um contêiner do Windows ou ser hospedados em um ambiente de área restrita. Se o aplicativo for implantado em um contêiner do Windows, todos os contadores de desempenho padrão estarão disponíveis na imagem do contêiner.

O ambiente de área restrita não permite acesso direto aos contadores de desempenho do sistema. No entanto, um subconjunto limitado de contadores é exposto como variáveis de ambiente, conforme descrito em Contadores de Perf expostos como variáveis de ambiente. Apenas um subconjunto de contadores está disponível neste ambiente. Para obter a lista completa, consulte Contadores Perf expostos como variáveis de ambiente.

O SDK do Application Insights para ASP.NET e ASP.NET Core deteta se o código é implantado em um aplicativo Web ou em um contêiner que não seja do Windows. A deteção determina se ele coleta contadores de desempenho em um ambiente de área restrita ou utiliza o mecanismo de coleta padrão quando hospedado em um contêiner do Windows ou máquina virtual.

Contadores de desempenho em aplicativos ASP.NET Core

O suporte para contadores de desempenho no ASP.NET Core é limitado:

  • As versões 2.4.1 e posteriores do SDK coletam contadores de desempenho se o aplicativo estiver sendo executado nos Aplicativos Web do Azure (Windows).
  • As versões 2.7.1 e posteriores do SDK coletam contadores de desempenho se o aplicativo estiver sendo executado no Windows e de destino NETSTANDARD2.0 ou posterior.
  • Para aplicativos destinados ao .NET Framework, todas as versões do SDK suportam contadores de desempenho.
  • As versões 2.8.0 e posteriores do SDK suportam o contador CPU/Memória no Linux. Nenhum outro contador é suportado no Linux. Para obter contadores de sistema no Linux (e em outros ambientes que não sejam Windows), use EventCounters.

Alertas

Como outras métricas, você pode definir um alerta para avisá-lo se um contador de desempenho ultrapassar um limite especificado. Para definir um alerta, abra o painel Alertas e selecione Adicionar alerta.

Próximos passos