Introdução ao EventCounters

EventCounter é o mecanismo .NET/.NET Core para publicar e consumir contadores ou estatísticas. Os EventCounters são suportados em todas as plataformas de SO - Windows, Linux e macOS. Ele pode ser pensado como um equivalente multiplataforma para o PerformanceCounters que só é suportado em sistemas Windows.

Embora os usuários possam publicar qualquer personalizado EventCounters para atender às suas necessidades, o .NET publica um conjunto desses contadores por padrão. Este documento percorre as etapas necessárias para coletar e exibir EventCounters (definido pelo sistema ou definido pelo usuário) no Azure 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 e nosso OpenTelemetry Roadmap. As diretrizes de migração estão disponíveis para .NET, Node.js e Python.

Usando o Application Insights para coletar EventCounters

O Application Insights oferece suporte à coleta EventCounters com seu EventCounterCollectionModule, que faz parte do recém-lançado pacote NuGet Microsoft.ApplicationInsights.EventCounterCollector. EventCounterCollectionModule é ativado automaticamente ao usar AspNetCore ou WorkerService. EventCounterCollectionModule Recolhe contadores com uma frequência de recolha não configurável de 60 segundos. Não há permissões especiais necessárias para coletar EventCounters. Para aplicativos ASP.NET Core, você também deseja 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 AspNetCore SDK ou do WorkerService SDK, nenhum contador é coletado por padrão. O módulo em si está ativado, para que os usuários possam adicionar os contadores desejados para coletá-los.

Para obter uma lista de contadores conhecidos publicados pelo .NET Runtime, consulte Documento Contadores disponíveis.

Personalização de contadores a serem coletados

O exemplo a seguir mostra como adicionar/remover contadores. Essa personalização seria feita como parte da configuração do serviço de aplicativo depois que a coleta de telemetria do Application Insights fosse habilitada usando um ou AddApplicationInsightsTelemetry() AddApplicationInsightsWorkerService(). A seguir está um exemplo de código de um aplicativo ASP.NET Core. Para outros tipos de aplicações, consulte 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"));
        }
    );

Desativando o módulo de coleta EventCounter

EventCounterCollectionModule pode ser desativado usando ApplicationInsightsServiceOptions.

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

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

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

Uma abordagem semelhante também pode ser usada para o SDK WorkerService, mas o namespace deve ser alterado conforme mostrado no exemplo a seguir.

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 métricas do EventCounter no Metric Explorer, selecione o recurso Application Insights e escolha métricas baseadas em log como namespace de métrica. Em seguida, as métricas do EventCounter são exibidas na categoria Personalizada.

Contadores de eventos relatados no Application Insights Metric Explorer

Contadores de eventos no Google Analytics

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

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

customMetrics | summarize avg(value) by name

Contadores de eventos relatados no Application Insights Analytics

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

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

Bate-papo de um único contador no Application Insights

Como outras telemetrias, customMetrics também tem uma coluna cloud_RoleInstance que indica a identidade da instância do servidor host na 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

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

Perguntas mais frequentes

Posso ver EventCounters em métricas ao vivo?

As métricas ao vivo não mostram EventCounters a partir de hoje. Use o Metric Explorer ou o Analytics para ver a telemetria.

Ativei o Application Insights do Portal do Aplicativo Web do Azure. Por que não consigo ver os Contadores de Eventos?

A extensão do Application Insights para ASP.NET Core ainda não oferece suporte a esse recurso.

Próximos passos