Prestatiemeters verzamelen voor uw Azure Cloud Service (klassiek)

Belangrijk

Azure Cloud Services (uitgebreide ondersteuning) is een nieuw Azure Resource Manager implementatiemodel voor het Azure Cloud Services product.Met deze wijziging is Azure Cloud Services die wordt uitgevoerd op het implementatiemodel op basis van Azure Service Manager, hernoemd in Cloud Services (klassiek) en moeten alle nieuwe implementaties gebruikmaken van Cloud Services (uitgebreide ondersteuning).

Prestatiemeters bieden u een manier om bij te houden hoe goed uw toepassing en de host presteren. Windows Server biedt veel verschillende prestatiemeters met betrekking tot hardware, toepassingen, het besturingssysteem en meer. Door prestatiemeters te verzamelen en naar Azure te verzenden, kunt u deze informatie analyseren om betere beslissingen te nemen.

Beschikbare tellers ontdekken

Een prestatiemeter bestaat uit twee delen: een setnaam (ook wel een categorie genoemd) en een of meer tellers. U kunt PowerShell gebruiken om een lijst met beschikbare prestatiemeters op te halen:

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

De eigenschap vertegenwoordigt een set (of categorie) en is een goede CounterSetName indicator van waar de prestatiemeters aan zijn gerelateerd. De Paths eigenschap vertegenwoordigt een verzameling tellers voor een set. U kunt de eigenschap ook Description verkrijgen voor meer informatie over de tellerset.

Als u alle tellers voor een set wilt ophalen, gebruikt u de CounterSetName waarde en vouwt u de verzameling Paths uit. Elk paditem is een item dat u kunt opvragen. Als u bijvoorbeeld de beschikbare tellers wilt ophalen die betrekking hebben op de Processor set, vouwt u de verzameling Paths uit:

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

Deze afzonderlijke tellerpaden kunnen worden toegevoegd aan het diagnostische framework dat door uw cloudservice wordt gebruikt. Zie voor meer informatie over hoe een prestatiemeter pad wordt samengesteld, opgeven van een pad teller.

Een prestatiemeter verzamelen

Er kan een prestatiemeter worden toegevoegd aan uw cloudservice voor Azure Diagnostics application Insights.

Application Insights

Azure-toepassing Insights voor Cloud Services kunt u opgeven welke prestatiemeters u wilt verzamelen. Nadat u Application Insights aan uw projecthebt toegevoegd, wordt er een configuratiebestand met de ApplicationInsights.config toegevoegd aan uw Visual Studio project. Dit configuratiebestand definieert welk type informatie application Insights verzamelt en verzendt naar Azure.

Open het ApplicationInsights.config en zoek het element ApplicationInsights > TelemetryModules. Elk <Add> onderliggend element definieert een type telemetrie dat moet worden verzameld, samen met de configuratie. Het type telemetriemodule voor prestatiemeters is Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector . Als dit element al is gedefinieerd, moet u het niet nog een keer toevoegen. Elke prestatiemeter die moet worden verzameld, wordt gedefinieerd onder een knooppunt met de naam <Counters> . Hier is een voorbeeld dat prestatiemeters voor station verzamelt:

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

Elke prestatiemeter wordt weergegeven als een <Add> element onder <Counters> . Het PerformanceCounter kenmerk definieert welke prestatiemeters moeten worden verzameld. Het ReportAs kenmerk is de titel die moet worden weergegeven in Azure Portal prestatiemeter. Prestatiemeters die u verzamelt, worden in de portal in een categorie met de naam Aangepast gezet. In Azure Diagnostics kunt u het interval dat deze prestatiemeters worden verzameld en verzonden naar Azure niet instellen. Met Application Insights worden prestatiemeters verzameld en elke minuut verzonden.

Application Insights verzamelt automatisch de volgende prestatiemeters:

  • \Process(?? APP_WIN32_PROC?) % Processortijd
  • \Memory\Available Bytes
  • .NET CLR Exceptions(??APP_CLR_PROC??)# of Exceps Thrown / sec
  • \Process(??APP_WIN32_PROC??)\Private Bytes
  • \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
  • \Processor(_Total)% Processor Time

Zie Systeemprestatiemeters in Application Insights en Application Insights for Azure Cloud Services voor meer informatie.

Azure Diagnostics

Belangrijk

Hoewel al deze gegevens worden geaggregeerd in het opslagaccount, biedt de portal geen native manier om de gegevens in kaart te brengen. Het wordt ten zeerste aanbevolen dat u een andere diagnostische service, zoals Application Insights, in uw toepassing integreert.

Met Azure Diagnostics-extensie voor Cloud Services kunt u opgeven welke prestatiemeters u wilt verzamelen. Zie Overzicht van cloudservicebewaking Azure Diagnostics het instellen van een cloudservice.

De prestatiemeters die u wilt verzamelen, worden gedefinieerd in het bestand diagnostics.wadcfgx. Open dit bestand (dit wordt per rol gedefinieerd) in Visual Studio en zoek het element DiagnosticsConfiguration > PublicConfig > WadCfg > DiagnosticMonitorConfiguration > PerformanceCounters. Voeg een nieuw PerformanceCounterConfiguration-element toe als onderliggend element. Dit element heeft twee kenmerken: counterSpecifier en sampleRate . Het counterSpecifier kenmerk definieert welke systeemprestatiemeterset (beschreven in de vorige sectie) moet worden verzameld. De sampleRate waarde geeft aan hoe vaak die waarde wordt gepeild. Als geheel worden alle prestatiemeters overgebracht naar Azure volgens de kenmerkwaarde PerformanceCounters van het scheduledTransferPeriod bovenliggende element.

Zie voor meer informatie over PerformanceCounters het schema-element de Azure Diagnostics Schema.

De periode die is gedefinieerd door het kenmerk maakt gebruik van het gegevenstype XML-duur om aan te geven hoe vaak de sampleRate prestatiemeter wordt gepeild. In het onderstaande voorbeeld wordt de snelheid ingesteld op PT3M , wat [P]eriod[T]ime[3][M]inutes betekent: om de drie minuten.

Zie de sectie Duurgegevenstype in de zelfstudie sampleRate scheduledTransferPeriod W3 XML-datum- en tijddatumtypen voor meer informatie over hoe en zijn gedefinieerd.

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

Een nieuw perf-teller maken

Er kan een nieuwe prestatiemeter worden gemaakt en gebruikt door uw code. Uw code die een nieuwe prestatiemeter maakt, moet worden uitgevoerd met verhoogde niveaus, anders mislukt deze. De opstartcode van uw cloudservice kan de prestatiemeter maken, waardoor u de rol OnStart moet uitvoeren in een context met verhoogde rollen. U kunt ook een opstarttaak maken die wordt uitgevoerd met verhoogde taken en het prestatiemeterpunt maakt. Zie Opstarttaken configureren en uitvoeren voor een cloudservice voor meer informatie over opstarttaken.

Als u uw rol wilt configureren voor het uitvoeren van verhoogde niveaus, voegt u <Runtime> een -element toe aan het CSDEF-bestand.

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

U kunt een nieuwe prestatiemeter maken en registreren met een paar regels code. Gebruik de System.Diagnostics.PerformanceCounterCategory.Create methode overload waarmee zowel de categorie als de teller worden gemaakt. Met de volgende code wordt eerst gecontroleerd of de categorie bestaat en als deze ontbreekt, worden zowel de categorie als de teller gemaakt.

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

Wanneer u de teller wilt gebruiken, roept u de Increment methode of IncrementBy aan.

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

Nu uw toepassing uw aangepaste teller gebruikt, moet u de Azure Diagnostics of Application Insights configureren om de teller bij te houden.

Application Insights

Zoals eerder vermeld, worden de prestatiemeters voor Application Insights gedefinieerd in hetApplicationInsights.configbestand. Open ApplicationInsights.config en zoek het element ApplicationInsights > TelemetryModules > Add > Counters. Maak een <Add> onderliggend element en stel het kenmerk in op de categorie en naam van de prestatiemeter die u in uw code hebt PerformanceCounter gemaakt. Stel het ReportAs kenmerk in op een gebruiksvriendelijke naam die u wilt zien in de portal.

<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

Zoals eerder vermeld, worden de prestatiemeters die u wilt verzamelen, gedefinieerd in het bestand diagnostics.wadcfgx. Open dit bestand (dit wordt per rol gedefinieerd) in Visual Studio en zoek het element DiagnosticsConfiguration > PublicConfig > WadCfg > DiagnosticMonitorConfiguration > PerformanceCounters. Voeg een nieuw PerformanceCounterConfiguration-element toe als onderliggend element. Stel het counterSpecifier kenmerk in op de categorie en naam van de prestatiemeter die u in uw code hebt gemaakt.

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

Meer informatie