Contadores de desempenho do sistema no Application Insights

O Windows fornece uma variedade de contadores de desempenho, como os usados para coletar estatísticas de uso de processador, memória e disco. Também é possível definir contadores de desempenho próprios.

Há suporte para coleção de contadores de desempenho se o aplicativo está em execução no IIS em um host local ou é uma máquina virtual à qual você tem 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.

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, confira Habilitar o OpenTelemetry do Azure Monitor para aplicativos .NET, Node.js, Python e Java.

Pré-requisitos

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

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

Visualizar 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 aplicativos Web ASP.NET:

  • % Processo\Tempo do processador
  • % Processo\Tempo do processador normalizado
  • Memória\Bytes disponíveis
  • Solicitações de ASP.NET/segundo
  • Exceções .NET CLR lançadas/segundo
  • Tempo de execução de solicitação de aplicativos ASP.NET
  • Processo\Bytes Particulares
  • Processo\Bytes de dados de E/S/segundo
  • Aplicativos ASP.NET\Solicitações em Fila de Aplicativos
  • Processor(_Total)\% Processor Time

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

  • % Processo\Tempo do processador
  • % Processo\Tempo do processador normalizado
  • Memória\Bytes disponíveis
  • Processo\Bytes Particulares
  • Processo\Bytes de dados de E/S/segundo
  • Processor(_Total)\% Processor Time

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 no servidor usando este comando do PowerShell no servidor local:

    Get-Counter -ListSet *
    

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

  2. Abra o ApplicationInsights.config.

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

    1. Edite ApplicationInsights.config no 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>
    

Observação

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

É possível capturar contadores padrão e os contadores que você implementou por conta própria. \Objects\Processes é um exemplo de um contador padrão, 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 apenas \Category\Counter para categorias que não têm instâncias.

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

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

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

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

    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 aplicativos Web ASP.NET Core

Configure PerformanceCollectorModule após o método WebApplication.CreateBuilder() 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 nome category, counter e o nome instance de cada contador de desempenho. Na telemetria de cada aplicativo, você verá apenas os contadores para aquele aplicativo. Por exemplo, para ver quais contadores estão disponíveis:

Screenshot that shows performance counters in Application Insights analytics.

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

Para obter um gráfico da memória disponível no período recente:

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

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

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

Contadores do ASP.NET e do Application Insights

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

Qual é a diferença entre a Taxa de exceções e as Métricas de exceções?

  • Exception rate: a taxa de exceções é um contador de desempenho do sistema. O CLR conta todas as exceções tratadas e sem tratamento que são lançadas, e divide o total em um intervalo de amostragem pela duração 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 relatórios TrackException recebidos pelo portal no intervalo de amostragem do gráfico. Inclui apenas as exceções tratadas em que você escreveu chamadas TrackException em seu código. Não inclui todas as exceções sem tratamento.

Contadores de desempenho para aplicativos em execução nos Aplicativos Web do Azure e Contêineres do Windows no Serviço de Aplicativo 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 de 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 de 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 Perf expostos como variáveis de ambiente. Só um subconjunto de contadores está disponível nesse ambiente. Para obter a lista completa, confira Contadores perf expostos como variáveis de ambiente.

O SDK do Application Insights para ASP.NET e ASP.NET Core detecta se o código é implantado em um aplicativo Web e em um contêiner não Windows. A detecção determina se eles vão coletar contadores de desempenho em um ambiente de área restrita ou usando o mecanismo de coleta padrão quando hospedados em um contêiner ou máquina virtual do Windows.

Contadores de desempenho em aplicativos do ASP.Net Core

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

  • As versões 2.4.1 e posteriores do SDK coletarão contadores de desempenho se o aplicativo estiver sendo executado em aplicativos Web do Azure (Windows).
  • As versões 2.7.1 e posteriores do SDK coletarão contadores de desempenho se o aplicativo estiver sendo executado no Windows e se destinar a NETSTANDARD2.0 ou posterior.
  • Para aplicativos destinados a .NET Framework, todas as versões do SDK dão suporte a contadores de desempenho.
  • As versões 2.8.0 e posteriores dão suporte ao contador de CPU/memória no Linux. Nenhum outro contador tem suporte no Linux. Para obter contadores do sistema no Linux (e em outros ambientes não Windows), use EventCounters.

Alertas

Assim como ocorre com outras métricas, você pode definir um alerta para avisar se um contador de desempenho fica fora de um limite especificado. Para definir um alerta, abra o painel Alertas e selecione Adicionar Alerta.

Próximas etapas