Suivi des dépendances dans Application Insights

Une dépendance est un composant externe appelé par votre application. Il s’agit habituellement d’un service appelé à l’aide de HTTP, d’une base de données ou d’un système de fichiers. Application Insights : mesure la durée des appels de dépendances, indique si les appels ont réussi ou échoué et fournit des informations comme le nom des dépendances. Vous pouvez examiner des appels de dépendances spécifiques et les mettre en corrélation avec les requêtes et les exceptions.

Dépendances suivies automatiquement

Les kits de développement logiciel (SDK) Application Insights pour .NET et .NET Core sont fournis avec DependencyTrackingTelemetryModule, qui est un module de télémétrie qui collecte automatiquement les dépendances. Cette collection de dépendances est activée automatiquement pour les applications ASP.NET et ASP.NET Core lorsqu’elle est configurée en fonction des documents officiels liés. Le module DependencyTrackingTelemetryModule est fourni en tant que package NuGet Microsoft.ApplicationInsights.DependencyCollector. Il est fourni automatiquement lorsque vous utilisez le package NuGet Microsoft.ApplicationInsights.Web ou le package NuGet Microsoft.ApplicationInsights.AspNetCore.

Actuellement, DependencyTrackingTelemetryModule suit automatiquement les dépendances suivantes :

Les dépendances Détails
HTTP/HTTPS Appels HTTP/HTTPS locaux ou distants.
Appels WCF Suivi automatique uniquement si les liaisons HTTP sont utilisées.
SQL Appels effectués avec SqlClient. Consultez la section Suivi SQL avancé pour obtenir la requête SQL complète pour capturer des requêtes SQL.
Stockage Blob Azure, Stockage Table ou Stockage File d'attente Appels effectués avec le client Stockage Azure.
Kit de développement logiciel (SDK) Azure Event Hubs Utilisez le package le plus récent : https://nuget.org/packages/Azure.Messaging.EventHubs.
Kit de développement logiciel (SDK) client Azure Service Bus Utilisez le package le plus récent : https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Suivi automatique uniquement si HTTP/HTTPS est utilisé. Le mode TCP ne sera pas capturé par Application Insights.

S’il vous manque une dépendance ou si vous utilisez un autre kit SDK, vérifiez qu’elle figure dans la liste des dépendances collectées automatiquement. Si la dépendance n’est pas collectée automatiquement, vous pouvez la suivre manuellement avec un appel de suivi des dépendances.

Configurer le suivi automatique des dépendances dans les applications console

Pour suivre automatiquement les dépendances des applications de console .NET, installez le package NuGet Microsoft.ApplicationInsights.DependencyCollector et initialisez DependencyTrackingTelemetryModule :

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

Pour les applications de console .NET Core, TelemetryConfiguration.Active est obsolète. Consultez les instructions de la documentation du service worker et la documentation de supervision ASP.NET Core.

Comment fonctionne le suivi automatique des dépendances ?

Les dépendances sont automatiquement collectées avec l’une des techniques suivantes :

  • Utilisation de l’instrumentation de code d’octet autour des méthodes sélectionnées. Utilisez InstrumentationEngine à partir de StatusMonitor ou une extension Azure App Service Web Apps.
  • Rappels EventSource.
  • Rappels DiagnosticSource dans les derniers kits SDK .NET ou .NET Core.

Suivi manuel des dépendances

Les exemples de dépendances suivants ne sont pas collectés automatiquement et nécessitent un suivi manuel :

  • La surveillance d’Azure Cosmos DB est effectuée automatiquement uniquement si le protocole HTTP/HTTPS est utilisé. Le mode TCP ne sera pas capturé par Application Insights.
  • Redis

L’API TrackDependency, qui est utilisée par les modules de collecte automatique standard, vous permet de suivre manuellement les dépendances que le SDK ne collecte pas automatiquement.

Exemple

Si vous générez votre code avec un assembly que vous n’avez pas écrit vous-même, vous pouvez minuter tous les appels vers celui-ci. Ce scénario vous permet de déterminer la contribution qu’elle apporte à vos temps de réponse.

Pour afficher ces données dans les graphiques de dépendance d’Application Insights, envoyez-les en utilisant TrackDependency :


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

Vous pouvez aussi utiliser les méthodes d’extension StartOperation et StopOperation fournies par TelemetryClient pour suivre les dépendances manuellement, comme cela est expliqué dans Suivi des dépendances sortantes.

Si vous souhaitez désactiver le module de suivi des dépendances standard, supprimez la référence à DependencyTrackingTelemetryModule dans ApplicationInsights.config pour les applications ASP.NET. Pour les applications ASP.NET Core, suivez les instructions de la section Application Insights pour applications ASP.NET Core.

Suivre les appels AJAX à partir de pages web

Pour les pages web, le kit SDK JavaScript Application Insights collecte automatiquement les appels AJAX en tant que dépendances.

Suivi SQL avancé pour obtenir la requête SQL complète

Notes

Azure Functions exige des paramètres distincts pour activer la collecte de texte SQL. Pour plus d’informations, consultez Activer la collecte de requêtes SQL.

Pour les appels SQL, le nom du serveur et de la base de données est toujours collecté et stocké comme le nom du DependencyTelemetry collecté. Un autre champ, appelé data, peut contenir le texte de la requête SQL complète.

Pour les applications ASP.NET Core, il est maintenant nécessaire d’accepter la collecte de texte SQL avec :

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

Pour les applications ASP.NET, la requête SQL complète est collectée à l’aide de l’instrumentation de code byte, qui requiert le moteur d’instrumentation, ou à l’aide du package NuGet Microsoft.Data.SqlClient au lieu de la bibliothèque System.Data.SqlClient. Les étapes spécifiques à la plateforme pour activer la collecte complète de requêtes SQL sont décrites dans le tableau suivant.

Plateforme Étapes nécessaires pour obtenir la requête SQL complète
Applications web dans Azure App Service Dans le Panneau de configuration de l’application web, ouvrez le volet Application Insights et activez les commandes SQL dans .NET.
Serveur IIS (machines virtuelles Azure, locales, et ainsi de suite) Utilisez le package NuGet Microsoft.Data.SqlClient ou le module PowerShell Agent Application Insights pour installer le moteur d’instrumentation et redémarrer IIS.
Services cloud Azure Ajoutez une tâche de démarrage pour installer StatusMonitor.
Votre application doit être intégrée au SDK ApplicationInsights au moment de la build en installant les packages NuGet pour les applications ASP.NET ou ASP.NET Core.
IIS Express Utiliser le package NuGet Microsoft.Data.SqlClient.
WebJobs dans Azure App Service Utiliser le package NuGet Microsoft.Data.SqlClient.

En plus des étapes spécifiques à la plateforme ci-dessus, vous devez également choisir explicitement d’activer la collecte de commandes SQL en modifiant le fichier applicationInsights.config avec le code suivant :

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

Dans les cas ci-dessus, la bonne pratique pour vérifier que ce moteur d’instrumentation est correctement installé est de vous assurer que la version du SDK du DependencyTelemetry collecté est rddp. L’utilisation de rdddsd ou de rddf indique que les dépendances sont collectées via des rappels DiagnosticSource ou EventSource. Par conséquent, la requête SQL complète ne sera pas capturée.

Où trouver des données sur les dépendances

  • Mise en correspondance d’applications visualise les dépendances entre votre application et les composants voisins.
  • Diagnostics de transaction montre les données serveur mises en corrélation avec les composants unifiés.
  • Navigateurs montre les appels AJAX provenant des navigateurs des utilisateurs.
  • Sélectionnez des demandes lentes ou ayant échoué pour vérifier leurs appels de dépendance.
  • Vous pouvez utiliser Analytics pour interroger des données de dépendances.

Diagnostiquer les demandes lentes

Chaque événement de demande est associé aux appels de dépendance, aux exceptions et aux autres événements suivis pendant le traitement de la demande. Ainsi, si certaines demandes échouent, vous pouvez savoir si cela est dû à la lenteur des réponses d’une dépendance.

Traçage des demandes aux dépendances

Sélectionnez l’onglet Performances à gauche puis l’onglet Dépendances en haut.

Sélectionnez un Nom de dépendance sous Général. Après avoir sélectionné une dépendance, vous voyez s’afficher à droite un graphique de la distribution des durées de cette dépendance.

Capture d’écran montrant l’onglet Dépendances ouvert pour sélectionner un nom de dépendance dans le graphique.

Sélectionnez le bouton Exemples en bas à droite. Sélectionnez ensuite un exemple pour afficher les détails de la transaction de bout en bout.

Capture d’écran montrant la sélection d’un exemple pour afficher les détails de la transaction de bout en bout.

Profiler votre site en ligne

Le profileur d’Application Insights effectue le suivi des appels HTTP vers votre site en production et vous montre les fonctions dans votre code qui ont pris le plus de temps.

Demandes ayant échoué

Les échecs de demandes peuvent également être associés à des échecs d’appels de dépendances.

Sélectionnez l’onglet Échecs sur la gauche, puis l’onglet Dépendances en haut.

Capture d’écran montrant la sélection du graphique des requêtes ayant échoué.

Vous pourrez voir ici le nombre de demandes ayant échoué. Pour plus d’informations sur une occurrence ayant échoué, sélectionnez un nom de dépendance dans le tableau du bas. Sélectionnez le bouton Dépendances en bas à droite pour afficher les détails de la transaction de bout en bout.

Logs (Analytics)

Vous pouvez suivre les dépendances dans le langage de requête Kusto. Voici quelques exemples.

  • Rechercher les appels de dépendances ayant échoué :

    
        dependencies | where success != "True" | take 10
    
  • Rechercher les appels AJAX :

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Rechercher les appels de dépendances associés aux demandes :

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Rechercher les appels AJAX associés à des pages consultées :

    
        dependencies
        | where timestamp > ago(1d) and  client_Type == "Browser"
        | join (browserTimings | where timestamp > ago(1d))
          on operation_Id
    

Forum aux questions

Cette section fournit des réponses aux questions fréquentes.

Comment le collecteur automatique de dépendances signale-t-il les échecs d’appels des dépendances ?

Pour les appels de dépendances ayant échoué, le champ success est défini sur False. Le module DependencyTrackingTelemetryModule ne signale pas ExceptionTelemetry. Le modèle de données complet pour la dépendance est décrit dans Télémétrie des dépendances : modèle de données Application Insights.

Comment calculer la latence d’ingestion pour ma télémétrie des dépendances ?

Utilisez ce code :

dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp 
| extend TimeIngested = ingestion_time()

Comment déterminer l’heure à laquelle l’appel de dépendance a été initié ?

Dans l’affichage des requêtes Log Analytics timestamp représente le moment où l’appel TrackDependency() a été lancé, ce qui se produit immédiatement après la réception de la réponse à l’appel de dépendance. Pour calculer l’heure de début de l’appel de dépendance, vous devez prendre timestamp et soustraire la duration enregistrée de l’appel de dépendance.

Kit de développement logiciel (SDK) open source

Comme chaque SDK Application Insights, le module de collecte des dépendances est également open source. Lisez et contribuez au code, ou signalez les problèmes rencontrés dans le dépôt GitHub officiel.

Collecte automatique de dépendance

Voici la liste des appels de dépendance actuellement pris en charge qui sont automatiquement détectés comme des dépendances sans devoir apporter des modifications supplémentaires au code de votre application. Ces dépendances sont visualisées dans les vues Cartographie d’application et Diagnostics des transactions d’Application Insights. Si votre dépendance ne figure pas dans la liste ci-dessous, vous pouvez toujours la suivre manuellement avec un appel de suivi des dépendances.

.NET

Infrastructures d’application Versions
Formulaires web ASP.NET 4.5+
ASP.NET MVC 4+
Web API ASP.NET 4.5+
ASP.NET Core 1.1+
Bibliothèques de communication
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 - dernière version stable. (Voir la remarque ci-dessous.)
Kit de développement logiciel (SDK) du client Event Hubs 1.1.0
Kit de développement logiciel (SDK) client ServiceBus 3.0.0
Clients de stockage
ADO.NET 4.5+

Notes

Il existe un problème connu avec les versions antérieures de Microsoft.Data.SqlClient. Nous vous recommandons d’utiliser la version 1.1.0 ou ultérieure pour atténuer ce problème. Entity Framework Core n’est pas nécessairement fourni avec la dernière version stable de Microsoft.Data.SqlClient. Nous vous recommandons donc de confirmer que vous disposez d’au moins la version 1.1.0 pour éviter ce problème.

Java

Consultez la liste des dépendances collectées automatiquement d’Application Insights Java.

Node.js

Une liste des modules les plus récents pris en charge est disponible ici.

JavaScript

Bibliothèques de communication Versions
XMLHttpRequest Tous

Étapes suivantes