Prestatiemeteritems verzamelen voor uw Azure Cloud Service (klassiek)

Belangrijk

Cloud Services (klassiek) is nu afgeschaft voor nieuwe klanten en wordt op 31 augustus 2024 voor alle klanten buiten gebruik gesteld. Nieuwe implementaties moeten gebruikmaken van het nieuwe implementatiemodel op basis van Azure Resource Manager Azure Cloud Services (uitgebreide ondersteuning).

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

Beschikbare tellers detecteren

Een prestatiemeteritems bestaat uit twee delen, een setnaam (ook wel categorie genoemd) en een of meer tellers. U kunt PowerShell gebruiken om een lijst met beschikbare prestatiemeteritems 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 CounterSetName eigenschap vertegenwoordigt een set (of categorie) en is een goede indicator van de prestatiemeteritems. De Paths eigenschap vertegenwoordigt een verzameling tellers voor een set. U kunt ook de Description eigenschap ophalen voor meer informatie over de tellerset.

Als u alle tellers voor een set wilt ophalen, gebruikt u de CounterSetName waarde en vouwt u de Paths verzameling uit. Elk paditem is een teller waarop u een query kunt uitvoeren. Als u bijvoorbeeld de beschikbare tellers wilt ophalen die betrekking hebben op de Processor set, vouwt u de verzameling uit 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

Deze afzonderlijke tellerpaden kunnen worden toegevoegd aan het diagnostische framework dat uw cloudservice gebruikt. Zie Een tellerpad opgeven voor meer informatie over de opbouw van een prestatiemeteritemspad.

Een prestatiemeteritems verzamelen

Er kan een prestatiemeteritem worden toegevoegd aan uw cloudservice voor Azure Diagnostics of Application Insights.

Application Insights

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

Open het ApplicationInsights.config-bestand en zoek het element ApplicationInsights>TelemetryModules . Elk <Add> onderliggend element definieert een type telemetrie dat moet worden verzameld, samen met de bijbehorende configuratie. Het type telemetriemodule voor prestatiemeteritems is Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector. Als dit element al is gedefinieerd, moet u het niet een tweede keer toevoegen. Elk te verzamelen prestatiemeteritems wordt gedefinieerd onder een knooppunt met de naam <Counters>. Hier volgt een voorbeeld van het verzamelen van prestatiemeteritems voor stations:

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

Elk prestatiemeteritem wordt weergegeven als een <Add> element onder <Counters>. Het PerformanceCounter kenmerk definieert welk prestatiemeteritems moet worden verzameld. Het ReportAs kenmerk is de titel die moet worden weergegeven in de Azure Portal voor het prestatiemeteritems. Elk prestatiemeteritems dat u verzamelt, wordt in de portal in een categorie met de naam Aangepast geplaatst. In tegenstelling tot Azure Diagnostics kunt u het interval niet instellen dat deze prestatiemeteritems worden verzameld en naar Azure worden verzonden. Met Application Insights worden prestatiemeteritems elke minuut verzameld en verzonden.

Application Insights verzamelt automatisch de volgende prestatiemeteritems:

  • \Process(?? APP_WIN32_PROC??) % processortijd
  • \Memory\Available Bytes
  • .NET CLR Exceptions(?? APP_CLR_PROC??) Aantal gegenereerde exceps per seconde
  • \Process(??APP_WIN32_PROC??)\Private Bytes
  • \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
  • \Processor(_Total)% processortijd

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

Azure Diagnostics

Belangrijk

Hoewel al deze gegevens worden samengevoegd in het opslagaccount, biedt de portal geen systeemeigen 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 de Azure Diagnostics-extensie voor Cloud Services kunt u opgeven welke prestatiemeteritems u wilt verzamelen. Zie Overzicht van cloudservicebewaking als u Azure Diagnostics wilt instellen.

De prestatiemeteritems die u wilt verzamelen, worden gedefinieerd in het bestand diagnostics.wadcfgx . Open dit bestand (het is gedefinieerd per rol) in Visual Studio en zoek het element DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfigConfigPerformanceCounters>. 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 prestatiemeteritems overgedragen naar Azure op basis van de kenmerkwaarde van scheduledTransferPeriod het bovenliggende PerformanceCounters element.

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

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

Zie de sectie Duurgegevenstype in de sampleRate zelfstudie W3 XML-datum- en tijddatumtypen voor meer informatie over hoe de en scheduledTransferPeriod worden 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 nieuwe prestatiemeteritems maken

Er kan een nieuw prestatiemeteritems worden gemaakt en gebruikt door uw code. De code waarmee een nieuw prestatiemeteritems wordt gemaakt, moet met verhoogde bevoegdheden worden uitgevoerd, anders mislukt het. De opstartcode van uw cloudservice OnStart kan het prestatiemeteritem maken, waarbij u de rol in een verhoogde context moet uitvoeren. U kunt ook een opstarttaak maken die met verhoogde bevoegdheid wordt uitgevoerd en het prestatiemeteritems maakt. Zie Opstarttaken configureren en uitvoeren voor een cloudservice voor meer informatie over opstarttaken.

Als u wilt configureren dat uw rol met verhoogde bevoegdheid wordt uitgevoerd, voegt u een <Runtime> -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 nieuw prestatiemeteritems maken en registreren met een paar regels code. Gebruik de System.Diagnostics.PerformanceCounterCategory.Create methode overload waarmee zowel de categorie als de teller wordt 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 gebruikmaakt van uw aangepaste teller, moet u Azure Diagnostics of Application Insights configureren om de teller bij te houden.

Application Insights

Zoals eerder vermeld, worden de prestatiemeteritems voor Application Insights gedefinieerd in het ApplicationInsights.config-bestand . Open ApplicationInsights.config en zoek het element ApplicationInsights>TelemetryModules>Tellers toevoegen>. Maak een <Add> onderliggend element en stel het PerformanceCounter kenmerk in op de categorie en naam van het prestatiemeteritem dat u in uw code hebt gemaakt. Stel het ReportAs kenmerk in op een beschrijvende naam die u in de portal wilt zien.

<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 prestatiemeteritems die u wilt verzamelen gedefinieerd in het bestand diagnostics.wadcfgx . Open dit bestand (het is gedefinieerd per rol) in Visual Studio en zoek het element DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfigConfigPerformanceCounters>. Voeg een nieuw PerformanceCounterConfiguration-element toe als onderliggend element. Stel het counterSpecifier kenmerk in op de categorie en naam van het prestatiemeteritems dat 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