Porównanie interfejsów API metryk
Podczas dodawania nowej instrumentacji metryk do aplikacji lub biblioteki platformy .NET istnieją różne interfejsy API do wyboru. Ten artykuł pomoże Ci zrozumieć, co jest dostępne i jakieś kompromisy związane z tym.
Istnieją dwie główne kategorie interfejsów API, neutralne dla dostawcy i specyficzne dla dostawcy. Interfejsy API specyficzne dla dostawcy mają zaletę, że dostawca może szybko iterować swoje projekty, dodawać wyspecjalizowane funkcje i osiągać ścisłą integrację między interfejsami API instrumentacji i systemami zaplecza. Jeśli na przykład instrumentujesz aplikację przy użyciu interfejsów API metryk udostępnianych przez usługę Application Szczegółowe informacje, spodziewasz się, że podczas pracy z narzędziami do analizy znajdziesz dobrze zintegrowane funkcje i wszystkie najnowsze funkcje usługi Application Insights. Jednak biblioteka lub aplikacja również byłaby teraz połączona z tym dostawcą i zmiana na inną w przyszłości wymaga ponownego zapisania instrumentacji. W przypadku bibliotek ten sprzężenie może być szczególnie problematyczne, ponieważ deweloper biblioteki może używać interfejsu API jednego dostawcy i dewelopera aplikacji, który odwołuje się do biblioteki, chce współpracować z innym dostawcą. Aby rozwiązać ten problem sprzężenia, opcje neutralne od dostawcy zapewniają ustandaryzowaną fasadę interfejsu API i punkty rozszerzalności, aby kierować dane do różnych systemów zaplecza dostawcy w zależności od konfiguracji. Jednak interfejsy API neutralne od dostawcy mogą zapewniać mniejszą liczbę możliwości i nadal ograniczasz wybór dostawcy zintegrowanego z mechanizmem rozszerzalności fasady.
Interfejsy API platformy .NET
Ponad. Historia 20+00 lat platformy NET, wykonaliśmy iterowanie kilka razy w projekcie dla interfejsów API metryk, z których wszystkie są obsługiwane i neutralne dla dostawcy:
System.Diagnostics.Metrics
Interfejsy API System.Diagnostics.Metrics to najnowsze interfejsy API międzyplatformowe i zostały zaprojektowane we ścisłej współpracy z projektem OpenTelemetry . Jeśli nie masz konkretnego powodu, aby użyć jednego ze starszych interfejsów API opisanych poniżej, system.Diagnostics.Metrics jest dobrym wyborem domyślnym dla nowej pracy. Jest ona dostępna, odwołując się do platformy .NET 6 lub starszej wersji aplikacji .NET Core i .NET Framework, dodając odwołanie do pakietu NuGet .NET System.Diagnostics.DiagnosticsSource 6.0 lub nowszego. Oprócz zapewnienia szerokiej zgodności ten interfejs API dodaje obsługę wielu rzeczy, których brakowało we wcześniejszych interfejsach API, takich jak:
- Histogramy i percentyle
- Metryki wielowymiarowe
- Silnie typizowane interfejs API odbiornika o wysokiej wydajności
- Wiele równoczesnych odbiorników
- Dostęp odbiornika do nieagregowanych pomiarów
Mimo że ten interfejs API został zaprojektowany tak, aby działał dobrze z usługą OpenTelemetry i jej rosnącym ekosystemem wtyczek bibliotek integracji dostawców, aplikacje mają również możliwość bezpośredniego używania wbudowanych interfejsów API odbiornika platformy .NET. Dzięki tej opcji można utworzyć niestandardowe narzędzia metryk bez konieczności podejmowania żadnych zależności bibliotek zewnętrznych.
Performancecounter
System.Diagnostics.PerformanceCounter Interfejsy API to najstarsze interfejsy API metryk. Są one obsługiwane tylko w systemie Windows i zapewniają zarządzaną otokę dla technologii licznika wydajności systemu operacyjnego Windows. Są one dostępne we wszystkich obsługiwanych wersjach platformy .NET.
Te interfejsy API są udostępniane głównie pod kątem zgodności; zespół platformy .NET uważa, że jest to stabilny obszar, który jest mało prawdopodobne, aby otrzymać dalszą poprawę oprócz poprawek błędów. Te interfejsy API nie są sugerowane dla nowych projektów programistycznych, chyba że projekt jest przeznaczony tylko dla systemu Windows i chcesz używać narzędzi licznika wydajności systemu Windows.
Aby uzyskać więcej informacji, zobacz Liczniki wydajności w programie .NET Framework.
EventCounters
Interfejs API EventCounters pojawił się po .PerformanceCounters
Ten interfejs API ma na celu zapewnienie jednolitego środowiska międzyplatformowego. Interfejsy API są dostępne dla platformy .NET Core 3.1 lub nowszej, a niewielki podzbiór jest dostępny w programie .NET Framework 4.7.1 lub nowszym. Te interfejsy API są w pełni obsługiwane i są aktywnie używane przez kluczowe biblioteki platformy .NET, ale mają one mniej funkcji niż nowsze System.Diagnostics.Metrics interfejsy API. EventCounters są w stanie zgłaszać współczynniki zmian i średnich, ale nie obsługują histogramów i percentyli. Nie ma również obsługi metryk wielowymiarowych. Niestandardowe narzędzia są możliwe za pośrednictwem interfejsu EventListener API, choć nie jest silnie typizowane, zapewnia dostęp tylko do zagregowanych wartości i ma ograniczenia dotyczące korzystania z więcej niż jednego odbiornika jednocześnie. EventCounters są obsługiwane bezpośrednio przez program Visual Studio, Szczegółowe informacje aplikacji, liczniki dotnet-counter i dotnet-monitor. Aby uzyskać pomoc techniczną dla narzędzi innych firm, zapoznaj się z dokumentacją dostawcy lub projektu, aby sprawdzić, czy jest dostępna.
Zespół platformy .NET nie spodziewa się podejmowania znaczących nowych inwestycji w ten interfejs API w przyszłości, ale podobnie jak w przypadku PerformanceCounters
interfejsu , interfejs API pozostaje aktywnie obsługiwany dla wszystkich bieżących i przyszłych użytkowników.
Interfejsy API innych firm
Większość dostawców monitorowania wydajności aplikacji (APM), takich jak AppDynamics, Application Szczegółowe informacje, DataDog, DynaTrace i NewRelic, obejmują interfejsy API metryk w ramach bibliotek instrumentacji. Prometheus i AppMetrics są również popularnymi projektami systemu operacyjnego .NET. Aby dowiedzieć się więcej o tych projektach, zapoznaj się z różnymi witrynami internetowymi projektów.