Comparação de APIs de métrica
Ao adicionar uma nova instrumentação de métrica a um aplicativo ou biblioteca do .NET, existem várias APIs diferentes para escolher. Este artigo ajudará você a entender as opções.
APIs do .NET
System.Diagnostics.Metrics
As APIs System.Diagnostics.Metrics são as APIs multiplataforma mais recentes e foram criadas em estreita colaboração com o projeto OpenTelemetry. Se você não tiver um motivo específico para utilizar uma das APIs mais antigas abordadas abaixo, System.Diagnostics.Metrics é uma boa opção padrão para novos trabalhos. Ele está disponível ao direcionar o .NET 6+ ou em aplicativos .NET Core e .NET Framework mais antigos, adicionando uma referência ao pacote .NET System.Diagnostics.DiagnosticsSource 6.0+ do pacote NuGet. Além de visar à ampla compatibilidade, essa API adiciona suporte a muitos aspectos que não existiam nas APIs anteriores, como:
- Histogramas e percentis
- Métricas multidimensionais
- API de ouvinte com tipo robusto e alto desempenho
- Vários ouvintes simultâneos
- Acesso do ouvinte a medidas não agregadas
Embora essa API tenha sido criada para funcionar corretamente com o OpenTelemetry e o ecossistema em desenvolvimento de bibliotecas de integração de fornecedores plugá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 de métrica personalizadas, sem usar dependências de biblioteca externa.
PerformanceCounter
As APIs System.Diagnostics.PerformanceCounter são as APIs de métricas .NET mais antigas. Elas são compatíveis somente com o Windows e fornecem um wrapper gerenciado para tecnologia de Contador de Desempenho do Sistema Operacional Windows. Elas estão disponíveis em todas as versões com suporte do .NET.
Essas APIs são fornecidas principalmente para compatibilidade. A equipe do .NET considera esta uma área estável e sem probabilidades de receber melhorias adicionais além das correções de bugs. Essas APIs não são sugeridas para novos projetos de desenvolvimento, a menos que o projeto seja somente Windows e você tenha o desejo de usar as ferramentas do Contador de Desempenho do Windows.
Para obter mais informações, confira Contadores de desempenho no .NET Framework.
EventCounters
Os EventCounters foram as primeiras APIs do .NET a dar suporte a uma experiência de métricas multiplataforma. 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 têm suporte total e ainda são usadas ativamente pelas principais bibliotecas do .NET, mas têm menos funcionalidade do que as APIs System.Diagnostics.Metrics mais recentes. Os EventCounters são capazes de relatar taxas de alteração e médias, mas não são compatíveis com histogramas e percentis. Também não há suporte para métricas multidimensionais. A ferramenta personalizada é possível por meio da API EventListener, embora não tenha um tipo robusto, apenas dá acesso aos valores agregados e tem limitações ao usar mais de um ouvinte simultaneamente. Há suporte direto para EventCounters no 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 está disponível.
A equipe do .NET não espera fazer novos investimentos nessa API daqui para frente, mas, assim como acontece com PerformanceCounters
, a API continua tendo suporte para todos os usuários atuais e futuros.
APIs de terceiros
A maioria dos fornecedores de APM (monitoramento de desempenho de aplicativos), como AppDynamics, Application Insights, DataDog, DynaTrace e NewRelic, inclui APIs de métrica como parte das bibliotecas de instrumentação. Prometheus e AppMetrics também são projetos populares do .NET OSS. Para saber mais sobre esses projetos, confira os vários sites do projeto.