Samla in prestandaräknare för din Azure Cloud Service (klassisk)

Viktigt

Cloud Services (klassisk) är nu inaktuell för nya kunder och kommer att dras tillbaka den 31 augusti 2024 för alla kunder. Nya distributioner bör använda den nya Azure Resource Manager-baserade distributionsmodellen Azure Cloud Services (utökad support).

Prestandaräknare är ett sätt för dig att spåra hur bra programmet och värden presterar. Windows Server tillhandahåller många olika prestandaräknare som rör maskinvara, program, operativsystem med mera. Genom att samla in och skicka prestandaräknare till Azure kan du analysera den här informationen för att fatta bättre beslut.

Identifiera tillgängliga räknare

En prestandaräknare består av två delar, ett uppsättningsnamn (även kallat kategori) och en eller flera räknare. Du kan använda PowerShell för att hämta en lista över tillgängliga prestandaräknare:

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

Egenskapen CounterSetName representerar en uppsättning (eller kategori) och är en bra indikator på vad prestandaräknarna är relaterade till. Egenskapen Paths representerar en samling räknare för en uppsättning. Du kan också hämta Description egenskapen för mer information om räknaruppsättningen.

Om du vill hämta alla räknare för en uppsättning använder du CounterSetName värdet och expanderar Paths samlingen. Varje sökvägsobjekt är en räknare som du kan fråga. Om du till exempel vill hämta tillgängliga räknare relaterade till Processor uppsättningen expanderar du Paths samlingen:

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

De här enskilda räknarsökvägarna kan läggas till i diagnostikramverket som molntjänsten använder. Mer information om hur en prestandaräknare konstrueras finns i Ange en räknares sökväg.

Samla in en prestandaräknare

En prestandaräknare kan läggas till i molntjänsten för antingen Azure Diagnostics eller Application Insights.

Application Insights

Azure Application Insights för Cloud Services kan du ange vilka prestandaräknare du vill samla in. När du har lagt till Application Insights i projektet läggs en konfigurationsfil med namnet ApplicationInsights.config till i Visual Studio-projektet. Den här konfigurationsfilen definierar vilken typ av information Application Insights samlar in och skickar till Azure.

Öppna filenApplicationInsights.config och leta upp elementet ApplicationInsights>TelemetryModules . Varje <Add> underordnat element definierar en typ av telemetri som ska samlas in, tillsammans med dess konfiguration. Telemetrimodultypen för prestandaräknaren är Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector. Om det här elementet redan har definierats ska du inte lägga till det en andra gång. Varje prestandaräknare som ska samlas in definieras under en nod med namnet <Counters>. Här är ett exempel som samlar in diskprestandaräknare:

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

Varje prestandaräknare representeras som ett <Add> element under <Counters>. Attributet PerformanceCounter definierar vilken prestandaräknare som ska samlas in. Attributet ReportAs är rubriken som ska visas i Azure Portal för prestandaräknaren. Alla prestandaräknare som du samlar in placeras i en kategori med namnet Anpassad i portalen. Till skillnad från Azure Diagnostics kan du inte ange intervallet som dessa prestandaräknare samlas in och skickas till Azure. Med Application Insights samlas prestandaräknare in och skickas varje minut.

Application Insights samlar automatiskt in följande prestandaräknare:

  • \Process(?? APP_WIN32_PROC??) % processortid
  • \Memory\Tillgängliga byte
  • .NET CLR-undantag(?? APP_CLR_PROC??) Antal exceps som kastas per sekund
  • \Process(??APP_WIN32_PROC??)\Privata byte
  • \Process(??APP_WIN32_PROC??)\Byte i I/O-data per sekund
  • \Processor(_Total)% processortid

Mer information finns i Systemprestandaräknare i Application Insights och Application Insights för Azure Cloud Services.

Microsoft Azure Diagnostics

Viktigt

Även om alla dessa data aggregeras till lagringskontot tillhandahåller portalen inte ett internt sätt att kartlägga data. Vi rekommenderar starkt att du integrerar en annan diagnostiktjänst, till exempel Application Insights, i ditt program.

Med tillägget Azure Diagnostics för Cloud Services kan du ange vilka prestandaräknare du vill samla in. Information om hur du konfigurerar Azure Diagnostics finns i Översikt över övervakning av molntjänster.

De prestandaräknare som du vill samla in definieras i filen diagnostics.wadcfgx . Öppna den här filen (den definieras per roll) i Visual Studio och leta reda på elementet DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters . Lägg till ett nytt PerformanceCounterConfiguration-element som underordnat. Det här elementet har två attribut: counterSpecifier och sampleRate. Attributet counterSpecifier definierar vilken systemprestandaräknare som ska samlas in (beskrivs i föregående avsnitt). Värdet sampleRate anger hur ofta det värdet avsöks. Som helhet överförs alla prestandaräknare till Azure enligt det överordnade PerformanceCounters elementets scheduledTransferPeriod attributvärde.

Mer information om schemaelementet PerformanceCounters finns i Azure Diagnostics Schema.

Den period som definieras av sampleRate attributet använder datatypen XML-varaktighet för att ange hur ofta prestandaräknaren avsöks. I exemplet nedan anges frekvensen till PT3M, vilket innebär [P]eriod[T]ime[3][M]inutes: var tredje minut.

Mer information om hur sampleRate och scheduledTransferPeriod definieras finns i avsnittet Varaktighetsdatatyp i självstudien W3 XML Datum- och tidsdatumtyper .

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

Skapa en ny perf-räknare

En ny prestandaräknare kan skapas och användas av koden. Koden som skapar en ny prestandaräknare måste köras förhöjd, annars misslyckas den. Startkoden för molntjänsten OnStart kan skapa prestandaräknaren, vilket kräver att du kör rollen i en upphöjd kontext. Eller så kan du skapa en startuppgift som körs förhöjd och skapar prestandaräknaren. Mer information om startuppgifter finns i Så här konfigurerar och kör du startuppgifter för en molntjänst.

Om du vill konfigurera din roll så att den körs förhöjd lägger du till ett <Runtime> element i .csdef-filen .

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

Du kan skapa och registrera en ny prestandaräknare med några rader kod. Använd den System.Diagnostics.PerformanceCounterCategory.Create metodöverlagring som skapar både kategorin och räknaren. Följande kod kontrollerar först om kategorin finns och skapar både kategorin och räknaren om den saknas.

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

När du vill använda räknaren anropar Increment du metoden eller IncrementBy .

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

Nu när ditt program använder din anpassade räknare måste du konfigurera Azure Diagnostics eller Application Insights för att spåra räknaren.

Application Insights

Som tidigare nämnts definieras prestandaräknarna för Application Insights i filenApplicationInsights.config . Öppna ApplicationInsights.config och leta upp elementet ApplicationInsights>TelemetryModules>Add>Counters . Skapa ett underordnat <Add>PerformanceCounter element och ange attributet till kategorin och namnet på prestandaräknaren som du skapade i koden. Ange attributet ReportAs till ett eget namn som du vill se i portalen.

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

Microsoft Azure Diagnostics

Som tidigare nämnts definieras de prestandaräknare som du vill samla in i filen diagnostics.wadcfgx . Öppna den här filen (den definieras per roll) i Visual Studio och leta reda på elementet DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters . Lägg till ett nytt PerformanceCounterConfiguration-element som underordnat. counterSpecifier Ange attributet till kategorin och namnet på prestandaräknaren som du skapade i koden.

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

Mer information