Contadores de .NET en Application Insights
Azure MonitorApplication Insights admite contadores de rendimiento y contadores de eventos. En esta guía se proporciona información general sobre ambos, incluidos su propósito, configuración y uso en aplicaciones .NET.
Precaución
Se recomienda la Distribución de OpenTelemetry de Azure Monitor para nuevas aplicaciones o clientes para potenciar Application Insights de Azure Monitor. La Distribución de OpenTelemetry de Azure Monitor ofrece una funcionalidad y experiencia similares al SDK de Application Insights. Es posible migrar desde el SDK de Application Insights usando las guías de migración para .NET, Node.js, y Python, pero todavía estamos trabajando para agregar unas pocas características más para la compatibilidad con versiones anteriores.
Información general
- Los Contadores de rendimiento están integrados en el sistema operativo Windows y ofrecen métricas predefinidas, como el uso de CPU, el consumo de memoria y la actividad de disco. Estos contadores son ideales para supervisar las métricas de rendimiento estándar con una configuración mínima. Ayudan a realizar un seguimiento del uso de recursos o a solucionar problemas de cuellos de botella de nivel del sistema en aplicaciones basadas en Windows, pero no admiten métricas personalizadas específicas de la aplicación.
- Los Contadores de eventos funcionan en varias plataformas, como Windows, Linux y macOS. Permiten a los desarrolladores definir y supervisar métricas ligeras y personalizables específicas de la aplicación, lo que proporciona más flexibilidad que los contadores de rendimiento. Los contadores de eventos son útiles cuando las métricas del sistema son insuficientes o cuando se necesita telemetría detallada en aplicaciones multiplataforma. Requieren implementación y configuración explícitas, lo que hace que la configuración sea más intensiva.
Configuración de contadores
Windows proporciona varios contadores de rendimiento, como los que se usan para obtener las estadísticas de uso del disco, la memoria y el procesador. También puede definir sus propios contadores de rendimiento.
La aplicación admite la recopilación de contadores de rendimiento si se ejecuta en Internet Information Server (IIS) en un host local o en una máquina virtual con acceso administrativo. Las aplicaciones que se ejecutan como Azure Web Apps no pueden acceder directamente a los contadores de rendimiento, pero Application Insights recopila un subconjunto de contadores disponibles.
Requisitos previos
Conceda permiso a la cuenta de servicio del grupo de aplicaciones para supervisar los contadores de rendimiento agregándola al grupo Usuarios del monitor de sistema.
net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"
Visualización de contadores
El panel Métricas muestra el conjunto predeterminado de contadores de rendimiento.
Contadores predeterminados para aplicaciones web de ASP.NET:
- % Process\Processor Time
- % Process\Processor Time Normalized
- Memory\Available Bytes
- Solicitudes de ASP.NET/segundo
- Excepciones de .NET Common Language Runtime (CLR) producidas por segundo
- Tiempo de ejecución de solicitudes de aplicaciones ASP.NET
- Proceso\Bytes privados
- Process\IO Data Bytes/sec
- ASP.NET Applications\Requests In Application Queue
- Processor(_Total)\% de tiempo de procesador
Contadores predeterminados para aplicaciones web de ASP.NET Core:
- % Process\Processor Time
- % Process\Processor Time Normalized
- Memory\Available Bytes
- Proceso\Bytes privados
- Process\IO Data Bytes/sec
- Processor(_Total)\% de tiempo de procesador
Adición de contadores
Si el contador de rendimiento que quiere no está incluido en la lista de métricas, puede agregarlo.
Averigüe qué contadores están disponibles en el servidor mediante este comando de PowerShell en el servidor local:
Get-Counter -ListSet *
Para obtener más información, vea
Get-Counter
.Abra
ApplicationInsights.config
.He agregado Application Insights a mi aplicación durante el desarrollo:
- Edite
ApplicationInsights.config
en el proyecto. - Vuelva a implementarlo en los servidores.
- Edite
Edite la directiva del recopilador de rendimiento:
<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>
Nota
Las aplicaciones de ASP.NET Core no tienen ApplicationInsights.config
, por lo que el método anterior no es válido para aplicaciones de ASP.NET Core.
Capture tanto contadores estándar como contadores que implemente usted mismo.
\Objects\Processes
es un ejemplo de contador estándar que está disponible en todos los sistemas Windows.
\Sales(photo)\# Items Sold
es un ejemplo de contador personalizado que podría implementarse en un servicio web.
El formato es \Category(instance)\Counter
o, para las categorías que no tienen instancias, simplemente \Category\Counter
.
El parámetro ReportAs
es necesario para los nombres de contador que no coinciden con [a-zA-Z()/-_ \.]+
.
Si especifica una instancia, se convierte en una dimensión CounterInstanceName
de la métrica notificada.
Recopilación de contadores de rendimiento en el código para aplicaciones web de ASP.NET o aplicaciones de consola de .NET/.NET Core
Para recopilar contadores de rendimiento del sistema y enviarlos a Application Insights, puede adaptar el siguiente fragmento:
var perfCollectorModule = new PerformanceCollectorModule();
perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
@"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
perfCollectorModule.Initialize(TelemetryConfiguration.Active);
También puede hacer lo mismo con las métricas personalizadas que haya creado:
var perfCollectorModule = new PerformanceCollectorModule();
perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
@"\Sales(photo)\# Items Sold", "Photo sales"));
perfCollectorModule.Initialize(TelemetryConfiguration.Active);
Recopilación de contadores de rendimiento en el código para aplicaciones web de ASP.NET Core
Agregue PerformanceCollectorModule
después del método WebApplication.CreateBuilder()
en 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();
Recuentos de ASP.NET y Application Insights
En las secciones siguientes se describen los recuentos de ASP.NET y Application Insights.
Contadores de rendimiento para aplicaciones que se ejecutan en Azure Web Apps y contenedores de Windows en Azure App Service
Las aplicaciones de ASP.NET y ASP.NET Core implementadas en Azure Web Apps se ejecutan en un entorno de espacio aislado especial. Las aplicaciones implementadas en Azure App Service pueden usar un contenedor de Windows u hospedarse en un entorno de espacio aislado. Si la aplicación se implementa en un contenedor de Windows, todos los contadores de rendimiento estándar estarán disponibles en la imagen de contenedor.
Este entorno de espacio aislado no permite el acceso directo a los contadores de rendimiento del sistema. Sin embargo, un subconjunto limitado de contadores se expone como variables de entorno, como se describe en Contadores de rendimiento expuestos como variables de entorno. Solo un subconjunto de contadores está disponible en este entorno. Para obtener la lista completa, consulte Contadores de rendimiento expuestos como variables de entorno.
El SDK de Application Insights para ASP.NET y ASP.NET Core detecta si el código se implementa en una aplicación web y un contenedor que no sea de Windows. La detección determina si recopila contadores de rendimiento en un entorno de espacio aislado o si utiliza el mecanismo de recopilación estándar cuando se hospeda en un contenedor o una máquina virtual Windows.
Contadores de rendimiento en aplicaciones de ASP.NET Core
La compatibilidad con los contadores de rendimiento en ASP.Net Core es limitada:
- Las versiones 2.4.1 y posteriores del SDK recopilan contadores de rendimiento si la aplicación se ejecuta en Azure Web Apps (Windows).
- Las versiones 2.7.1 y posteriores del SDK recopilan contadores de rendimiento si la aplicación se ejecuta en Windows y tiene como destino
NETSTANDARD2.0
o una versión posterior. - Para las aplicaciones que tienen como destino .NET Framework, todas las versiones del SDK admiten contadores de rendimiento.
- Las versiones 2.8.0 y posteriores del SDK admiten el contador de CPU/memoria de Linux. No se admite ningún otro contador en Linux. Para obtener contadores del sistema en Linux (y otros entornos que no son de Windows), use contadores de eventos.
Consultas de Log Analytics
Puede buscar y mostrar informes de contador de rendimiento en Log Analytics.
El esquema performanceCounters expone category
, el nombre de counter
y el nombre de instance
de cada contador de rendimiento. En la telemetría de cada aplicación, solo verá los contadores de dicha aplicación. Por ejemplo, para ver qué contadores están disponibles:
performanceCounters | summarize count(), avg(value) by category, instance, counter
Aquí, Instance
hace referencia a la instancia de contador de rendimiento, no al rol ni a la instancia de máquina de servidor. El nombre de la instancia del contador de rendimiento normalmente segmenta contadores, como el tiempo de procesador, por el nombre del proceso o la aplicación.
Para obtener un gráfico de la memoria disponible en un período reciente:
performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart
Al igual que otros datos de telemetría, performanceCounters 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. Por ejemplo, para comparar el rendimiento de una aplicación en distintas máquinas:
performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
Alertas
Al igual que otras métricas, puede establecer una alerta para advertirle si un contador supera un límite especificado.
Para establecer una alerta, abra el panel Alertas y seleccione Agregar alerta.
Preguntas más frecuentes
¿En qué se diferencian la tasa de excepciones y las métricas de excepciones?
-
Exception rate
: la tasa de excepciones es un contador de rendimiento del sistema. El CLR cuenta todas las excepciones controladas y no controladas que se producen, y divide el total de un intervalo de muestreo entre la duración del intervalo. El SDK de Application Insights recopila este resultado y lo envía al portal. -
Exceptions
: la métrica de Excepciones cuenta los informes deTrackException
recibidos a través del portal en el intervalo de muestreo del gráfico. Incluye solo las excepciones controladas en las que escribe llamadasTrackException
en el código. No incluye todas las excepciones no controladas.