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

Důležité

Cloud Services (classic) je teď pro nové zákazníky zastaralý a bude vyřazen 31. srpna 2024 pro všechny zákazníky. Nová nasazení by měla používat nový model nasazení Azure Resource Manager založený na Azure Cloud Services (rozšířená podpora).

Čítače výkonu poskytují způsob, jak sledovat výkon vaší aplikace a hostitele. 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 a lépe se rozhodovat.

Zjišťování dostupných čítačů

Čítač výkonu se skládá ze dvou částí, názvu sady (označované 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, s čím čítače výkonu souvisejí. Vlastnost Paths představuje kolekci čítačů pro sadu. Můžete také získat Description vlastnost pro další informace o sadě čítačů.

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, kterou používá vaše cloudová služba. Další informace o tom, jak je vytvořena cesta čítače výkonu, najdete v tématu Zadání 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 Insights pro Cloud Services umožňuje určit, jaké čítače výkonu chcete shromažďovat. Po přidání Application Insights do projektu sady Visual Studio se do projektu sady Visual Studio přidá konfigurační soubor s názvemApplicationInsights.config . Tento konfigurační soubor definuje, jaký typ informací Application Insights shromažďuje a odesílá do Azure.

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

<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 <Add> je reprezentován jako prvek v části <Counters>. Atribut PerformanceCounter definuje, který čítač výkonu se má shromáždit. Atribut ReportAs je název, který se zobrazí v Azure Portal čítače výkonu. Všechny shromážděné čítače výkonu se na portálu zadají do kategorie s názvem Vlastní . Na rozdíl od Azure Diagnostics nemůžete nastavit interval, ve který 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)% času 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 zobrazit v grafu. Důrazně doporučujeme, abyste do své aplikace integrovali jinou diagnostická službu, jako je Application Insights.

Rozšíření Azure Diagnostics pro Cloud Services umožňuje určit, jaké čítače výkonu chcete shromažďovat. Pokud chcete nastavit Azure Diagnostics, přečtěte si téma Přehled monitorování cloudových služeb.

Čítače výkonu, které chcete shromažďovat, jsou definovány v souboru diagnostics.wadcfgx . Otevřete tento soubor (je definovaný pro roli) v sadě Visual Studio a vyhledejte element DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters . Přidejte nový element PerformanceCounterConfiguration jako podřízený prvek. Tento element má dva atributy: counterSpecifier a sampleRate. Atribut counterSpecifier definuje, která sada čítačů výkonu systému (viz předchozí část) 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 elementu PerformanceCounters schema naleznete v tématu Azure Diagnostics Schema.

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

Další informace o tom, jak sampleRate jsou definovány ascheduledTransferPeriod, najdete v části Doba trvání datový typ v kurzu Datové typy dat a času 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>

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

Váš kód může vytvořit a použít nový čítač výkonu. 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, abyste roli spustili v kontextu se zvýšenými oprávněními. Nebo můžete vytvořit úlohu po spuštění se zvýšenými oprávněními a vytvořit čítač výkonu. Další informace o úlohách po spuštění najdete v tématu Konfigurace a spuštění úloh po spuštění pro cloudovou službu.

Pokud chcete nakonfigurovat svou roli tak, aby se spouštěla se zvýšenými oprávněními, přidejte <Runtime> do souboru .csdef element.

<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 Increment nebo IncrementBy .

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

Když teď vaše aplikace používá vlastní čítač, musíte nakonfigurovat Azure Diagnostics nebo Application Insights ke sledování čítače.

Application Insights

Jak jsme uvedli dříve, čítače výkonu pro Application Insights jsou definované v souboruApplicationInsights.config . Otevřete ApplicationInsights.config a vyhledejte element ApplicationInsights>TelemetryModules>Přidat>čítače . <Add> Vytvořte 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 shromažďovat, jsou definovány v souboru diagnostics.wadcfgx . Otevřete tento soubor (je definovaný pro roli) v sadě Visual Studio a vyhledejte element DiagnosticsConfiguration>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ší informace