Introdução ao EventCounters

EventCounter é o mecanismo do .NET/.NET Core para publicar e consumir contadores ou estatísticas. Os EventCounters têm suporte em todas as plataformas de sistema operacional: Windows, Linux e macOS. Pode ser pensado como um equivalente multiplataforma para o PerformanceCounters que só tem suporte em sistemas Windows.

Embora os usuários possam publicar qualquer EventCounters personalizado para atender às suas necessidades, o .NET publica um conjunto desses contadores por padrão. Este documento explica as etapas necessárias para coletar e exibir o EventCounters (definido pelo sistema ou pelo usuário) no Azure 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.

Usar o Application Insights para coletar EventCounters

O Application Insights é compatível com a coleta de EventCounters com seu EventCounterCollectionModule, que faz parte do pacote NuGet recém-lançado Microsoft.ApplicationInsights.EventCounterCollector. EventCounterCollectionModule é habilitado automaticamente ao usar AspNetCore ou WorkerService. EventCounterCollectionModule coleta contadores com uma frequência de coleta não configurável de 60 segundos. Não há permissões especiais necessárias para coletar EventCounters. Para aplicativos ASP.NET Core, é recomendável também adicionar o pacote Microsoft.ApplicationInsights.AspNetCore.

dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore

Contadores padrão coletados

A partir da versão 2.15.0 do SDK do AspNetCore ou do SDK do WorkerService, nenhum contador é coletado por padrão. O próprio módulo está habilitado para que os usuários possam simplesmente adicionar os contadores desejados e coletá-los.

Para ver uma lista de contadores conhecidos publicados pelo runtime do .NET, confira o documento Contadores disponíveis.

Personalizar os contadores a serem coletados

O exemplo a seguir mostra como adicionar/remover contadores. Essa personalização seria feita como parte da configuração de serviço de aplicativo depois que a coleção de telemetria do Application Insights for habilitada usando AddApplicationInsightsTelemetry() ou AddApplicationInsightsWorkerService() . Veja a seguir um exemplo de código de um aplicativo ASP.NET Core. Para outros tipos de aplicativos, confira este documento.

using Microsoft.ApplicationInsights.Extensibility.EventCounterCollector;
using Microsoft.Extensions.DependencyInjection;

builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>(
        (module, o) =>
        {
            // Removes all default counters, if any.
            module.Counters.Clear();

            // Adds a user defined counter "MyCounter" from EventSource named "MyEventSource"
            module.Counters.Add(
                new EventCounterCollectionRequest("MyEventSource", "MyCounter"));

            // Adds the system counter "gen-0-size" from "System.Runtime"
            module.Counters.Add(
                new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
        }
    );

Desabilitar o módulo de coleta EventCounter

EventCounterCollectionModule pode ser desabilitado com ApplicationInsightsServiceOptions.

O exemplo a seguir usa o SDK do ASP.NET Core.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);

Também é possível usar uma abordagem semelhante para o SDK do WorkerService, mas o namespace precisa ser alterado conforme mostrado no exemplo abaixo.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);

Contadores de eventos no Metric Explorer

Para exibir as métricas do EventCounter no Metric Explorer, selecione o recurso Application Insights e escolha Métricas baseadas em log como namespace da métrica. Em seguida, as métricas EventCounter são exibidas em Categoria personalizada.

Event counters reported in Application Insights Metric Explorer

Contadores de evento no Analytics

Você também pode pesquisar e exibir relatórios de contador de eventos no Analytics, na tabela customMetrics.

Por exemplo, execute a consulta a seguir para ver quais contadores são coletados e estão disponíveis para consulta:

customMetrics | summarize avg(value) by name

Event counters reported in Application Insights Analytics

Para obter um gráfico de um contador específico (por exemplo: ThreadPool Completed Work Item Count) no período recente, execute a consulta a seguir.

customMetrics 
| where name contains "System.Runtime|ThreadPool Completed Work Item Count"
| where timestamp >= ago(1h)
| summarize  avg(value) by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Chat of a single counter in Application Insights

Como outras telemetrias, o customMetrics também tem uma coluna cloud_RoleInstance que indica a identidade da instância do servidor host no qual seu aplicativo está sendo executado. A consulta acima mostra o valor do contador por instância e pode ser usada para comparar o desempenho de diferentes instâncias de servidor.

Alertas

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

Perguntas frequentes

Posso ver o EventCounters no Live Metrics?

O Live Metrics não mostra o EventCounters a partir de hoje. Use o Metric Explorer ou o Analytics para ver a telemetria.

Habilitei o Application Insights no portal de aplicativo Web do Azure. Por que não consigo ver o EventCounters?

A extensão do Application Insights para ASP.NET Core ainda não é compatível com esse recurso.

Próximas etapas