Comparación de las API de métricas
Al agregar nueva instrumentación de métricas a una aplicación o biblioteca de .NET, hay varias API diferentes entre las que elegir. En este artículo se le ayudará a conocer bien las opciones.
API de .NET
System.Diagnostics.Metrics
Las API System.Diagnostics.Metrics son las API multiplataforma más nuevas, y se han diseñado en estrecha colaboración con el proyecto OpenTelemetry. Si no tiene una razón específica para usar una de las API anteriores que se describen a continuación, System.Diagnostics.Metrics es una buena opción predeterminada para el nuevo trabajo. Está disponible para .NET 6 o en aplicaciones anteriores de .NET Core y .NET Framework agregando una referencia al paquete de NuGet System.Diagnostics.DiagnosticsSource 6.0+ de .NET. Además de apuntar a una amplia compatibilidad, esta API agrega compatibilidad con muchas cosas que faltaban de las API anteriores, como:
- Histogramas y percentiles
- Métricas multidimensionales
- API del cliente de escucha de alto rendimiento fuertemente tipada
- Varios clientes de escucha simultáneos
- Acceso del cliente de escucha a medidas no agregadas
Aunque esta API se ha diseñado para funcionar correctamente con OpenTelemetry y su creciente ecosistema de bibliotecas de integración de proveedores conectables, las aplicaciones también tienen la opción de usar directamente las API del cliente de escucha de .NET integradas. Con esta opción, puede crear herramientas de métricas personalizadas sin tener que usar ninguna dependencia de biblioteca externa.
PerformanceCounter
Las API System.Diagnostics.PerformanceCounter son las API de métricas más antiguas de .NET. Solo son compatibles con Windows y proporcionan un contenedor administrado para la tecnología de contador de rendimiento del sistema operativo Windows. Están disponibles en todas las versiones compatibles de .NET.
Estas API se proporcionan principalmente por motivos de compatibilidad; el equipo de .NET considera que se trata de un área estable que es poco probable que reciba mejoras adicionales aparte de las correcciones de errores. Estas API no se sugieren para nuevos proyectos de desarrollo, a menos que el proyecto sea solo de Windows y quiera usar las herramientas del contador de rendimiento de Windows.
Para más información, vea Contadores de rendimiento en .NET Framework.
EventCounters
Las EventCounters fueron las primeras API de .NET que incluían una solución de métricas multiplataforma. Las API están disponibles para .NET Core 3.1 y las versiones posteriores, y hay un pequeño subconjunto disponible en .NET Framework 4.7.1 y las versiones posteriores. Estas API son totalmente compatibles con las principales bibliotecas de .NET y estas se siguen usando, pero tienen menos funcionalidades que las API System.Diagnostics.Metrics más recientes. Las API EventCounters pueden notificar tasas de cambio y promedios, pero no admiten histogramas ni percentiles. Tampoco admiten métricas multidimensionales. Es posible usar herramientas personalizadas mediante la API EventListener, aunque no está fuertemente tipada, solo proporciona acceso a los valores agregados y tiene limitaciones al usar más de un cliente de escucha simultáneamente. Las API EventCounters son compatibles directamente con Visual Studio, Application Insights, dotnet-counters y dotnet-monitor. Para obtener información sobre la compatibilidad con herramientas de terceros, consulte la documentación del proveedor o del proyecto.
El equipo de .NET no tiene previsto realizar nuevas inversiones en esta API en el futuro, pero, al igual que con PerformanceCounters
, la API sigue siendo compatible para todos los usuarios actuales y futuros.
API de terceros
La mayoría de los proveedores de supervisión de rendimiento de aplicaciones (APM), como AppDynamics, Application Insights, DataDog, DynaTrace y NewRelic, incluyen las API de métricas como parte de sus bibliotecas de instrumentación. Prometheus y AppMetrics también son proyectos populares de OSS de .NET. Para más información sobre estos proyectos, consulte sus distintos sitios web.