Compartir a través de


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, podrá descubrir lo que está disponible y algunos de los contras implicados.

Hay dos categorías principales de API: independientes del proveedor y específicas del proveedor. Las API específicas del proveedor tienen la ventaja de que este puede iterar sus diseños rápidamente, agregar características especializadas y lograr una estrecha integración entre sus API de instrumentación y sus sistemas back-end. Por ejemplo, si ha instrumentado la aplicación con las API de métricas que proporciona Application Insights, esperará encontrar una funcionalidad bien integrada y todas las características más recientes de Application Insights al trabajar con sus herramientas de análisis. Sin embargo, ahora la biblioteca o aplicación también se acoplará a este proveedor y cambiar a otro diferente en el futuro requerirá volver a escribir la instrumentación. En el caso de las bibliotecas, este acoplamiento puede ser especialmente problemático si el desarrollador de bibliotecas usa la API de un proveedor y el desarrollador de aplicaciones que hace referencia a la biblioteca quiere trabajar con otro proveedor. Para resolver este problema de acoplamiento, las opciones independientes del proveedor proporcionan una fachada de API estandarizada y puntos de extensibilidad para enrutar los datos a varios sistemas back-end del proveedor en función de la configuración. Sin embargo, es posible que las API independientes del proveedor proporcionen menos funcionalidades y que, aun así, el usuario esté restringido a elegir un proveedor que se haya integrado con el mecanismo de extensibilidad de la fachada.

API de .NET

A lo largo de los más de 20 años de historia de .NET, hemos repetido varias veces el diseño de las API de métricas, las cuales son todas compatibles e independientes del proveedor:

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. 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

La API EventCounters llegó después de PerformanceCounters. Esta API tenía como objetivo proporcionar una experiencia uniforme 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 bibliotecas clave de .NET y estas las usan activamente, pero tienen menos funcionalidad 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 espera realizar nuevas inversiones sustanciales en esta API en el futuro, pero, al igual que con PerformanceCounters, la API sigue siendo compatible activamente 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.