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>