Comparação de APIs métricas

Ao adicionar nova instrumentação métrica a um aplicativo ou biblioteca .NET, há várias APIs diferentes para escolher. Este artigo irá ajudá-lo a entender as opções.

APIs do .NET

System.Diagnostics.Metrics

As APIs System.Diagnostics.Metrics são as mais recentes APIs multiplataforma e foram projetadas em estreita colaboração com o projeto OpenTelemetria . Se você não tiver um motivo específico para usar uma das APIs mais antigas abordadas abaixo, System.Diagnostics.Metrics é uma boa opção padrão para novos trabalhos. Ele está disponível direcionando o .NET 6+ ou em aplicativos mais antigos do .NET Core e do .NET Framework adicionando uma referência ao pacote NuGet do .NET System.Diagnostics.DiagnosticsSource 6.0+. Além de visar uma ampla compatibilidade, essa API adiciona suporte para muitas coisas que faltavam nas APIs anteriores, como:

  • Histogramas e percentis
  • Métricas multidimensionais
  • API de ouvinte de alto desempenho fortemente tipada
  • Vários ouvintes simultâneos
  • Acesso do ouvinte a medições não agregadas

Embora essa API tenha sido projetada para funcionar bem com o OpenTelemetry e seu crescente ecossistema de bibliotecas de integração de fornecedores conectáveis, os aplicativos também têm a opção de usar as APIs de ouvinte internas do .NET diretamente. Com essa opção, você pode criar ferramentas métricas personalizadas sem usar nenhuma dependência de biblioteca externa.

Contador de Desempenho

System.Diagnostics.PerformanceCounter As APIs são as APIs de métrica .NET mais antigas. Eles são suportados apenas no Windows e fornecem um wrapper gerenciado para a tecnologia de Contador de Desempenho do sistema operacional Windows. Eles estão disponíveis em todas as versões suportadas do .NET.

Essas APIs são fornecidas principalmente para compatibilidade; a equipe do .NET considera esta uma área estável que provavelmente não receberá mais melhorias, além de correções de bugs. Essas APIs não são sugeridas para novos projetos de desenvolvimento, a menos que o projeto seja somente para Windows e você deseje usar as ferramentas do Contador de Desempenho do Windows.

Para obter mais informações, consulte Contadores de desempenho no .NET Framework.

EventCounters

Os EventCounters foram as primeiras APIs .NET a oferecer suporte a uma experiência de métricas entre plataformas. As APIs estão disponíveis visando o .NET Core 3.1+, e um pequeno subconjunto está disponível no .NET Framework 4.7.1 e posterior. Essas APIs são totalmente suportadas e ainda são usadas pelas principais bibliotecas .NET, mas têm menos funcionalidade do que as APIs mais recentes System.Diagnostics.Metrics . Os Contadores de Eventos são capazes de relatar taxas de alteração e médias, mas não suportam histogramas e percentis. Também não há suporte para métricas multidimensionais. As ferramentas personalizadas são possíveis por meio da EventListener API, embora não sejam fortemente tipadas, apenas dão acesso aos valores agregados e têm limitações ao usar mais de um ouvinte simultaneamente. EventCounters são suportados diretamente pelo Visual Studio, Application Insights, dotnet-counters e dotnet-monitor. Para obter suporte a ferramentas de terceiros, verifique a documentação do fornecedor ou do projeto para ver se ela está disponível.

A equipe do .NET não espera fazer novos investimentos nessa API no futuro, mas, assim como na PerformanceCounters, a API permanece com suporte para todos os usuários atuais e futuros.

APIs de terceiros

A maioria dos fornecedores de monitoramento de desempenho de aplicativos (APM), como AppDynamics, Application Insights, DataDog, DynaTrace e NewRelic , inclui APIs de métricas como parte de suas bibliotecas de instrumentação. Prometheus e AppMetrics também são projetos populares do .NET OSS. Para saber mais sobre estes projetos, consulte os vários sítios Web dos projetos.