Aracılığıyla paylaş


Ölçüm API'leri karşılaştırması

.NET uygulamasına veya kitaplığına yeni ölçüm izlemesi eklerken, aralarından seçim yapabileceğiniz farklı API'ler vardır. Bu makale, nelerin kullanılabilir olduğunu ve ilgili bazı dezavantajları anlamanıza yardımcı olacaktır.

API'lerin satıcıya özgü ve satıcıya özgü iki ana kategorisi vardır. Satıcıya özgü API'ler, satıcının tasarımlarını hızla yineleme, özel özellikler ekleme ve izleme API'leri ile arka uç sistemleri arasında sıkı tümleştirme elde etme avantajına sahiptir. Örneğin, uygulamanızı Application Analizler tarafından sağlanan ölçüm API'leri ile izlemeniz durumunda, analiz araçlarıyla çalışırken iyi tümleştirilmiş işlevleri ve Application Insight'ın en son özelliklerini bulmayı beklersiniz. Ancak kitaplık veya uygulama da artık bu satıcıyla birleştirilebilir ve gelecekte farklı bir satıcıya geçmek için izlemenin yeniden yazılması gerekir. Kitaplıklar için bu bağlantı özellikle sorunlu olabilir çünkü kitaplık geliştiricisi bir satıcının API'sini kullanabilir ve kitaplığa başvuran uygulama geliştirici farklı bir satıcıyla çalışmak ister. Bu bağlama sorununu çözmek için satıcıdan bağımsız seçenekler, yapılandırmaya bağlı olarak verileri çeşitli satıcı arka uç sistemlerine yönlendirmek için standartlaştırılmış bir API cephesi ve genişletilebilirlik noktaları sağlar. Ancak, satıcıdan bağımsız API'ler daha az özellik sağlayabilir ve yine de cephenin genişletilebilirlik mekanizmasıyla tümleştirilmiş bir satıcı seçmekte kısıtlanırsınız.

.NET API'ları

Üzerinde. NET'in 20'den fazla yıllık geçmişi, ölçüm API'lerinin tasarımını birkaç kez yineledik ve bunların tümü desteklenir ve satıcıdan bağımsızdır:

System.Diagnostics.Metrics

System.Diagnostics.Metrics API'leri en yeni platformlar arası API'lerdir ve OpenTelemetry projesiyle yakın işbirliği içinde tasarlanmıştır. Aşağıda ele alınan eski API'lerden birini kullanmak için belirli bir nedeniniz yoksa, System.Diagnostics.Metrics yeni çalışma için iyi bir varsayılan seçenektir. .NET System.Diagnostics.DiagnosticsSource 6.0+ NuGet paketine başvuru ekleyerek .NET 6+ hedeflenerek veya eski .NET Core ve .NET Framework uygulamalarında kullanılabilir. Bu API, geniş uyumluluğu hedeflemeye ek olarak, önceki API'lerden eksik olan birçok şey için de destek ekler, örneğin:

  • Histogramlar ve yüzdebirlik dilimler
  • Çok boyutlu ölçümler
  • Kesin türü belirlenmiş yüksek performanslı dinleyici API'si
  • Birden çok eşzamanlı dinleyici
  • Toplanmamış ölçümlere dinleyici erişimi

Bu API OpenTelemetry ve giderek büyüyen takılabilir satıcı tümleştirme kitaplıkları ekosistemiyle iyi çalışacak şekilde tasarlanmış olsa da, uygulamaların .NET yerleşik dinleyici API'lerini doğrudan kullanma seçeneği de vardır. Bu seçenekle, dış kitaplık bağımlılıkları almadan özel ölçüm araçları oluşturabilirsiniz.

Performancecounter

System.Diagnostics.PerformanceCounter API'ler en eski ölçüm API'leridir. Bunlar yalnızca Windows'ta desteklenir ve Windows işletim sistemi Performans Sayacı teknolojisi için yönetilen bir sarmalayıcı sağlar. Bunlar desteklenen tüm .NET sürümlerinde kullanılabilir.

Bu API'ler öncelikle uyumluluk için sağlanır; .NET ekibi, bu alanı hata düzeltmelerinin yanı sıra daha fazla geliştirme alma olasılığı düşük olan kararlı bir alan olarak değerlendirmektedir. Bu API'ler, proje yalnızca Windows değilse ve Windows Performans Sayacı araçlarını kullanmak istemiyorsanız yeni geliştirme projeleri için önerilmez.

Daha fazla bilgi için bkz . .NET Framework'te performans sayaçları.

EventCounters

Bundan sonra PerformanceCountersEventCounters API'si geldi. Bu API, tekdüzen bir platformlar arası deneyim sağlamayı amaçlamıştı. API'ler .NET Core 3.1+ hedeflenerek kullanılabilir ve .NET Framework 4.7.1 ve sonraki sürümlerde küçük bir alt küme kullanılabilir. Bu API'ler tam olarak desteklenir ve anahtar .NET kitaplıkları tarafından etkin bir şekilde kullanılır, ancak daha System.Diagnostics.Metrics yeni API'lerden daha az işlevselliğe sahiptir. EventCounter'lar değişiklik ve ortalama oranlarını bildirebilir, ancak histogramları ve yüzdebirlik değerleri desteklemez. Çok boyutlu ölçümler için de destek yoktur. Özel araçlar API aracılığıyla EventListener mümkündür, ancak kesin olarak yazılmaz, yalnızca toplanan değerlere erişim verir ve aynı anda birden fazla dinleyici kullanırken sınırlamalar vardır. EventCounters doğrudan Visual Studio, Application Analizler, dotnet-counters ve dotnet-monitor tarafından desteklenir. Üçüncü taraf araç desteği için, kullanılabilir olup olmadığını görmek için satıcı veya proje belgelerine bakın.

.NET ekibi bundan sonra bu API'ye önemli ölçüde yeni yatırımlar yapmayı beklemez, ancak sürümünde olduğu gibi PerformanceCountersAPI de mevcut ve gelecekteki tüm kullanıcılar için etkin bir şekilde desteklenmektedir.

Üçüncü taraf API'leri

AppDynamics, Application Analizler, DataDog, DynaTrace ve NewRelic gibi uygulama performansı izleme (APM) satıcılarının çoğu ölçüm API'lerini izleme kitaplıklarının bir parçası olarak içerir. Prometheus ve AppMetrics de popüler .NET OSS projeleridir. Bu projeler hakkında daha fazla bilgi edinmek için çeşitli proje web sitelerini denetleyin.