Collecter les compteurs de performances pour votre instance d’Azure Cloud Services (classique)
Important
Cloud Services (classique) est désormais déconseillé pour tous les clients depuis le 1er septembre 2024. Tous les déploiements existants en cours d’exécution seront arrêtés par Microsoft, et les données seront définitivement perdues à partir d’octobre 2024. Les nouveaux déploiements doivent utiliser le nouveau modèle de déploiement basé sur Azure Resource Manager Azure Cloud Services (support étendu) .
Les compteurs de performances vous permettent de suivre les performances de votre application et de l’hôte. Windows Server fournit de nombreux compteurs de performances différents liés au matériel, aux applications, au système d’exploitation, et bien plus encore. En collectant et en envoyant des compteurs de performances à Azure, vous pouvez analyser ces informations pour contribuer à la prise de meilleures décisions.
Découvrir les compteurs disponibles
Un compteur de performances est constitué de deux parties : un nom d’ensemble de compteurs (également appelé catégorie) et un ou plusieurs compteurs. Vous pouvez utiliser PowerShell pour obtenir la liste des compteurs de performances disponibles :
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 ...
La propriété CounterSetName
représente un ensemble de compteurs (ou catégorie), et est un bon indicateur de ce à quoi on trait les compteurs de performances. La propriété Paths
représente une collection de compteurs pour un ensemble. Vous pouvez également obtenir la propriété Description
pour plus d’informations sur l’ensemble de compteurs.
Pour obtenir tous les compteurs d’un ensemble, utilisez la valeur CounterSetName
et développez la collection Paths
. Chaque élément du chemin d’accès est un compteur que vous pouvez interroger. Par exemple, pour obtenir les compteurs disponibles relatifs à l’ensemble de compteurs Processor
, développez la collection 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
Ces chemins d’accès de compteurs individuels peuvent être ajoutés à l’infrastructure de diagnostics que votre service cloud utilise. Pour plus d’informations sur la construction d’un chemin d’accès au compteur de performances, voir Spécification d’un chemin d’accès au compteur.
Collecter un compteur de performances
Un compteur de performances peut être ajouté à votre service cloud pour Diagnostics Azure ou Application Insights.
Application Insights
Azure Application Insights pour Cloud Services vous permet de spécifier les compteurs de performances que vous souhaitez collecter. Après l’ajout d’Application Insights à votre projet, un fichier de configuration nommé ApplicationInsights.config est ajouté à votre projet Visual Studio. Ce fichier de configuration définit le type d’informations qu’Application Insights collecte et envoie à Azure.
Ouvrez le fichier ApplicationInsights.config et recherchez l’élément ApplicationInsights>TelemetryModules. Chaque élément enfant <Add>
définit un type de télémétrie à collecter, ainsi que sa configuration. Le type de module de télémétrie de compteur de performances est Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector
. Si cet élément est déjà défini, ne l’ajoutez pas une deuxième fois. Chaque compteur de performances à collecter est défini sous un nœud nommé <Counters>
. Voici un exemple qui collecte des compteurs de performances du lecteur :
<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 ... -->
Chaque compteur de performances est représenté en tant qu’élément <Add>
sous <Counters>
. L’attribut PerformanceCounter
définit le compteur de performances à collecter. L’attribut ReportAs
est le titre à afficher dans le portail Azure pour le compteur de performances. Tout compteur de performances que vous collectez est placé dans une catégorie nommée Personnalisé dans le portail. Contrairement à Diagnostics Azure, vous ne pouvez pas définir l’intervalle de collecte et d’envoie à Azure ces compteurs de performances. Avec Application Insights, les compteurs de performances sont collectés et envoyés toutes les minutes.
Application Insights collecte automatiquement des compteurs de performances suivants :
- \Process(??APP_WIN32_PROC??)% Processor Time
- \Memory\Octets disponibles
- .NET CLR Exceptions(??APP_CLR_PROC??)# of Exceps Thrown / sec
- \Processus(??APP_WIN32_PROC??)\Octets privés
- \Processus(??APP_WIN32_PROC??)\Nombre d’octets de données E/S par s
- \Processor(_Total)% de temps processeur
Pour plus d’informations, voir Compteurs de performances système dans Application Insights et Application Insights pour Azure Cloud Services.
Diagnostics Azure
Important
Alors que toutes ces données sont regroupées dans le compte de stockage, le portail ne fournit pas un moyen natif pour les représenter visuellement. Il est fortement recommandé d’intégrer un autre service tel qu’Application Insights dans votre application.
L’extension Diagnostics Azure pour Cloud Services vous permet de que spécifier les compteurs de performances que vous souhaitez collecter. Pour configurer Diagnostics Azure, voir Vue d’ensemble de la surveillance de service cloud.
Les compteurs de performances à collecter sont définis dans le fichier diagnostics.wadcfgx. Ouvrez ce fichier dans Visual Studio, puis recherchez l’élément DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Ajoutez un nouvel élément PerformanceCounterConfiguration en tant qu’enfant. Cet élément a deux attributs : counterSpecifier
et sampleRate
. L’attribut counterSpecifier
définit l’ensemble de compteurs de performances système (indiqué dans la section précédente) à collecter. La valeur sampleRate
indique la fréquence à laquelle cette valeur est interrogée. Dans l’ensemble, tous les compteurs de performances sont transférés vers Azure en fonction de la valeur d’attribut PerformanceCounters
de l’élément scheduledTransferPeriod
parent.
Pour plus d’informations sur l’élément de schéma PerformanceCounters
, voir le schéma Diagnostics Azure.
La période définie par l’attribut sampleRate
utilise le type de données de durée XML pour indiquer la fréquence à laquelle le compteur de performances est interrogé. Dans l’exemple suivant, le taux est défini sur PT3M
, ce qui signifie [P]eriod[T]ime[3][M]inutes
: toutes les trois minutes.
Pour plus d’informations sur la façon dont les valeurs sampleRate
et scheduledTransferPeriod
sont définies, voir la section Duration Data Type (Type de données de date) du didacticiel W3 XML Date and Time Date Types (Types de données de date et d’heure XML W3).
<?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>
Créer un compteur de performances
Votre code peut créer et utiliser un nouveau compteur de performances. Le code créant un compteur de performances doit s’exécuter avec élévation de privilèges, sans quoi son exécution échoue. Le code de démarrage OnStart
de votre service cloud peut créer le compteur de performances, ce qui exige que vous exécutiez le rôle dans un contexte avec élévation de privilèges. Vous pouvez également créer une tâche de démarrage qui s’exécute avec élévation de privilèges et crée le compteur de performances. Pour plus d’informations, voir Comment configurer et exécuter des tâches de démarrage pour un service cloud.
Pour configurer votre rôle afin qu’il s’exécute avec élévation de privilèges, ajoutez un élément <Runtime>
au fichier .csdef.
<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>
Vous pouvez créer et inscrire un compteur de performances avec quelques lignes de code. Utilisez la surcharge de méthode System.Diagnostics.PerformanceCounterCategory.Create
qui crée la catégorie et le compteur. Le code suivant vérifie d’abord si la catégorie existe et, dans la négative, crée la catégorie et le compteur.
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
}
}
Lorsque vous souhaitez utiliser le compteur, appelez la méthode Increment
ou IncrementBy
.
// Increase the counter by 1
counterServiceUsed.Increment();
À présent que votre application utilise votre compteur personnalisé, vous devez configurer Diagnostics Azure ou Application Insights pour suivre le compteur.
Application Insights
Comme indiqué précédemment, les compteurs de performances pour Application Insights sont définis dans le fichier ApplicationInsights.config. Ouvrez ApplicationInsights.config et recherchez l’élément ApplicationInsights>TelemetryModules>Add>Counters. Créez un élément enfant <Add>
et définissez l’attribut PerformanceCounter
sur la catégorie et le nom du compteur de performances que vous avez créé dans votre code. Définissez l’attribut ReportAs
sur un nom convivial que vous souhaitez afficher dans le portail.
<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 ... -->
Diagnostics Azure
Comme indiqué précédemment, les compteurs de performances à collecter sont définis dans le fichier diagnostics.wadcfgx. Ouvrez ce fichier dans Visual Studio, puis recherchez l’élément DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Ajoutez un nouvel élément PerformanceCounterConfiguration en tant qu’enfant. Définissez l’attribut counterSpecifier
sur la catégorie et le nom du compteur de performances que vous avez créé dans votre code.
<?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>