Udostępnij za pośrednictwem


Liczniki dla platformy .NET w usłudze Application Insights

Usługa Azure MonitorApplication Insights obsługuje liczniki wydajności i liczniki zdarzeń. Ten przewodnik zawiera omówienie obu tych elementów, w tym ich przeznaczenia, konfiguracji i użycia w aplikacjach platformy .NET.

Uwaga

Zalecamy dystrybucję OpenTelemetry usługi Azure Monitor dla nowych aplikacji lub klientów, aby umożliwić usłudze Azure Monitor Application Insights. Dystrybucja OpenTelemetry usługi Azure Monitor zapewnia podobną funkcjonalność i środowisko jako zestaw SDK usługi Application Insights. Migracja z zestawu SDK usługi Application Insights jest możliwa przy użyciu przewodników migracji dla platformy .NET, Node.js i języka Python, ale nadal pracujemy nad dodaniem kilku dodatkowych funkcji w celu zapewnienia zgodności z poprzednimi wersjami.

Omówienie

  • Liczniki wydajności są wbudowane w system operacyjny Windows i oferują wstępnie zdefiniowane metryki, takie jak użycie procesora CPU, zużycie pamięci i aktywność dysku. Te liczniki są idealne do monitorowania standardowych metryk wydajności przy minimalnej konfiguracji. Ułatwiają one śledzenie wykorzystania zasobów lub rozwiązywanie problemów z wąskimi gardłami na poziomie systemu w aplikacjach opartych na systemie Windows, ale nie obsługują niestandardowych metryk specyficznych dla aplikacji.
  • Liczniki zdarzeń działają na wielu platformach, w tym w systemach Windows, Linux i macOS. Umożliwiają deweloperom definiowanie i monitorowanie lekkich, dostosowywalnych metryk specyficznych dla aplikacji, co zapewnia większą elastyczność niż liczniki wydajności. Liczniki zdarzeń są przydatne, gdy metryki systemowe są niewystarczające lub gdy szczegółowe dane telemetryczne są potrzebne w aplikacjach międzyplatformowych. Wymagają one jawnej implementacji i konfiguracji, co sprawia, że konfiguracja jest bardziej obciążana.

Konfigurowanie liczników

System Windows udostępnia różne liczniki wydajności, takie jak te używane do zbierania statystyk użycia procesora, pamięci i dysku. Możesz również zdefiniować własne liczniki wydajności.

Aplikacja obsługuje zbieranie liczników wydajności, jeśli działa w obszarze Internet Information Server (IIS) na hoście lokalnym lub maszynie wirtualnej z dostępem administracyjnym. Aplikacje działające jako usługa Azure Web Apps nie mogą bezpośrednio uzyskiwać dostępu do liczników wydajności, ale usługa Application Insights zbiera podzbiór dostępnych liczników.

Wymagania wstępne

Udziel kontu usługi puli aplikacji uprawnienia do monitorowania liczników wydajności, dodając je do grupy użytkownicy monitor wydajności.

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"

Wyświetlanie liczników

Okienko Metryki zawiera domyślny zestaw liczników wydajności.

Domyślne liczniki dla aplikacji internetowych ASP.NET:

  • % procesu\czasu procesora
  • % procesu\znormalizowany czas procesora
  • Pamięć\Dostępne bajty
  • żądania ASP.NET na sekundę
  • Zgłoszone wyjątki środowiska uruchomieniowego języka wspólnego platformy .NET (CLR) na sekundę
  • ASP.NET ApplicationsRequest Czas wykonywania
  • Proces\Bajty prywatne
  • Proces\Bajty danych we/wy na sekundę
  • ASP.NET Applications\Requests w kolejce aplikacji
  • Procesor (_Total)\% czasu procesora

Domyślne liczniki dla aplikacji internetowych platformy ASP.NET Core:

  • % procesu\czasu procesora
  • % procesu\znormalizowany czas procesora
  • Pamięć\Dostępne bajty
  • Proces\Bajty prywatne
  • Proces\Bajty danych we/wy na sekundę
  • Procesor (_Total)\% czasu procesora

Dodawanie liczników

Jeśli żądany licznik wydajności nie znajduje się na liście metryk, możesz go dodać.

  1. Dowiedz się, jakie liczniki są dostępne na serwerze przy użyciu tego polecenia programu PowerShell na serwerze lokalnym:

    Get-Counter -ListSet *
    

    Aby uzyskać więcej informacji, zobacz Get-Counter.

  2. Otwórz ApplicationInsights.config.

    W przypadku dodania usługi Application Insights do aplikacji podczas programowania:

    1. Edytuj ApplicationInsights.config w projekcie.
    2. Ponownie wdróż go na serwerach.
  3. Edytuj dyrektywę modułu zbierającego wydajność:

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

Uwaga

aplikacje ASP.NET Core nie mają ApplicationInsights.configwartości , więc poprzednia metoda nie jest prawidłowa dla aplikacji ASP.NET Core.

Przechwytujesz zarówno standardowe liczniki, jak i liczniki, które implementujesz samodzielnie. \Objects\Processes jest przykładem standardowego licznika dostępnego we wszystkich systemach Windows. \Sales(photo)\# Items Sold jest przykładem niestandardowego licznika, który może zostać zaimplementowany w usłudze internetowej.

Format to \Category(instance)\Counter, lub dla kategorii, które nie mają wystąpień, tylko \Category\Counter.

Parametr ReportAs jest wymagany dla nazw liczników, które nie są zgodne [a-zA-Z()/-_ \.]+.

Jeśli określisz wystąpienie, stanie się to wymiarem CounterInstanceName zgłoszonej metryki.

Zbieranie liczników wydajności w kodzie dla aplikacji internetowych ASP.NET lub aplikacji konsolowych .NET/.NET Core

Aby zebrać liczniki wydajności systemu i wysłać je do usługi Application Insights, możesz dostosować następujący fragment kodu:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Możesz też wykonać to samo za pomocą utworzonych metryk niestandardowych:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Zbieranie liczników wydajności w kodzie dla aplikacji internetowych platformy ASP.NET Core

Skonfiguruj PerformanceCollectorModule po metodzie w pliku WebApplication.CreateBuilder()Program.cs:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
    {
        // The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
        module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
    });

var app = builder.Build();

ASP.NET i liczniki usługi Application Insights

W następnych sekcjach omówiono ASP.NET i liczbę usługi Application Insights.

Liczniki wydajności dla aplikacji działających w kontenerach usługi Azure Web Apps i systemu Windows w usłudze Azure App Service

Aplikacje ASP.NET i ASP.NET Core wdrożone w usłudze Azure Web Apps są uruchamiane w specjalnym środowisku piaskownicy. Aplikacje wdrożone w usłudze aplikacja systemu Azure mogą korzystać z kontenera systemu Windows lub być hostowane w środowisku piaskownicy. Jeśli aplikacja jest wdrożona w kontenerze systemu Windows, wszystkie standardowe liczniki wydajności są dostępne w obrazie kontenera.

Środowisko piaskownicy nie zezwala na bezpośredni dostęp do liczników wydajności systemu. Jednak ograniczony podzbiór liczników jest uwidaczniony jako zmienne środowiskowe, zgodnie z opisem w temacie Liczniki wydajności uwidocznione jako zmienne środowiskowe. W tym środowisku jest dostępny tylko podzbiór liczników. Aby uzyskać pełną listę, zobacz Liczniki wydajności uwidocznione jako zmienne środowiskowe.

Zestaw SDK usługi Application Insights dla ASP.NET i ASP.NET Core wykrywa, czy kod jest wdrażany w aplikacji internetowej lub w kontenerze innym niż Windows. Wykrywanie określa, czy zbiera liczniki wydajności w środowisku piaskownicy, czy korzysta ze standardowego mechanizmu zbierania, gdy jest hostowany w kontenerze systemu Windows lub maszynie wirtualnej.

Liczniki wydajności w aplikacjach ASP.NET Core

Obsługa liczników wydajności w ASP.NET Core jest ograniczona:

  • Zestaw SDK w wersji 2.4.1 lub nowszej zbiera liczniki wydajności, jeśli aplikacja jest uruchomiona w usłudze Azure Web Apps (Windows).
  • Zestaw SDK w wersji 2.7.1 lub nowszej zbiera liczniki wydajności, jeśli aplikacja jest uruchomiona w systemie Windows i elementy docelowe NETSTANDARD2.0 lub nowsze.
  • W przypadku aplikacji przeznaczonych dla platformy .NET Framework wszystkie wersje zestawu SDK obsługują liczniki wydajności.
  • Zestaw SDK w wersji 2.8.0 lub nowszej obsługuje licznik procesora CPU/pamięci w systemie Linux. Żaden inny licznik nie jest obsługiwany w systemie Linux. Aby uzyskać liczniki systemowe w systemie Linux (i innych środowiskach innych niż Windows), użyj liczników zdarzeń.

Zapytania usługi Log Analytics

Raporty liczników wydajności można przeszukiwać i wyświetlać w usłudze Log Analytics.

Schemat performanceCounters uwidacznia categorynazwę counter i instance nazwę każdego licznika wydajności. W telemetrii dla każdej aplikacji są widoczne tylko liczniki dla tej aplikacji. Aby na przykład zobaczyć, jakie liczniki są dostępne:

performanceCounters | summarize count(), avg(value) by category, instance, counter

Instance W tym miejscu odwołuje się do wystąpienia licznika wydajności, a nie roli lub wystąpienia maszyny serwera. Nazwa wystąpienia licznika wydajności zwykle segmentuje liczniki, takie jak czas procesora, według nazwy procesu lub aplikacji.

Aby uzyskać wykres dostępnej pamięci w ostatnim okresie:

performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart

Podobnie jak inne dane telemetryczne, funkcja performanceCounters zawiera również kolumnę cloud_RoleInstance wskazującą tożsamość wystąpienia serwera hosta, na którym działa aplikacja. Aby na przykład porównać wydajność aplikacji na różnych maszynach:

performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)

Alerty

Podobnie jak inne metryki, można ustawić alert, aby wyświetlić ostrzeżenie , jeśli licznik przekroczy określony limit.

Aby ustawić alert, otwórz okienko Alerty i wybierz pozycję Dodaj alert.

Często zadawane pytania

Jaka jest różnica między metrykami Współczynnik wyjątków i Wyjątki?

  • Exception rate: Współczynnik wyjątków jest licznikiem wydajności systemu. ClR zlicza wszystkie obsługiwane i nieobsługiwane wyjątki, które są zgłaszane i dzieli sumę w interwale próbkowania przez długość interwału. Zestaw SDK usługi Application Insights zbiera ten wynik i wysyła go do portalu.
  • Exceptions: Metryka Wyjątki zlicza TrackException raporty odebrane przez portal w interwale próbkowania wykresu. Zawiera tylko obsługiwane wyjątki, w których piszesz TrackException wywołania w kodzie. Nie obejmuje wszystkich nieobsługiwane wyjątki.