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
Scénarios où Snapshot Collector n’est pas pris en charge :
Scénario | Effets secondaires | Recommandation |
---|---|---|
Lorsque vous utilisez le kit de développement logiciel (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) est 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 le portail Microsoft Azure. |
Vérifier que vous utilisez le bon point de terminaison du Débogueur de capture instantanée
Seules les régions Azure Government et Microsoft Azure géré par 21Vianet nécessitent actuellement des modifications de leurs points de terminaison.
Pour App Service et les applications qui utilisent le kit de développement logiciel (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 :
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 :
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.
L’interface interactive, de type conversation, recherche des problèmes courants et vous guide 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. Vérifiez que la version de targetFramework
pour httpRuntime
est définie sur 4.6 ou une version supérieure.
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
Remarque
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 supé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 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 est engagée la prochaine fois que la méthode s’exécute. Selon la taille de la méthode, cela peut être compris 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 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 petite surcharge du processeur.
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 est le même que le site de gestion Kudu pour App Service. Cette page d’état indique l’état d’installation des agents Profiler .NET et Snapshot Collector. En cas d’erreur inattendue, elle 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 :
- Ouvrez votre application App Service dans le portail Azure.
- Sélectionnez Outils avancés ou recherchez Kudu.
- Sélectionnez Go.
- Une fois que vous êtes sur le site de gestion Kudu, dans l’URL, ajoutez l’élément
/DiagnosticServices
, puis appuyez sur Entrée. Elle se termine 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.
- Ouvrez votre application App Service dans le portail Azure.
- Sélectionnez Outils avancés ou recherchez Kudu.
- Sélectionnez Go.
- Dans la liste déroulante Console de débogage, sélectionnez CMD.
- 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
Remarque
L’exemple précédent provient de 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.
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>
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éthodeOnStart
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 } } }
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 sont 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
.
- Parcourez votre ressource Application Insights dans le portail Azure.
- Sélectionnez Recherche.
- Tapez
ai.snapshot.id
dans la zone de texte Rechercher, puis appuyez sur Entrée.
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 :
Vérifiez soigneusement que vous examinez la ressource Application Insights appropriée en vérifiant la clé d’instrumentation.
À 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.