Partager via


Résoudre les problèmes d’activation du Débogueur de capture instantanée Application Insights ou d’affichage d’instantanés

Si vous avez activé Débogueur de capture instantanée Application Insights pour votre application, mais que vous ne voyez pas de captures instantanées pour les exceptions, vous pouvez utiliser ces instructions pour résoudre les problèmes.

Il peut y avoir de nombreuses raisons différentes pour lesquelles les captures instantanées ne sont pas générées. Vous pouvez commencer par exécuter le contrôle d’intégrité de capture instantanée pour identifier certaines des causes courantes possibles.

Scénarios non pris en charge

Vous trouverez ci-dessous des scénarios dans lesquels Snapshot Collector n’est pas pris en charge :

Scénario Effets secondaires Recommandation
Lorsque vous utilisez le SDK Snapshot Collector directement depuis votre application (.csproj) et que vous avez activé l’option avancée « Interop ». Le kit de développement logiciel (SDK) Application Insights local (y compris la télémétrie Snapshot Collector) sera perdu. Par conséquent, aucun instantané n’est disponible.
Votre application peut se bloquer au démarrage avec System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor
Pour plus d’informations sur la fonctionnalité « Interop » d’Application Insights, consultez la documentation.
Si vous utilisez l’option avancée « Interop », utilisez l’injection Snapshot Collector sans code (activée via l’expérience utilisateur du portail Azure)

Vérifier que vous utilisez le bon point de terminaison du Débogueur de capture instantanée

Actuellement, seules les régions Azure Government et Microsoft Azure géré par 21Vianet nécessitent des modifications de leurs points de terminaison.

Pour App Service et les applications qui utilisent le SDK Application Insights, vous devez mettre à jour la chaîne de connexion à l’aide des valeurs de substitution prises en charge pour le Débogueur de capture instantanée, comme indiqué ci-dessous :

Propriété de chaîne de connexion Cloud US Government China Cloud
SnapshotEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Pour plus d’informations sur les autres substitutions de connexion, consultez la documentation Application Insights.

Pour Function App, vous devez mettre à jour host.json à l’aide des valeurs de substitution prises en charge ci-dessous :

Propriété Cloud US Government China Cloud
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Voici un exemple d’un host.json mis à jour avec le point de terminaison de l’agent cloud US Government :

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      },
      "snapshotConfiguration": {
        "isEnabled": true,
        "agentEndpoint": "https://snapshot.monitor.azure.us"
      }
    }
  }
}

Utiliser le contrôle d’intégrité de capture instantanée

Plusieurs problèmes courants empêchent l’affichage du message Ouvrir l’instantané de débogage. L’utilisation d’un collecteur de captures instantanées obsolète, par exemple lié à l’atteinte de la limite de chargement quotidienne, entraîne un temps de téléchargement important. Utilisez le contrôle d’intégrité de capture instantanée pour résoudre des problèmes courants.

Il existe un lien dans le volet d’exception de l’affichage de suivi de bout en bout, qui permet d’accéder au contrôle d’intégrité de capture instantanée.

Capture d’écran montrant comment entrer un contrôle d’intégrité de capture instantanée.

L’interface interactive, de type conversation, recherche des problèmes courants et vous guide pour les résoudre.

Capture d’écran montrant la fenêtre interactive Contrôle d’intégrité qui liste les problèmes et les suggestions pour les résoudre.

Si cela ne résout pas le problème, consultez les étapes de dépannage manuel suivantes.

Vérifier la clé d’instrumentation

Assurez-vous que vous utilisez la clé d’instrumentation correcte dans votre application publiée. En règle générale, la clé d’instrumentation est lue à partir du fichier ApplicationInsights.config. Vérifiez que la valeur est identique à la clé d’instrumentation de la ressource Application Insights que vous voyez dans le portail.

Notes

Le support de l’ingestion de clé d’instrumentation prendra fin le 31 mars 2025. L’ingestion de clé d’instrumentation continuera de fonctionner, mais nous ne fournirons plus de mises à jour ni de support pour la fonctionnalité. Passez aux chaînes de connexion pour tirer parti des nouvelles fonctionnalités.

Vérifier les paramètres du client TLS/SSL (ASP.NET)

Si vous avez une application ASP.NET qui est hébergée dans Azure App Service ou IIS sur une machine virtuelle, votre application risque de ne pas pouvoir se connecter au service Débogueur de capture instantanée en raison d’un protocole de sécurité SSL manquant.

Le point de terminaison Débogueur de capture instantanée nécessite la version 1.2 du protocole TLS. L’ensemble des protocoles de sécurité SSL est l’un des quirks activés par la valeur httpRuntime targetFramework dans la section system.web de web.config. Si httpRuntime targetFramework est 4.5.2 ou inférieure, TLS 1.2 n’est pas inclus par défaut.

Remarque

La valeur httpRuntime targetFramework est indépendante de la version cible du framework cible utilisée lors de la génération de votre application. Pour vérifier le paramètre, ouvrez votre fichier web.config et recherchez la section system.web. Assurez-vous que le targetFramework pour httpRuntime est défini sur 4.6 ou une version ultérieure.

<system.web>
   ...
   <httpRuntime targetFramework="4.7.2" />
   ...
</system.web>

Notes

La modification de la valeur httpRuntime targetFramework modifie les quirks du runtime appliquées à votre application et peut entraîner d’autres changements de comportement subtils. Veillez à tester soigneusement votre application après avoir apporté cette modification. Pour obtenir la liste complète des modifications de compatibilité, consultez Reciblage des modifications.

Remarque

Si la version de targetFramework est 4.7 ou ultérieure, Windows détermine les protocoles disponibles. Dans Azure App Service, TLS 1.2 est disponible. Toutefois, si vous utilisez votre propre machine virtuelle, vous devrez peut-être activer TLS 1.2 dans le système d’exploitation.

Scénarios de surcharge du débogueur de capture instantanée

Le débogueur de capture instantanée est conçu pour être utilisé dans les environnements de production. Les paramètres par défaut incluent des limites de débit pour réduire l’impact sur vos applications.

Toutefois, vous pouvez rencontrer de petites surcharges de processeur, de mémoire et d’E/S associées au débogueur de capture instantanée, comme dans les scénarios suivants.

Lorsqu’une exception est levée dans votre application :

  • La création d’une signature pour le type de problème et la décision de créer un instantané ajoute une charge de processeur et de mémoire très petite.
  • Si la désoptimisation est activée, il existe une surcharge pour effectuer un nouveau JIT sur la méthode qui a levé l’exception. Cette opération sera engagée la prochaine fois que la méthode s’exécute. Selon la taille de la méthode, cela peut prendre entre 1 ms et 100 ms de temps processeur.

Si le gestionnaire d’exceptions décide de créer un instantané :

  • La création de l’instantané de processus prend environ une demi-seconde (P50=0,3 s, P90=1,2 s, P95=1,9 s) pendant laquelle le thread qui a levé l’exception est suspendu. Les autres threads ne sont pas bloqués.

  • La conversion de l’instantané de processus en minidump et son chargement dans Application Insights prend plusieurs minutes.

    • Conversion : P50=63 s, P90=187 s, P95=275 s.
    • Chargement : P50=31 s, P90=75 s, P95=98 s.

    Cela s’effectue dans le chargeur de capture instantanée, qui s’exécute dans un processus distinct. Le processus du chargeur de capture instantanée s’exécute en dessous de la priorité normale du processeur et utilise des E/S de basse priorité.

    Le minidump est d’abord écrit sur le disque et la quantité d’espace disque est approximativement identique au jeu de travail du processus d’origine. L’écriture du minidump peut provoquer des erreurs de page au fur et à mesure que la mémoire est lue.

    Le minidump est compressé pendant le chargement, ce qui consomme à la fois le processeur et la mémoire dans le processus du chargeur de capture instantanée. La surcharge du processeur, de la mémoire et du disque est pour cela proportionnelle à la taille de l’instantané du processus. Le chargeur de capture instantanée traite les instantanés en série.

Quand TrackException est appelé :

Le débogueur de capture instantanée vérifie si l’exception est nouvelle ou si un instantané a été créé pour celle-ci. Cela ajoute une charge processeur très petite.

Préversions de .NET Core

Si vous utilisez une préversion de .NET Core ou que votre application fait référence au Kit de développement logiciel (SDK) Application Insights, directement ou indirectement via un assembly dépendant, suivez les instructions pour activer Débogueur de capture instantanée pour d’autres environnements.

Vérifier la page d’état de l’extension de site Services de diagnostic

Si Débogueur de capture instantanée a été activé via le volet Application Insights du portail, il a été activé par l’extension de site Services de diagnostic.

Notes

L’installation sans code du Débogueur de capture instantanée Application Insights suit la politique de support .NET Core. Pour plus d’informations sur les runtimes pris en charge, consultez Politique de support .NET Core. Vous pouvez consulter la page d’état de cette extension en accédant à l’URL suivante : https://{site-name}.scm.azurewebsites.net/DiagnosticServices.

Notes

Le domaine du lien de la page d’état varie en fonction du cloud. Ce domaine sera le même que le site de gestion Kudu pour App Service. Cette page d’état indique l’état d’installation des agents Profiler et Snapshot Collector. Si une erreur inattendue se produit, elle s’affiche et montre comment la corriger.

Vous pouvez utiliser le site de gestion Kudu pour App Service pour obtenir l’URL de base de cette page d’état :

  1. Ouvrez votre application App Service dans le portail Azure.
  2. Sélectionnez Outils avancés ou recherchez Kudu.
  3. Sélectionnez Go.
  4. Une fois que vous êtes sur le site de gestion Kudu, dans l’URL, ajoutez l’élément /DiagnosticServices, puis appuyez sur Entrée. L’URL se terminera comme suit : https://<kudu-url>/DiagnosticServices.

Mettre à niveau vers la dernière version du package NuGet

En fonction de la façon dont Débogueur de capture instantanée a été activé, consultez les options suivantes :

  • Si le Débogueur de capture instantanée a été activé par le biais du volet Application Insights du portail, votre application doit déjà exécuter le dernier package NuGet.

  • Si le Débogueur de capture instantanée a été activé en incluant le package NuGet Microsoft.ApplicationInsights.SnapshotCollector, utilisez le Gestionnaire de package NuGet de Visual Studio pour vérifier que vous utilisez la dernière version de Microsoft.ApplicationInsights.SnapshotCollector.

Pour obtenir les mises à jour et correctifs de bogues les plus récents, consultez les notes de publication.

Vérifier les journaux d’activité du chargeur

Une fois une capture instantanée créée, un fichier minidump (.dmp) est créé sur le disque. Un processus distinct du chargeur crée ce fichier minidump et le charge, ainsi que tous les fichiers PDB associés, vers le stockage du Débogueur de capture instantanée d’Application Insights. Une fois le fichier minidump correctement chargé, il est supprimé du disque. Les fichiers journaux du processus de chargement sont conservés sur disque. Dans un environnement App Service, vous pouvez trouver ces fichiers journaux d’activité dans D:\Home\LogFiles. Le site de gestion Kudu pour App Service permet de rechercher ces fichiers journaux.

  1. Ouvrez votre application App Service dans le portail Azure.
  2. Sélectionnez Outils avancés ou recherchez Kudu.
  3. Sélectionnez Go.
  4. Dans la liste déroulante Console de débogage, sélectionnez CMD.
  5. Sélectionnez LogFiles.

Il devrait y avoir au moins un fichier dont le nom commence par Uploader_ ou SnapshotUploader_ et qui comporte l’extension .log. Sélectionnez l’icône appropriée pour télécharger tous les fichiers journaux ou les ouvrir dans un navigateur. Le nom de fichier comporte un suffixe unique qui identifie l’instance App Service. Si votre instance App Service est hébergée sur plusieurs machines, il existe des fichiers journaux distincts pour chacune d’elles. Lorsque le chargeur détecte la présence d’un nouveau fichier minidump, celui-ci est enregistré dans le fichier journal. Voici un exemple de capture instantanée et de chargement réussis :

SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
    DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
    DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
    DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
    DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
    DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:59.8530649Z

Notes

L’exemple ci-dessus utilise la version 1.2.0 du package NuGet Microsoft.ApplicationInsights.SnapshotCollector. Dans les versions antérieures, le processus de chargement est appelé MinidumpUploader.exe et le journal est moins détaillé. Dans l’exemple précédent, la clé d’instrumentation est c12a605e73c44346a984e00000000000. Cette valeur doit correspondre à la clé d’instrumentation de votre application. Le fichier minidump est associé à une capture instantanée dont l’ID est 139e411a23934dc0b9ea08a626db16c5. Vous pouvez utiliser cet ID ultérieurement pour Rechercher l’enregistrement d’exception associé dans Application Insights Analytics.

Le chargeur analyse les nouveaux fichiers PDB environ toutes les 15 minutes. Voici un exemple :

SnapshotUploader.exe Information: 0 : PDB rescan requested.
    DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
    DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
    DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
    DateTime=2018-03-09T01:47:19.4614027Z

Pour les applications qui ne sont pas hébergées dans App Service, les fichiers journaux d’activité du chargeur figurent dans le même dossier que les fichiers minidump : %TEMP%\Dumps\<ikey> (où <ikey> est votre clé d’instrumentation).

Dépannage de Cloud Services

Dans Cloud Services, le dossier temporaire par défaut peut être trop petit pour contenir les fichiers minidump, conduisant à des pertes d’instantanés.

L’espace nécessaire varie selon le jeu de travail total de votre application et le nombre d’instantanés simultanés.

Le jeu de travail du rôle web ASP.NET 32 bits contient en général de 200 à 500 Mo. Autorisez au moins deux instantanés simultanés.

Par exemple, si votre application utilise un jeu de travail de 1 Go au total, vous devez vous assurer qu’il y a au moins 2 Go d’espace disque pour stocker les instantanés.

Suivez ces étapes pour configurer votre rôle service cloud avec une ressource locale dédiée pour les instantanés.

  1. Ajoutez une nouvelle ressource locale à votre service cloud en modifiant le fichier de définition (.csdef) du service cloud. L’exemple suivant définit une ressource appelée SnapshotStore avec une taille de 5 Go.

    <LocalResources>
      <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" />
    </LocalResources>
    
  2. Modifiez le code de démarrage de votre rôle pour ajouter une variable d’environnement qui pointe vers la ressource locale SnapshotStore. Dans le cas des rôles de travail, le code doit être ajouté à la méthode OnStart du rôle :

    public override bool OnStart()
    {
        Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath);
        return base.OnStart();
    }
    

    Dans le cas des rôles Web (ASP.NET), le code doit être ajouté à la méthode Application_Start de l’application web :

    using Microsoft.WindowsAzure.ServiceRuntime;
    using System;
    namespace MyWebRoleApp
    {
        public class MyMvcApplication : System.Web.HttpApplication
        {
           protected void Application_Start()
           {
              Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath);
              // TODO: The rest of your application startup code
           }
        }
    }
    
  3. Mettez à jour le fichier ApplicationInsights.config de votre rôle pour remplacer l’emplacement de dossier temporaire utilisé par SnapshotCollector

    <TelemetryProcessors>
     <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
       <!-- Use the SnapshotStore local resource for snapshots -->
       <TempFolder>%SNAPSHOTSTORE%</TempFolder>
       <!-- Other SnapshotCollector configuration options -->
     </Add>
    </TelemetryProcessors>
    

Remplacement du dossier des clichés instantanés

Lorsque le collecteur de captures instantanées démarre, il essaie de rechercher un dossier sur le disque convenant pour l’exécution du processus du chargeur des captures instantanées. Le dossier choisi est appelé dossier des clichés instantanés.

Le collecteur de captures instantanées vérifie quelques emplacements connus, en s’assurant qu’il dispose des autorisations pour copier les fichiers binaires du chargeur des captures instantanées. Les variables d'environnement suivantes sont utilisées :

  • Fabric_Folder_App_Temp
  • LOCALAPPDATA
  • APPDATA
  • TEMP

Si aucun dossier approprié n’est trouvé, Snapshot Collector signale une erreur avec le message « Impossible de trouver un dossier approprié de captures instantanées » .

Si la copie échoue, le collecteur de captures instantanées indique une erreur ShadowCopyFailed.

Si le chargeur ne peut pas être lancé, le collecteur de captures instantanées indique une erreur UploaderCannotStartFromShadowCopy. Le corps du message comprend souvent System.UnauthorizedAccessException. Cette erreur se produit généralement lorsque l’application est exécutée avec un compte disposant d’autorisations réduites. Le compte a l’autorisation d’écrire dans le dossier des clichés instantanés, mais il n’est pas autorisé à exécuter du code.

Étant donné que ces erreurs se produisent généralement lors du démarrage, elles seront généralement suivies d’une erreur ExceptionDuringConnect indiquant « Échec du démarrage du chargeur ».

Pour contourner ces erreurs, vous pouvez spécifier manuellement le dossier des clichés instantanés avec l’option de configuration ShadowCopyFolder. Par exemple, en utilisant ApplicationInsights.config :

<TelemetryProcessors>
 <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
   <!-- Override the default shadow copy folder. -->
   <ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
   <!-- Other SnapshotCollector configuration options -->
 </Add>
</TelemetryProcessors>

Ou bien, si vous utilisez appsettings.json avec une application .NET Core :

{
  "ApplicationInsights": {
    "InstrumentationKey": "<your instrumentation key>"
  },
  "SnapshotCollectorConfiguration": {
    "ShadowCopyFolder": "D:\\SnapshotUploader"
  }
}

Utilisez une recherche Application Insights pour trouver des exceptions avec des captures instantanées

Quand un instantané est créé, l’exception levée est marquée avec un ID d’instantané. Cet ID d’instantané est inclus en tant que propriété personnalisée lorsque l’exception est signalée à Application Insights. La fonction Rechercher dans Application Insights vous permet de trouver tous les enregistrements ayant la propriété personnalisée ai.snapshot.id.

  1. Parcourez votre ressource Application Insights dans le portail Azure.
  2. Sélectionnez Recherche.
  3. Tapez ai.snapshot.id dans la zone de texte Rechercher, puis appuyez sur Entrée.

Capture d’écran montrant la recherche de la télémétrie avec un ID de capture dans le portail.

Si cette recherche ne retourne aucun résultat, cela signifie qu’aucun instantané n’a été signalé à Application Insights dans l’intervalle de temps sélectionné.

Pour rechercher un ID d’instantané spécifique dans les fichiers journaux d’activité du chargeur, tapez cet ID dans la zone de recherche. Si vous ne trouvez aucun enregistrement d’une capture instantanée dont vous savez qu’elle a été chargée, procédez comme suit :

  1. Vérifiez soigneusement que vous examinez la ressource Application Insights appropriée en vérifiant la clé d’instrumentation.

  2. À l’aide de l’horodateur du fichier journal du chargeur, ajustez le filtre Intervalle de temps de la recherche pour couvrir cet intervalle.

Si vous ne voyez toujours pas d’exception avec cet ID d’instantané, cela signifie que l’enregistrement de l’exception n’a pas été signalé à Application Insights. Cette situation peut se produire si votre application s’est arrêtée anormalement après avoir pris la capture instantanée, mais avant d’avoir signalé l’enregistrement de l’exception. Dans ce cas, vérifiez les journaux d’activité d’App Service sous Diagnose and solve problems pour voir si des redémarrages intempestifs ou des exceptions non prises en charge se sont produits.

Modifier les règles de pare-feu ou de proxy réseau

Si votre application se connecte à Internet via un proxy ou un pare-feu, il se peut que vous deviez mettre à jour les règles pour communiquer avec le service Débogueur de capture instantanée.

Les adresses IP utilisées par Débogueur de capture instantanée Application Insights sont incluses dans l’étiquette de service Azure Monitor. Pour plus d’informations, consultez Documentation relative aux étiquettes de service.

Y a-t-il des coûts de facturation liés à l’utilisation des instantanés ?

Il n’y a pas de frais pour votre abonnement spécifique au débogueur de capture instantanée. Les fichiers de capture instantanée collectés sont stockés séparément des données de télémétrie collectées par les kits de développement logiciel (SDK) Application Insights et aucuns frais n’est facturé pour l’ingestion ou le stockage de capture instantanée.