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>