Compteurs de performances système dans Application Insights

Windows offre divers compteurs de performances, tels que ceux utilisés pour rassembler les statistiques d’utilisation du processeur, de la mémoire et du disque. Vous pouvez également définir vos propres compteurs de performances.

La collection de compteurs de performance est prise en charge tant que votre application est exécutée sous IIS sur un hôte ou une machine virtuelle local sur lequel vous disposez d’un accès administratif. Bien que les applications exécutées en tant qu’applications web Azure n’aient pas d’accès direct aux compteurs de performance, un sous-ensemble des compteurs disponibles est collecté par Application Insights.

Remarque

La documentation suivante s’appuie sur l’API classique d’Application Insights. Le plan à long terme pour Application Insights est de collecter des données en utilisant OpenTelemetry. Pour plus d’informations, consultez la section Activer Azure Monitor OpenTelemetry pour les applications .NET, Node.js, Python et Java.

Prérequis

Accordez l’autorisation du compte de service du pool d’applications pour analyser les compteurs de performances en l’ajoutant au groupe Utilisateurs analyseur de performances.

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"

Afficher des compteurs

Le volet Métriques affiche un ensemble de compteurs de performances par défaut.

Screenshot that shows performance counters reported in Application Insights.

Les compteurs par défaut actuels pour les applications ASP.NET sont les suivants :

  • % du processus\Temps du processeur
  • % du processus\Temps du processeur normalisé
  • Mémoire\octets disponibles
  • Demandes ASP.NET/seconde
  • Exceptions .NET CLR levées/seconde
  • Heure d’exécution de ASP.NET ApplicationsRequest
  • Processus\Octets privés
  • Processus\Nombre d'octets de données E/S par s
  • Applications\demandes dans la file d'attente d'application ASP.NET
  • Processeur(_Total)\% de temps processeur

Les compteurs par défaut actuels collectés pour les applications ASP.NET sont les suivants :

  • % du processus\Temps du processeur
  • % du processus\Temps du processeur normalisé
  • Mémoire\octets disponibles
  • Processus\Octets privés
  • Processus\Nombre d'octets de données E/S par s
  • Processeur(_Total)\% de temps processeur

Ajouter des compteurs

Si le compteur de performances que vous souhaitez n’est pas inclus dans la liste des métriques, vous pouvez l’y ajouter.

  1. Découvrez les compteurs disponibles sur votre serveur à l’aide de la commande PowerShell suivante sur le serveur local :

    Get-Counter -ListSet *
    

    Pour plus d’informations, consultez Get-Counter.

  2. Ouvrez ApplicationInsights.config.

    Si vous avez ajouté Application Insights à votre application pendant le développement :

    1. Modifiez ApplicationInsights.config dans votre projet.
    2. Redéployez-le sur vos serveurs.
  3. Modifiez la directive du collecteur de performances :

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

Notes

Les applications ASP.NET Core n’ont pas ApplicationInsights.config, la méthode précédente n’est donc pas valide pour les applications ASP.NET Core.

Vous pouvez capturer les compteurs standard et ceux que vous avez implémentés vous-même. \Objects\Processes est un exemple de compteur standard disponible sur tous les systèmes Windows. \Sales(photo)\# Items Sold est un exemple de compteur personnalisé qui peut être implémenté dans un service web.

Le format est le suivant : \Category(instance)\Counter ou, pour les catégories qui ne présentent aucune instance : \Category\Counter, tout simplement.

Le paramètre ReportAs est requis pour les noms de compteurs qui ne correspondent pas à [a-zA-Z()/-_ \.]+. À savoir qu’ils contiennent des caractères ne se trouvant pas dans les ensembles suivants : lettres, crochets, barre oblique, trait d’union, trait de soulignement, espace et point.

Si vous spécifiez une instance, elle est collectée en tant que dimension CounterInstanceName de la mesure signalée.

Collecte des compteurs de performance en code pour les applications web ASP.NET ou les applications de console .NET/.NET Core

Pour collecter les compteurs de performances système et les envoyer à Application Insights, vous pouvez adapter l’extrait de code suivant :

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Ou vous pouvez effectuer la même opération avec les mesures personnalisées que vous avez créées :

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Collecte des compteurs de performance en code pour les applications web ASP.NET Core

Configurez PerformanceCollectorModule après la WebApplication.CreateBuilder() méthode dans Program.cs:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
    {
        // The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
        module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
    });

var app = builder.Build();

Compteurs de performances dans Log Analytics

Vous pouvez rechercher et afficher des rapports de compteur de performances dans Log Analytics.

Le schéma compteur de performances expose les noms category, counter et instance nom de chaque compteur de performance. Dans les données de télémétrie de chaque application, vous voyez uniquement les compteurs de cette application. Par exemple, pour voir les compteurs disponibles :

Screenshot that shows performance counters in Application Insights analytics.

Ici, Instance fait ici référence à l’instance de compteur de performances, pas à l’instance de rôle ou de machine serveur. Le nom d’instance de compteur de performances segmente généralement les compteurs comme le temps processeur par le nom du processus ou de l’application.

Pour obtenir un graphique présentant la mémoire disponible sur une période récente :

Screenshot that shows a memory time chart in Application Insights analytics.

Comme les autres données de télémétrie, performanceCounters possède également une colonne cloud_RoleInstance qui indique l’identité de l’instance de serveur hôte sur lequel votre application est en cours d’exécution. Par exemple, pour comparer les performances de votre application sur des ordinateurs différents :

Screenshot that shows performance segmented by role instance in Application Insights analytics.

Nombres ASP.NET et Application Insights

Les sections suivantes traitent des décomptes d’ASP.NET et Application Insights.

Quelle est la différence entre le taux d’exceptions et les mesures d’exceptions ?

  • Exception rate : le taux d’exceptions est un compteur de performances système. Le CLR compte l’ensemble des exceptions gérées et non gérées qui sont levées et divise le total d’un intervalle d’échantillonnage par la longueur de cet intervalle. Le Kit de développement logiciel (SDK) Application Insights collecte ce résultat et l’envoie au portail.
  • Exceptions : la métrique Exceptions représente le nombre de TrackException rapports reçus par le portail au cours de l’intervalle d’échantillonnage du graphique. Il inclut uniquement les exceptions gérées pour lesquelles vous avez écrit des appels TrackException dans votre code. Il n’inclut pas toutes les exceptions non prises en charge.

Compteurs de performances pour les applications qui s’exécutent dans les conteneurs Azure Web Apps et Windows sur Azure App Service

Les applications ASP.NET et ASP.NET Core déployées sur les applications web d’Azure s’exécutent dans un environnement de bac à sable spécial. Les applications déployées sur Azure App Service peuvent utiliser un conteneur Windows ou être hébergées dans un environnement de bac à sable. Si l’application est déployée dans un conteneur Windows, tous les compteurs de performances standard sont disponibles dans l’image de conteneur.

L’environnement de bac à sable ne permet pas l’accès direct aux compteurs de performances du système. Cependant, un sous-ensemble limité de compteurs sont exposés en tant que variables d’environnement comme décrit dans Compteurs de performances exposés en tant que variables d’environnement. Seul un sous-ensemble de compteurs est disponible dans cet environnement. Pour obtenir la liste complète, consultez Compteurs de performances exposés en tant que variables d’environnement.

Le kit de développement logiciel (SDK) Application Insights pour ASP.NET et ASP.NET Core détecte si le code est déployé sur une application web et un conteneur non-Windows. La détection détermine si les compteurs de performances sont collectés dans un environnement de bac à sable ou si vous utilisez le mécanisme de collecte standard lorsqu’ils sont hébergés sur un conteneur Windows ou une machine virtuelle.

Compteurs de performances dans les applications ASP.NET Core

La prise en charge des compteurs de performances dans ASP.Net Core est limitée :

  • Les versions 2.4.1 et ultérieures du kit SDK collectent les compteurs de performances si l’application s’exécute dans Azure Web Apps (Windows).
  • Les versions 2.7.1 et ultérieures du kit SDK collectent les compteurs de performances si l’application s’exécute dans Windows et cible NETSTANDARD2.0 ou version ultérieure.
  • Pour les applications ciblant .NET Framework, toutes les versions du SDK prennent en charge les compteurs de performances.
  • Les versions 2.8.0 et ultérieures du kit de développement logiciel (SDK) prennent en charge le compteur processeur/mémoire dans Linux. Aucun autre compteur n’est pris en charge dans Linux. Pour obtenir les compteurs système dans Linux (et dans d’autres environnements non-Windows), utilisez EventCounters.

Alertes

Comme d’autres mesures, vous pouvez définir une alerte pour vous avertir si un compteur de performances dépasse une limite que vous spécifiez. Pour définir une alerte, ouvrez le volet Alertes et cliquez sur Ajouter une alerte.

Étapes suivantes