Contadores para .NET no Application Insights
O Azure MonitorApplication Insights oferece suporte a contadores de desempenho e contadores de eventos. Este guia fornece uma visão geral de ambos, incluindo sua finalidade, configuração e uso em aplicativos .NET.
Cuidado
Recomendamos a Distribuição do OpenTelemetry do Azure Monitor para novos aplicativos ou clientes para impulsionar o Application Insights do Azure Monitor. A Distribuição do OpenTelemetry do Azure Monitor oferece funcionalidade e experiência semelhantes às do SDK do Application Insights. É possível migrar do SDK do Application Insights usando os guias de migração para .NET, Node.js e Python, mas ainda estamos trabalhando para adicionar mais alguns recursos para compatibilidade com versões anteriores.
Visão geral
- Os contadores de desempenho são integrados ao sistema operacional Windows e oferecem métricas predefinidas, como uso da CPU, consumo de memória e atividade de disco. Esses contadores são ideais para monitorar métricas de desempenho padrão com configuração mínima. Eles ajudam a controlar a utilização de recursos ou a solucionar problemas de gargalos no nível do sistema em aplicativos baseados no Windows, mas não oferecem suporte a métricas personalizadas específicas do aplicativo.
- Os contadores de eventos funcionam em várias plataformas, incluindo Windows, Linux e macOS. Eles permitem que os desenvolvedores definam e monitorem métricas leves e personalizáveis específicas do aplicativo, proporcionando mais flexibilidade do que os contadores de desempenho. Os contadores de eventos são úteis quando as métricas do sistema são insuficientes ou quando a telemetria detalhada é necessária em aplicativos entre plataformas. Eles exigem implementação e configuração explícitas, o que torna a instalação mais trabalhosa.
Configurando contadores
O Windows fornece vários contadores de desempenho, como os usados para coletar estatísticas de uso do processador, da memória e do disco. Também é possível definir contadores de desempenho próprios.
Seu aplicativo dá suporte à coleta de contadores de desempenho se for executado no IIS (Internet Information Server) em um host local ou em uma máquina virtual com acesso administrativo. Os aplicativos em execução como os Aplicativos Web do Azure não podem acessar diretamente contadores de desempenho, mas o Application Insights coleta um subconjunto de contadores disponíveis.
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.
Contadores padrão 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 do CLR (Common Language Runtime) do .NET lançadas/s
- 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 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.
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
.Abra o
ApplicationInsights.config
.Se você adicionou o Application Insights ao seu aplicativo durante o desenvolvimento:
- Edite
ApplicationInsights.config
no projeto. - Reimplante-o em seus servidores.
- Edite
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.
Capture os contadores padrão e os contadores que você mesmo implementa.
\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()/-_ \.]+
.
Se você especificar uma instância, ela se tornará uma dimensão CounterInstanceName
da métrica relatada.
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 do ASP.NET e do Application Insights
As próximas seções discutem ASP.NET e contagens do Application Insights.
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 os contadores do sistema no Linux (e em outros ambientes que não sejam Windows), use os contadores de eventos.
Consultas do 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 desse aplicativo. Por exemplo, para ver quais contadores estão disponíveis:
performanceCounters | summarize count(), avg(value) by category, instance, counter
Aqui, Instance
se refere à instância do contador de desempenho, não à função ou à instância do computador do servidor. 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:
performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart
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:
performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
Alertas
Como outras métricas, você pode definir um alerta para avisar se um contador ultrapassar um limite especificado.
Para definir um alerta, abra o painel Alertas e selecione Adicionar Alerta.
Perguntas frequentes
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 conta os relatóriosTrackException
recebidos pelo portal no intervalo de amostragem do gráfico. Ela inclui apenas as exceções tratadas nas quais você escreve chamadasTrackException
em seu código. Não inclui todas as exceções sem tratamento.