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, vea Habilitación de OpenTelemetry de Azure Monitor para aplicaciones de .NET, Node.js, Python y Java y nuestro plan de desarrollo de OpenTelemetry. La guía de migración está disponible para .NET, Node.jsy Python.
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.
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
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
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.