Delen via


Prestatiemeteritems verzamelen voor uw Azure Cloud Service (klassiek)

Belangrijk

Cloud Services (klassiek) is vanaf 1 september 2024 afgeschaft voor alle klanten. Bestaande actieve implementaties worden gestopt en afgesloten door Microsoft en de gegevens gaan vanaf oktober 2024 permanant verloren. Nieuwe implementaties moeten gebruikmaken van het nieuwe op Azure Resource Manager gebaseerde implementatiemodel 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 naar Azure te verzamelen en te verzenden, kunt u deze informatie analyseren om betere beslissingen te nemen.

Beschikbare tellers ontdekken

Een prestatiemeteritem 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 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 waar de prestatiemeteritems aan zijn gerelateerd. De Paths eigenschap vertegenwoordigt een verzameling meteritems voor een set. U kunt de Description eigenschap ook 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 die u kunt opvragen. Als u bijvoorbeeld de beschikbare tellers wilt ophalen die betrekking hebben op de Processor set, vouwt u de Paths verzameling 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 uw cloudservice gebruikt. Zie Een tellerpad opgeven voor meer informatie over hoe een pad naar een prestatiemeteritem wordt samengesteld.

Een prestatiemeteritems verzamelen

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

Analyses van toepassingen

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

Open het bestand 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 prestatiemeteritems is Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector. Als dit element al is gedefinieerd, voegt u dit geen tweede keer toe. Elk prestatiemeteritem dat moet worden verzameld, 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 ... -->

Elke prestatiemeteritem wordt weergegeven als een <Add> element onder <Counters>. Het PerformanceCounter kenmerk definieert welk prestatiemeteritem moet worden verzameld. Het ReportAs kenmerk is de titel die moet worden weergegeven in Azure Portal voor de prestatiemeteritem. Alle prestatiemeteritems die u verzamelt, worden in een categorie met de naam Aangepast in de portal geplaatst. In tegenstelling tot Azure Diagnostics kunt u het interval 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-uitzonderingen(?? 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 om een andere diagnostische service, zoals Application Insights, te integreren in uw toepassing.

Met de Azure Diagnostics-extensie voor Cloud Services kunt u opgeven welke prestatiemeteritems u wilt verzamelen. Zie Het overzicht van cloudservicebewaking voor het instellen van Azure Diagnostics.

De prestatiemeteritems die u wilt verzamelen, worden gedefinieerd in het bestand diagnostics.wadcfgx . Open dit bestand 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 bepaalt welke systeemprestatiemeteritemset (beschreven in de vorige sectie) moet worden verzameld. De sampleRate waarde geeft aan hoe vaak die waarde wordt gepolerd. Als geheel worden alle prestatiemeteritems overgebracht naar Azure op basis van de kenmerkwaarde van scheduledTransferPeriod het bovenliggende PerformanceCounters element.

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

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

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

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

Als u uw rol wilt configureren om verhoogde bevoegdheden uit te voeren, 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 prestatiemeteritem maken en registreren met een paar regels code. Gebruik de overbelasting van de System.Diagnostics.PerformanceCounterCategory.Create methode waarmee zowel de categorie als de teller wordt gemaakt. Met de volgende code wordt eerst gecontroleerd of de categorie bestaat en of deze ontbreekt, maakt u zowel de categorie als de teller.

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

Als u de teller wilt gebruiken, roept u de Increment of IncrementBy methode 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.

Analyses van toepassingen

Zoals eerder vermeld, worden de prestatiemeteritems voor Application Insights gedefinieerd in het applicationInsights.config-bestand . Open ApplicationInsights.config en zoek het element ApplicationInsights>TelemetryModules>Add>Counters. Maak een <Add> onderliggend element en stel het PerformanceCounter kenmerk in op de categorie en de naam van de prestatiemeteritem die u in uw code hebt gemaakt. Stel het ReportAs kenmerk in op een beschrijvende 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 prestatiemeteritems die u wilt verzamelen gedefinieerd in het bestand diagnostics.wadcfgx . Open dit bestand 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 de naam van de prestatiemeteritem 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>

Volgende stappen