Introducción a los contadores de eventos

EventCounter es el mecanismo de .NET/.NET Core para publicar y consumir contadores o estadísticas. Los contadores de eventos se admiten en todas las plataformas de sistema operativo (Windows, Linux y macOS). Puede considerarse un equivalente multiplataforma de los contadores de rendimiento que solo se admiten en los sistemas Windows.

Aunque los usuarios puedan publicar cualquier EventCounters personalizado que necesiten, .NET publicará un conjunto de estos contadores de forma predeterminada. En este documento se recorren los pasos necesarios para recopilar y ver EventCounters (definidos por el sistema o por el usuario) en Azure Application Insights.

Nota:

La siguiente documentación se basa en la API clásica de Application Insights. El plan a largo plazo de Application Insights consiste en recopilar datos mediante OpenTelemetry. Para más información, consulte Habilitación de Azure Monitor OpenTelemetry para aplicaciones de .NET, Node.js, Python y Java.

Uso de Application Insights para recopilar contadores de eventos

Application Insights admite la recopilación de EventCounters con su EventCounterCollectionModule, que forma parte del paquete NuGet Microsoft.ApplicationInsights.EventCounterCollector lanzado recientemente. EventCounterCollectionModule se habilita automáticamente al usar AspNetCore o WorkerService. EventCounterCollectionModule recopila contadores con una frecuencia de recopilación no configurable de 60 segundos. No se requieren permisos especiales para recopilar contadores de eventos. Para aplicaciones ASP.NET Core, también quiere agregar el paquete Microsoft.ApplicationInsights.AspNetCore.

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

Contadores predeterminados recopilados

A partir de la versión 2.15.0 del SDK de AspNetCore o SDK de WorkerService, no se recopila ningún contador de forma predeterminada. El propio módulo está habilitado, por lo que los usuarios pueden agregar los contadores deseados para recopilarlos.

Para obtener una lista de los contadores conocidos que se hayan publicado en el Runtime de .NET, consulte el documento de los Contadores disponibles.

Personalización de los contadores que se van a recopilar

El ejemplo siguiente muestra cómo agregar/quitar contadores. Esta personalización se llevaría a cabo como parte de la configuración de su servicio de aplicación después de que se haya habilitado la recopilación de telemetría de Application Insights mediante AddApplicationInsightsTelemetry() o AddApplicationInsightsWorkerService(). A continuación se muestra un ejemplo de código de una aplicación ASP.NET Core. Para otros tipos de aplicaciones, 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"));
        }
    );

Deshabilitación del módulo de recopilación EventCounter

EventCounterCollectionModule se puede deshabilitar mediante ApplicationInsightsServiceOptions.

En el ejemplo siguiente se usa el SDK de ASP.NET Core.

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

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

También se puede usar un enfoque similar para el SDK de WorkerService, pero se debe cambiar el espacio de nombres tal y como se muestra en el ejemplo siguiente.

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

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

Los contadores de eventos en el explorador de métricas

Para ver las métricas de EventCounter en el explorador de métricas, seleccione el recurso de Application Insights y elija las métricas basadas en registros como espacio de nombres de métrica. Después, las métricas de EventCounter se mostrarán en la categoría Custom.

Event counters reported in Application Insights Metric Explorer

Contadores de eventos en Analytics

También puede buscar y mostrar informes de los contadores de eventos en Analytics, en la tabla customMetrics.

Por ejemplo, ejecute la siguiente consulta para ver qué contadores se recopilan y están disponibles para consulta:

customMetrics | summarize avg(value) by name

Event counters reported in Application Insights Analytics

Para un gráfico de un contador específico (por ejemplo, ThreadPool Completed Work Item Count) en el período más reciente, ejecute la consulta siguiente.

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

Al igual que otros datos de telemetría, customMetrics también tiene una columna cloud_RoleInstance que indica la identidad de la instancia del servidor host en el que se ejecuta la aplicación. La consulta anterior muestra el valor del contador por instancia y se puede usar para comparar el rendimiento de las distintas instancias del servidor.

Alertas

Al igual que otras métricas, puede establecer una alerta para advertirle si un contador de eventos supera un límite especificado. Abra el panel "Alertas" y seleccione "Agregar alerta".

Preguntas más frecuentes

¿Puedo ver los contadores de eventos en Live Metrics?

A día de hoy, Live Metrics no muestra los contadores de eventos. Para ver la telemetría, use el explorador de métricas o el análisis.

He habilitado Application Insights en el portal de aplicaciones web de Azure, ¿Por qué no puedo ver EventCounters?

La extensión de Application Insights para ASP.NET Core aún no admite esta característica.

Pasos siguientes