Zbieranie liczników wydajności dla usługi Azure Cloud Service (klasycznej)

Ważne

Cloud Services (wersja klasyczna) jest teraz przestarzała dla nowych klientów i zostanie wycofana 31 sierpnia 2024 r. dla wszystkich klientów. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager Azure Cloud Services (wsparcie dodatkowe).

Liczniki wydajności umożliwiają śledzenie wydajności aplikacji i hosta. System Windows Server udostępnia wiele różnych liczników wydajności związanych ze sprzętem, aplikacjami, systemem operacyjnym i nie tylko. Zbierając i wysyłając liczniki wydajności do platformy Azure, możesz przeanalizować te informacje, aby ułatwić podejmowanie lepszych decyzji.

Odnajdywanie dostępnych liczników

Licznik wydajności składa się z dwóch części: nazwy zestawu (nazywanej również kategorią) i co najmniej jednego licznika. Aby uzyskać listę dostępnych liczników wydajności, możesz użyć programu PowerShell:

Get-Counter -ListSet * | Select-Object CounterSetName, Paths | Sort-Object CounterSetName

CounterSetName                                  Paths
--------------                                  -----
.NET CLR Data                                   {\.NET CLR Data(*)\SqlClient...
.NET CLR Exceptions                             {\.NET CLR Exceptions(*)\# o...
.NET CLR Interop                                {\.NET CLR Interop(*)\# of C...
.NET CLR Jit                                    {\.NET CLR Jit(*)\# of Metho...
.NET Data Provider for Oracle                   {\.NET Data Provider for Ora...
.NET Data Provider for SqlServer                {\.NET Data Provider for Sql...
.NET Memory Cache 4.0                           {\.NET Memory Cache 4.0(*)\C...
AppV Client Streamed Data Percentage            {\AppV Client Streamed Data ...
ASP.NET                                         {\ASP.NET\Application Restar...
ASP.NET Apps v4.0.30319                         {\ASP.NET Apps v4.0.30319(*)...
ASP.NET State Service                           {\ASP.NET State Service\Stat...
ASP.NET v2.0.50727                              {\ASP.NET v2.0.50727\Applica...
ASP.NET v4.0.30319                              {\ASP.NET v4.0.30319\Applica...
Authorization Manager Applications              {\Authorization Manager Appl...

#... results cut to save space ...

Właściwość CounterSetName reprezentuje zestaw (lub kategorię) i jest dobrym wskaźnikiem tego, z czym są powiązane liczniki wydajności. Właściwość Paths reprezentuje kolekcję liczników dla zestawu. Możesz również uzyskać właściwość , Description aby uzyskać więcej informacji na temat zestawu liczników.

Aby pobrać wszystkie liczniki dla zestawu, użyj CounterSetName wartości i rozwiń Paths kolekcję. Każdy element ścieżki jest licznikiem, którego można wykonywać zapytania. Aby na przykład uzyskać dostępne liczniki powiązane z zestawem Processor , rozwiń Paths kolekcję:

Get-Counter -ListSet * | Where-Object CounterSetName -eq "Processor" | Select -ExpandProperty Paths

\Processor(*)\% Processor Time
\Processor(*)\% User Time
\Processor(*)\% Privileged Time
\Processor(*)\Interrupts/sec
\Processor(*)\% DPC Time
\Processor(*)\% Interrupt Time
\Processor(*)\DPCs Queued/sec
\Processor(*)\DPC Rate
\Processor(*)\% Idle Time
\Processor(*)\% C1 Time
\Processor(*)\% C2 Time
\Processor(*)\% C3 Time
\Processor(*)\C1 Transitions/sec
\Processor(*)\C2 Transitions/sec
\Processor(*)\C3 Transitions/sec

Te indywidualne ścieżki liczników można dodać do platformy diagnostyki używanej przez usługę w chmurze. Aby uzyskać więcej informacji na temat sposobu konstruowania ścieżki licznika wydajności, zobacz Określanie ścieżki licznika.

Zbieranie licznika wydajności

Do usługi w chmurze można dodać licznik wydajności dla usługi Diagnostyka Azure lub Application Insights.

Application Insights

aplikacja systemu Azure Insights for Cloud Services umożliwia określenie liczników wydajności, które chcesz zebrać. Po dodaniu usługi Application Insights do projektu zostanie dodany plik konfiguracji o nazwie ApplicationInsights.config do projektu programu Visual Studio. Ten plik konfiguracji definiuje typ informacji zbieranych i wysyłanych do platformy Azure przez usługę Application Insights.

Otwórz plik ApplicationInsights.config i znajdź element ApplicationInsights>TelemetryModules . Każdy <Add> element podrzędny definiuje typ telemetrii do zbierania wraz z jego konfiguracją. Typ modułu telemetrii licznika wydajności to Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector. Jeśli ten element jest już zdefiniowany, nie dodawaj go po raz drugi. Każdy licznik wydajności do zebrania jest definiowany w węźle o nazwie <Counters>. Oto przykład, który zbiera liczniki wydajności dysków:

<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">

  <TelemetryModules>

    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
      <Counters>
        <Add PerformanceCounter="\LogicalDisk(C:)\Disk Write Bytes/sec" ReportAs="Disk write (C:)" />
        <Add PerformanceCounter="\LogicalDisk(C:)\Disk Read Bytes/sec" ReportAs="Disk read (C:)" />
      </Counters>
    </Add>

  </TelemetryModules>

<!-- ... cut to save space ... -->

Każdy licznik wydajności jest reprezentowany jako <Add> element w obszarze <Counters>. Atrybut PerformanceCounter określa licznik wydajności do zebrania. Atrybut ReportAs jest tytułem, który ma być wyświetlany w Azure Portal dla licznika wydajności. Każdy zbierany licznik wydajności jest umieszczany w kategorii o nazwie Custom w portalu. W przeciwieństwie do Diagnostyka Azure nie można ustawić interwału zbierania i wysyłania tych liczników wydajności na platformę Azure. W usłudze Application Insights liczniki wydajności są zbierane i wysyłane co minutę.

Usługa Application Insights automatycznie zbiera następujące liczniki wydajności:

  • \Process(?? APP_WIN32_PROC?) % czasu procesora
  • \Memory\Available Bytes
  • Wyjątki środowiska .NET CLR(?? APP_CLR_PROC?) Liczba wyrzuconych exceps na sekundę
  • \Process(??APP_WIN32_PROC??)\Private Bytes
  • \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
  • \Processor(_Total)% czasu procesora

Aby uzyskać więcej informacji, zobacz Liczniki wydajności systemu w usługach Application Insights i Application Insights dla usługi Azure Cloud Services.

Diagnostyka Azure

Ważne

Chociaż wszystkie te dane są agregowane na koncie magazynu, portal nie zapewnia natywnego sposobu tworzenia wykresu danych. Zdecydowanie zaleca się zintegrowanie innej usługi diagnostycznej, takiej jak Application Insights, z aplikacją.

Rozszerzenie Diagnostyka Azure dla Cloud Services umożliwia określenie liczników wydajności, które chcesz zebrać. Aby skonfigurować Diagnostyka Azure, zobacz Omówienie monitorowania usług w chmurze.

Liczniki wydajności, które chcesz zebrać, są zdefiniowane w pliku diagnostics.wadcfgx . Otwórz ten plik (zdefiniowany dla roli) w programie Visual Studio i znajdź element DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters . Dodaj nowy element PerformanceCounterConfiguration jako element podrzędny. Ten element ma dwa atrybuty: counterSpecifier i sampleRate. Atrybut counterSpecifier określa zestaw liczników wydajności systemu (opisany w poprzedniej sekcji) do zebrania. Wartość sampleRate wskazuje częstotliwość sondowania tej wartości. W całości wszystkie liczniki wydajności są przenoszone na platformę Azure zgodnie z wartością atrybutu elementu nadrzędnego PerformanceCountersscheduledTransferPeriod .

Aby uzyskać więcej informacji na temat elementu schematuPerformanceCounters, zobacz schemat Diagnostyka Azure.

Okres zdefiniowany przez sampleRate atrybut używa typu danych czasu trwania XML, aby wskazać, jak często jest sondowany licznik wydajności. W poniższym przykładzie stawka jest ustawiona na PT3Mwartość , co oznacza [P]eriod[T]ime[3][M]inutes: co trzy minuty.

Aby uzyskać więcej informacji na temat sposobu sampleRate definiowania elementów i scheduledTransferPeriod , zobacz sekcję Duration Data Type (Typ danych czasu trwania ) w samouczku W3 XML Date and Time Date Types (Typy dat i godzin W3 XML ).

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration  xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig>
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096">

        <!-- ... cut to save space ... -->

        <PerformanceCounters scheduledTransferPeriod="PT1M">
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />

          <!-- This is a new perf counter which will track the C: disk read activity in bytes per second, every minute -->
          <PerformanceCounterConfiguration counterSpecifier="\LogicalDisk(C:)\Disk Read Bytes/sec" sampleRate="PT1M" />

        </PerformanceCounters>
      </DiagnosticMonitorConfiguration>
    </WadCfg>
    
    <!-- ... cut to save space ... -->

  </PublicConfig>
</DiagnosticsConfiguration>

Tworzenie nowego licznika wydajności

Nowy licznik wydajności można utworzyć i użyć go w kodzie. Kod tworzący nowy licznik wydajności musi być uruchomiony z podwyższonym poziomem uprawnień. W przeciwnym razie zakończy się niepowodzeniem. Kod uruchamiania usługi OnStart w chmurze może utworzyć licznik wydajności, który wymaga uruchomienia roli w kontekście z podwyższonym poziomem uprawnień. Możesz też utworzyć zadanie uruchamiania z podwyższonym poziomem uprawnień i utworzyć licznik wydajności. Aby uzyskać więcej informacji na temat zadań uruchamiania, zobacz Jak skonfigurować i uruchomić zadania uruchamiania dla usługi w chmurze.

Aby skonfigurować rolę do uruchamiania z podwyższonym poziomem uprawnień, dodaj <Runtime> element do pliku csdef .

<ServiceDefinition name="CloudServiceLoadTesting" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WorkerRole name="WorkerRoleWithSBQueue1" vmsize="Large">

    <!-- ... cut to save space ... -->

    <Runtime executionContext="elevated">
      
    </Runtime>

    <!-- ... cut to save space ... -->

  </WorkerRole>
</ServiceDefinition>

Możesz utworzyć i zarejestrować nowy licznik wydajności za pomocą kilku wierszy kodu. System.Diagnostics.PerformanceCounterCategory.Create Użyj przeciążenia metody, które tworzy zarówno kategorię, jak i licznik. Poniższy kod najpierw sprawdza, czy kategoria istnieje, a jeśli jej brakuje, tworzy zarówno kategorię, jak i licznik.

using System.Diagnostics;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WorkerRoleWithSBQueue1
{
    public class WorkerRole : RoleEntryPoint
    {
        // Perf counter variable representing times service was used.
        private PerformanceCounter counterServiceUsed;

        public override bool OnStart()
        {
            // ... Other startup code here ...

            // Define the category and counter names.
            string perfCounterCatName = "MyService";
            string perfCounterName = "Times Used";

            // Create the counter if needed. Our counter category only has a single counter.
            // Both the category and counter are created in the same method call.
            if (!PerformanceCounterCategory.Exists(perfCounterCatName))
            {
                PerformanceCounterCategory.Create(perfCounterCatName, "Collects information about the cloud service.", 
                                                  PerformanceCounterCategoryType.SingleInstance, 
                                                  perfCounterName, "How many times the cloud service was used.");
            }

            // Get reference to our counter
            counterServiceUsed = new PerformanceCounter(perfCounterCatName, perfCounterName);
            counterServiceUsed.ReadOnly = false;
            
            return base.OnStart();
        }

        // ... cut class code to save space
    }
}

Jeśli chcesz użyć licznika, wywołaj metodę Increment lub IncrementBy .

// Increase the counter by 1
counterServiceUsed.Increment();

Teraz, gdy aplikacja używa niestandardowego licznika, musisz skonfigurować Diagnostyka Azure lub Application Insights, aby śledzić licznik.

Application Insights

Jak wspomniano wcześniej, liczniki wydajności usługi Application Insights są definiowane w pliku ApplicationInsights.config . Otwórz ApplicationInsights.config i znajdź element ApplicationInsights>TelemetryModules> AddCounters (Dodaj> liczniki). Utwórz element podrzędny <Add> i ustaw PerformanceCounter atrybut na kategorię i nazwę licznika wydajności utworzonego w kodzie. ReportAs Ustaw atrybut na przyjazną nazwę, którą chcesz wyświetlić w portalu.

<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">

  <TelemetryModules>

    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
      <Counters>
        <!-- ... cut other perf counters to save space ... -->

        <!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
        <Add PerformanceCounter="\MyService\Times Used" ReportAs="Service used counter" />
      </Counters>
    </Add>

  </TelemetryModules>

<!-- ... cut to save space ... -->

Diagnostyka Azure

Jak wspomniano wcześniej, liczniki wydajności, które chcesz zebrać, są zdefiniowane w pliku diagnostics.wadcfgx . Otwórz ten plik (zdefiniowany dla roli) w programie Visual Studio i znajdź element DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters . Dodaj nowy element PerformanceCounterConfiguration jako element podrzędny. counterSpecifier Ustaw atrybut na kategorię i nazwę licznika wydajności utworzonego w kodzie.

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration  xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig>
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096">

        <!-- ... cut to save space ... -->

        <PerformanceCounters scheduledTransferPeriod="PT1M">
          <!-- ... cut other perf counters to save space ... -->
          
          <!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
          <PerformanceCounterConfiguration counterSpecifier="\MyService\Times Used" sampleRate="PT1M" />

        </PerformanceCounters>
      </DiagnosticMonitorConfiguration>
    </WadCfg>
    
    <!-- ... cut to save space ... -->

  </PublicConfig>
</DiagnosticsConfiguration>

Więcej informacji