Sdílet prostřednictvím


Shromažďování čítačů výkonu pro cloudovou službu Azure (Classic)

Důležité

Od 1. září 2024 je služba Cloud Services (Classic) pro všechny zákazníky zastaralá. Microsoft zastaví a vypne všechna stávající spuštěná nasazení a data budou od října 2024 trvale ztracena. Nová nasazení by měla používat nový model nasazení založený na Azure Resource Manageru na Azure Cloud Services (rozšířená podpora).

Čítače výkonu poskytují způsob, jak sledovat, jak dobře vaše aplikace a hostitel fungují. Windows Server poskytuje mnoho různých čítačů výkonu souvisejících s hardwarem, aplikacemi, operačním systémem a dalšími. Shromažďováním a odesíláním čítačů výkonu do Azure můžete tyto informace analyzovat, abyste mohli lépe rozhodovat.

Zjištění dostupných čítačů

Čítač výkonu se skládá ze dvou částí, názvu sady (označovaného také jako kategorie) a jednoho nebo více čítačů. Pomocí PowerShellu můžete získat seznam dostupných čítačů výkonu:

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 ...

Vlastnost CounterSetName představuje sadu (nebo kategorii) a je dobrým indikátorem toho, k čemu čítače výkonu souvisejí. Vlastnost Paths představuje kolekci čítačů pro sadu. Můžete také získat Description vlastnost pro další informace o čítačové sadě.

Pokud chcete získat všechny čítače pro sadu, použijte CounterSetName hodnotu a rozbalte kolekci Paths . Každá položka cesty je čítač, na který se můžete dotazovat. Pokud například chcete získat dostupné čítače související se Processor sadou, rozbalte kolekci Paths :

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

Tyto jednotlivé cesty čítačů je možné přidat do architektury diagnostiky, které vaše cloudová služba používá. Další informace o tom, jak je vytvořena cesta čítače výkonu, naleznete v tématu Určení cesty čítače.

Shromáždění čítače výkonu

Do cloudové služby můžete přidat čítač výkonu pro Azure Diagnostics nebo Application Insights.

Application Insights

Aplikace Azure lication Insights for Cloud Services umožňuje určit, jaké čítače výkonu chcete shromažďovat. Po přidání Application Insights do projektu se do projektu sady Visual Studio přidá konfigurační soubor s názvem ApplicationInsights.config. Tento konfigurační soubor definuje, jaký typ informací Application Insights shromažďuje a odesílá do Azure.

Otevřete soubor ApplicationInsights.config a vyhledejte element ApplicationInsights>TelemetryModules. Každý <Add> podřízený prvek definuje typ telemetrie, která se má shromažďovat, spolu s jeho konfigurací. Typ modulu telemetrie čítače výkonu je Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector. Pokud je tento prvek již definovaný, nepřidávejte ho podruhé. Každý čítač výkonu, který se má shromáždit, je definován v uzlu s názvem <Counters>. Tady je příklad, který shromažďuje čítače výkonu jednotek:

<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ždý čítač výkonu je reprezentován jako <Add> prvek pod <Counters>. Atribut PerformanceCounter definuje, který čítač výkonu se má shromáždit. Atribut ReportAs je název, který se má zobrazit na webu Azure Portal pro čítač výkonu. Každý čítač výkonu, který shromažďujete, se vloží do kategorie s názvem Vlastní na portálu. Na rozdíl od diagnostiky Azure nemůžete nastavit interval, kdy se tyto čítače výkonu shromažďují a odesílají do Azure. S Application Insights se čítače výkonu shromažďují a odesílají každou minutu.

Application Insights automaticky shromažďuje následující čítače výkonu:

  • \Process(?? APP_WIN32_PROC?)) % času procesoru
  • \Memory\Available Bytes
  • Výjimky .NET CLR(?? APP_CLR_PROC??) # of Exceps Thrown / sec
  • \Process(??APP_WIN32_PROC??)\Private Bytes
  • \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
  • \Processor(_Total)% čas procesoru

Další informace najdete v tématu Čítače výkonu systému v Application Insights a Application Insights pro Azure Cloud Services.

Azure Diagnostics

Důležité

I když se všechna tato data agregují do účtu úložiště, portál neposkytuje nativní způsob, jak data vymapovat. Důrazně doporučujeme do své aplikace integrovat jinou diagnostická službu, jako je Application Insights.

Rozšíření Azure Diagnostics pro cloudové služby umožňuje určit, jaké čítače výkonu chcete shromažďovat. Informace o nastavení diagnostiky Azure najdete v tématu Přehled monitorování cloudových služeb.

Čítače výkonu, které chcete shromáždit, jsou definovány v souboru diagnostics.wadcfgx . Otevřete tento soubor v sadě Visual Studio a vyhledejte >element PerformanceCounters DiagnostikConfiguration PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Přidejte nový element PerformanceCounterConfiguration jako podřízený prvek. Tento prvek má dva atributy: counterSpecifier a sampleRate. Atribut counterSpecifier definuje, která sada čítačů výkonu systému (popsaná v předchozí části) se má shromáždit. Hodnota sampleRate určuje, jak často se tato hodnota dotazuje. Jako celek se všechny čítače výkonu přenesou do Azure podle hodnoty atributu nadřazeného PerformanceCounters elementu scheduledTransferPeriod .

Další informace o prvku schématu PerformanceCounters najdete ve schématu diagnostiky Azure.

Období definované atributem sampleRate používá datový typ doby trvání XML k označení, jak často se čítač výkonu dotazuje. V následujícím příkladu je sazba nastavena na PT3M, což znamená [P]eriod[T]ime[3][M]inutes: každé tři minuty.

Další informace o tom, jak jsou definovány sampleRate a scheduledTransferPeriod jsou definovány, naleznete v části Datový typ Trvání v kurzu Typy data a data w3 XML data a času.

<?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>

Vytvoření nového čítače výkonu

Nový čítač výkonu můžete vytvořit a použít v kódu. Váš kód, který vytvoří nový čítač výkonu, musí být spuštěn se zvýšenými oprávněními, jinak selže. Spouštěcí kód cloudové služby OnStart může vytvořit čítač výkonu, který vyžaduje spuštění role v kontextu se zvýšenými oprávněními. Nebo můžete vytvořit spouštěcí úlohu, která spustí zvýšenou úroveň a vytvoří čítač výkonu. Další informace o úlohách po spuštění naleznete v tématu Konfigurace a spouštění úloh po spuštění pro cloudovou službu.

Pokud chcete nakonfigurovat svoji roli tak, aby běžela se zvýšenými oprávněními, přidejte <Runtime> do souboru .csdef prvek.

<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>

Můžete vytvořit a zaregistrovat nový čítač výkonu s několika řádky kódu. System.Diagnostics.PerformanceCounterCategory.Create Použijte přetížení metody, která vytvoří kategorii i čítač. Následující kód nejprve zkontroluje, jestli kategorie existuje, a pokud chybí, vytvoří kategorii i čítač.

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
    }
}

Pokud chcete použít čítač, zavolejte metodu nebo IncrementBy metoduIncrement.

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

Teď, když vaše aplikace používá váš vlastní čítač, je potřeba nakonfigurovat Azure Diagnostics nebo Application Insights ke sledování čítače.

Application Insights

Jak bylo uvedeno dříve, čítače výkonu pro Application Insights jsou definovány v souboru ApplicationInsights.config . Otevřete ApplicationInsights.config a vyhledejte element ApplicationInsights>TelemetryModules>Add>Counters. Vytvořte <Add> podřízený prvek a nastavte PerformanceCounter atribut na kategorii a název čítače výkonu, který jste vytvořili v kódu. ReportAs Nastavte atribut na popisný název, který chcete zobrazit na portálu.

<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 ... -->

Azure Diagnostics

Jak bylo uvedeno dříve, čítače výkonu, které chcete shromáždit, jsou definovány v souboru diagnostics.wadcfgx . Otevřete tento soubor v sadě Visual Studio a vyhledejte >element PerformanceCounters DiagnostikConfiguration PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Přidejte nový element PerformanceCounterConfiguration jako podřízený prvek. counterSpecifier Nastavte atribut na kategorii a název čítače výkonu, který jste vytvořili v kódu.

<?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>

Další kroky