Partage via


Compteurs pour .NET dans Application Insights

Azure MonitorApplication Insights prend en charge les compteurs de performances et les compteurs d’événements. Ce guide fournit une vue d’ensemble des deux, notamment leur objectif, leur configuration et leur utilisation dans les applications .NET.

Attention

Nous recommandons la distribution OpenTelemetry Azure Monitor pour les nouvelles applications ou les nouveaux clients afin d’alimenter Azure Monitor Application Insights. La distribution OpenTelemetry Azure Monitor offre une expérience et des fonctionnalités similaires à celles du SDK Application Insights. Il est possible de migrer à partir du Kit de développement logiciel (SDK) Application Insights en utilisant les guides de migration pour .NET, Node.js et Python, mais nous travaillons encore à l’ajout de quelques fonctionnalités supplémentaires pour la compatibilité descendante.

Vue d’ensemble

  • Les compteurs de performances sont intégrés au système d’exploitation Windows et offrent des indicateurs de performance prédéfinis tels que l’utilisation du processeur, la consommation de mémoire et l’activité de disque. Ces compteurs sont idéaux pour surveiller les indicateurs de performance standard avec une configuration minimale. Ils permettent de suivre l’utilisation des ressources ou de résoudre les goulots d’étranglement au niveau du système dans les applications Windows, mais ne prennent pas en charge les indicateurs de performance personnalisés spécifiques aux applications.
  • Les compteurs d’événements fonctionnent sur plusieurs plateformes, notamment Windows, Linux et macOS. Ils permettent aux développeurs de définir et de surveiller des mesures légères et personnalisables propres à l’application, offrant plus de flexibilité que les compteurs de performances. Les compteurs d’événements sont utiles lorsque les mesures système sont insuffisantes ou lorsque des données de télémétrie détaillées sont nécessaires dans les applications multiplateformes. Ils nécessitent une implémentation et une configuration explicites, ce qui rend la configuration plus intensive.

Configuration des compteurs

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.

Votre application prend en charge la collecte de compteurs de performances si elle s’exécute sous Internet Information Server (IIS) sur un hôte local ou une machine virtuelle disposant d’un accès administratif. Les applications s’exécutant en tant qu’Azure Web Apps ne peuvent pas accéder directement aux compteurs de performances, mais Application Insights collecte un sous-ensemble de compteurs disponibles.

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.

Les compteurs par défaut pour les applications web 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 CLR (Common Language Runtime) .NET 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 pour les applications web ASP.NET Core 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 capturez les compteurs standard et ceux que vous implémentez 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()/-_ \.]+.

Si vous spécifiez une instance, elle devient une 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();

Nombres ASP.NET et Application Insights

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

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 les compteurs d’événements.

Requêtes 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 :

performanceCounters | summarize count(), avg(value) by category, instance, counter

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 :

performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart

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 :

performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)

Alertes

Comme d’autres mesures, vous pouvez définir une alerte pour avertir si un compteur dépasse une limite spécifiée.

Pour définir une alerte, ouvrez le volet Alertes et cliquez sur Ajouter une alerte.

Forum aux questions

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 mesure Exceptions compte le nombre de rapports TrackException 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 écrivez des appels TrackException dans votre code. Il n’inclut pas toutes les exceptions non prises en charge.