Dela via


Jämförelse av mått-API:er

När du lägger till ny måttinstrumentation i en .NET-app eller ett bibliotek finns det olika API:er att välja mellan. Den här artikeln hjälper dig att förstå vad som är tillgängligt och några av de kompromisser som är inblandade.

Det finns två huvudkategorier av API:er, leverantörsneutrala och leverantörsspecifika. Leverantörsspecifika API:er har fördelen att leverantören kan iterera sin design snabbt, lägga till specialiserade funktioner och uppnå en nära integrering mellan sina instrumentations-API:er och deras serverdelssystem. Om du till exempel instrumenterade din app med mått-API:er som tillhandahålls av Application Insights kan du förvänta dig att hitta välintegrerade funktioner och alla Application Insights senaste funktioner när du arbetar med deras analysverktyg. Men biblioteket eller appen skulle nu också kopplas till den här leverantören och om du ändrar till en annan i framtiden skulle det kräva att instrumentationen skrivs om. För bibliotek kan den här kopplingen vara särskilt problematisk eftersom biblioteksutvecklaren kan använda en leverantörs API och apputvecklaren som refererar till biblioteket vill arbeta med en annan leverantör. För att lösa det här kopplingsproblemet tillhandahåller leverantörsneutrala alternativ en standardiserad API-fasad och utökningspunkter för att dirigera data till olika leverantörsserverdelssystem beroende på konfiguration. Leverantörsneutrala API:er kan dock ge färre funktioner och du är fortfarande begränsad till att välja en leverantör som har integrerats med fasadens utökningsmekanism.

.NET-API:er

Över. NET:s historik över 20 år har vi itererat några gånger om designen för mått-API:er, som alla stöds och är leverantörsneutrala:

System.Diagnostics.Metrics

API:er för System.Diagnostics.Metrics är de nyaste plattformsoberoende API:erna och utformades i nära samarbete med OpenTelemetry-projektet . Om du inte har någon specifik anledning att använda något av de äldre API:erna som beskrivs nedan är System.Diagnostics.Metrics ett bra standardval för nytt arbete. Den är tillgänglig genom att rikta in sig på .NET 6+, eller i äldre .NET Core- och .NET Framework-appar genom att lägga till en referens till .NET System.Diagnostics.DiagnosticsSource 6.0+ NuGet-paketet. Förutom att sträva efter bred kompatibilitet lägger det här API:et till stöd för många saker som saknades från tidigare API:er, till exempel:

  • Histogram och percentiler
  • Flerdimensionella mått
  • Starkt skrivet lyssnar-API med höga prestanda
  • Flera samtidiga lyssnare
  • Lyssnaråtkomst till oaggregerade mått

Även om det här API:et har utformats för att fungera bra med OpenTelemetry och dess växande ekosystem av anslutningsbara leverantörsintegreringsbibliotek, har program också möjlighet att använda .NET-inbyggda lyssnar-API:er direkt. Med det här alternativet kan du skapa anpassade måttverktyg utan att ta några externa biblioteksberoenden.

PerformanceCounter

System.Diagnostics.PerformanceCounter API:er är de äldsta mått-API:erna. De stöds bara i Windows och tillhandahåller en hanterad omslutning för Windows OS Performance Counter-teknik . De är tillgängliga i alla versioner av .NET som stöds.

Dessa API:er tillhandahålls främst för kompatibilitet. .NET-teamet anser att detta är ett stabilt område som sannolikt inte kommer att få ytterligare förbättringar förutom buggkorrigeringar. Dessa API:er föreslås inte för nya utvecklingsprojekt om inte projektet endast är Windows och du vill använda Verktyg för Prestandaräknare i Windows.

Mer information finns i Prestandaräknare i .NET Framework.

EventCounters

EventCounters-API:et kom nästa efter PerformanceCounters. Det här API:et syftar till att ge en enhetlig plattformsoberoende upplevelse. API:erna är tillgängliga genom att rikta in sig på .NET Core 3.1+, och en liten delmängd är tillgänglig på .NET Framework 4.7.1 och senare. Dessa API:er stöds fullt ut och används aktivt av viktiga .NET-bibliotek, men de har mindre funktioner än de nyare System.Diagnostics.Metrics API:erna. EventCounters kan rapportera ändringsfrekvenser och medelvärden, men stöder inte histogram och percentiler. Det finns inte heller något stöd för flerdimensionella mått. Anpassade verktyg är möjliga via API:et EventListener , även om det inte är starkt skrivet, ger bara åtkomst till de aggregerade värdena och har begränsningar när du använder mer än en lyssnare samtidigt. EventCounters stöds direkt av Visual Studio, Application Insights, dotnet-counters och dotnet-monitor. Information om stöd för verktyg från tredje part finns i leverantören eller projektdokumentationen för att se om den är tillgänglig.

.NET-teamet förväntar sig inte att göra betydande nya investeringar i det här API:et framöver, men precis som med PerformanceCountersfortsätter API:et att aktivt stödjas för alla nuvarande och framtida användare.

API:er från tredje part

De flesta leverantörer av övervakning av programprestanda (APM) som AppDynamics, Application Insights, DataDog, DynaTrace och NewRelic innehåller mått-API:er som en del av deras instrumentationsbibliotek. Prometheus och AppMetrics är också populära .NET OSS-projekt. Mer information om dessa projekt finns på de olika projektwebbplatserna.