Partager via


Tutoriel : Superviser et diagnostiquer une application Service Fabric en utilisant Application Insights

Ce tutoriel est la cinquième partie d’une série. Il montre les étapes nécessaires à la configuration de la supervision et des diagnostics pour une application ASP.NET Core s’exécutant sur un cluster Azure Service Fabric en utilisant Application Insights. Vous collectez des données de télémétrie auprès de l’application développée dans la partie 1 de la série de tutoriels.

Dans ce tutoriel, vous allez apprendre à :

  • Configurer une ressource Application Insights
  • Ajouter Application Insights aux services de l’application
  • Visualiser des données de télémétrie et une cartographie d’application dans Application Insights
  • Ajouter une instrumentation personnalisée à votre application

La série de tutoriels vous montre comment :

Prérequis

Avant de commencer ce tutoriel :

Télécharger l’exemple d’application de vote

Si vous n’avez pas créé l’exemple d’application de vote lors de la partie 1 de cette série de tutoriels, vous pouvez le télécharger. Dans une fenêtre de commande ou un terminal, exécutez la commande suivante pour cloner le référentiel de l’exemple d’application sur votre ordinateur local :

git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart

Configurer une ressource Application Insights

Application Insights est la plateforme de gestion des performances des applications Azure. Nous vous recommandons d’utiliser Application Insights pour la supervision et les diagnostics des applications dans Service Fabric.

Pour créer une ressource Application Insights, accédez au portail Azure. Sélectionnez Créer une ressource. Dans le menu du portail, sélectionnez Supervision et diagnostics. Dans la colonne Services Azure populaires, sous Application Insights, sélectionnez Créer.

Capture d’écran montrant comment créer une ressource Application Insights.

Entrez ou sélectionnez des valeurs pour Abonnement, Groupe de ressources et Nom. Pour Région, choisissez où votre cluster Service Fabric sera déployé. Dans ce tutoriel, nous déployons l’application sur un cluster local, de sorte que la région Azure n’a pas d’importance. Pour Type d’application, sélectionnez Application web ASP.NET.

Capture d’écran montrant les attributs de la ressource Application Insights.

Quand vous avez entré ou sélectionné les informations requises, sélectionnez Créer pour approvisionner la ressource. La ressource est déployée en une minute environ.

Ajouter Application Insights aux services de l’application

Ouvrez Visual Studio 2019 en utilisant l’option Exécuter en tant qu’administrateur (cliquez avec le bouton droit sur l’icône Visual Studio dans le menu Démarrer). Sélectionnez Fichier>Ouvrir>Projet/Solution et accédez à l’application de vote (créée dans la partie 1 du tutoriel ou clonée depuis GitHub). Ouvrez Voting.sln. Si vous êtes invité à restaurer les packages NuGet de l’application, sélectionnez Oui.

Pour configurer Application Insights pour les services VotingWeb et VotingData :

  1. Cliquez avec le bouton droit sur le nom du service, puis sélectionnez Ajouter>Services connectés>Supervision avec Application Insights.

    Capture d’écran montrant la configuration des services Application Insights.

    Remarque

    Selon le type de projet, quand vous cliquez avec le bouton droit sur le nom du service, il peut être nécessaire de sélectionner Ajouter, puis de sélectionner Application Insights Telemetry.

  2. Sélectionnez Prise en main.

  3. Connectez-vous au compte que vous utilisez pour votre abonnement Azure et sélectionnez l’abonnement où vous avez créé la ressource Application Insights. Pour trouver la ressource, dans Ressource, accédez à Ressource Application Insights existante. Sélectionnez Inscrire pour ajouter Application Insights à votre service.

    Capture d’écran montrant comment inscrire Application Insights.

  4. Sélectionnez Terminer.

Remarque

Veillez à effectuer ces étapes pour les deux services de l’application pour terminer la configuration d’Application Insights pour l’application. La même ressource Application Insights est utilisée pour les deux services afin d’afficher les demandes entrantes et sortantes et la communication entre les services.

Ajouter le package NuGet Microsoft.ApplicationInsights.ServiceFabric.Native aux services

Application Insights a deux packages NuGet spécifiques à Service Fabric, que vous pouvez utiliser en fonction du scénario. L’un est utilisé avec des services natifs de Service Fabric, et l’autre avec des conteneurs et des exécutables invités. Dans ce cas, nous utilisons le package NuGet Microsoft.ApplicationInsights.ServiceFabric.Native pour en savoir plus sur le contexte du service. Pour en savoir plus sur le Kit de développement logiciel (SDK) Application Insights et les packages NuGet spécifiques à Service Fabric, consultez Microsoft Application Insights pour Service Fabric.

Pour configurer le package NuGet :

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur Solution « Voting », puis sélectionnez Gérer les packages NuGet pour la solution.

  2. Dans la boîte de dialogue NuGet – Solution, sélectionnez Parcourir. Cochez la case Inclure la préversion.

    Remarque

    Il peut être nécessaire d’installer le package Microsoft.ServiceFabric.Diagnostics.Internal de la même façon s’il n’était pas installé avant l’installation du package Application Insights.

  3. Recherchez Microsoft.ApplicationInsights.ServiceFabric.Native, puis sélectionnez le package NuGet.

  4. Dans le volet droit, cochez la case VotingWeb et la case VotingData. Sélectionnez Installer.

    Capture d’écran montrant le Kit de développement logiciel (SDK) Application Insights dans NuGet.

  5. Dans la boîte de dialogue Aperçu des modifications, sélectionnez OK pour accepter la licence. Les packages NuGet sont ajoutés aux services.

  6. Ensuite, configurez l’initialiseur de télémétrie dans les deux services. Ouvrez VotingWeb.cs et VotingData.cs. Effectuez les étapes suivantes dans les deux fichiers de code :

    1. Ajoutez ces deux instructions using en haut de chaque fichier, après les instructions using existantes :

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. Dans les deux fichiers, dans l’instruction return imbriquée de CreateServiceInstanceListeners() ou de CreateServiceReplicaListeners(), sous ConfigureServices>services, avec les autres services singletons déclarés, ajoutez :

      .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
      

      Ce code ajoute Service Context à votre télémétrie, pour vous permettre de mieux en comprendre la source dans Application Insights. Votre instruction return imbriquée dans VotingWeb.cs est maintenant similaire à cet exemple :

      return new WebHostBuilder()
          .UseKestrel()
          .ConfigureServices(
              services => services
                  .AddSingleton<HttpClient>(new HttpClient())
                  .AddSingleton<FabricClient>(new FabricClient())
                  .AddSingleton<StatelessServiceContext>(serviceContext)
                  .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
          .UseContentRoot(Directory.GetCurrentDirectory())
          .UseStartup<Startup>()
          .UseApplicationInsights()
          .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
          .UseUrls(url)
          .Build();
      

Dans VotingData.cs, votre code est maintenant similaire à cet exemple :

return new WebHostBuilder()
    .UseKestrel()
    .ConfigureServices(
        services => services
            .AddSingleton<StatefulServiceContext>(serviceContext)
            .AddSingleton<IReliableStateManager>(this.StateManager)
            .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseStartup<Startup>()
    .UseApplicationInsights()
    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
    .UseUrls(url)
    .Build();

Vérifiez bien que la méthode UseApplicationInsights() est appelée à la fois dans VotingWeb.cs et dans VotingData.cs, comme montré dans les exemples.

Remarque

Cet exemple d’application utilise HTTP pour la communication des services. Si vous développez une application en utilisant Service Remoting V2 de Service Fabric, ajoutez aussi les lignes suivantes au même emplacement dans le code :

ConfigureServices(services => services
    ...
    .AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
    .AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)

À ce stade, vous êtes prêt à déployer l’application. Sélectionnez Démarrer (ou sélectionnez F5). Visual Studio génère et empaquette l’application, configure votre cluster local et déploie l’application sur le cluster.

Remarque

Vous pouvez recevoir une erreur de build si la version installée du kit SDK .NET Core n’est pas à jour.

Quand l’application est déployée, accédez à localhost:8080, où l’application monopage Voting Sample s’exécute. Votez pour quelques éléments de votre choix pour créer des exemples de données et de télémétrie. Par exemple, des desserts !

Capture d’écran montrant un exemple de vote pour des types de dessert.

Vous pouvez également supprimer certaines des options de vote quand vous avez fini d’ajouter quelques votes.

Visualiser des données de télémétrie et une cartographie d’application dans Application Insights

Dans le portail Azure, accédez à la ressource Application Insights.

Sélectionnez Vue d’ensemble pour revenir au volet de vue d’ensemble votre ressource. Sélectionnez Rechercher pour voir entrer les traces. L’affichage des traces dans Application Insights prend quelques minutes. Si vous ne voyez aucune trace, attendez une minute, puis sélectionnez le bouton Actualiser.

Faites défiler vers le bas dans la fenêtre de recherche pour voir toutes les données de télémétrie entrantes fournies par Application Insights. Pour chaque action que vous avez effectuée dans l’application de vote, il doit exister une requête PUT sortante provenant de VotingWeb (PUT Votes/Put [nom]) et une requête PUT entrante provenant de VotingData (PUT VoteData/Put [nom]), suivies d’une paire de requêtes GET pour l’actualisation des données qui sont affichées. Il doit également y avoir une trace de dépendance pour HTTP sur localhost, car ces requêtes sont des requêtes HTTP. Voici un exemple de ce que vous voyez sur la façon dont un vote est ajouté :

Capture d’écran montrant un exemple de trace de requête dans Application Insights.

Vous pouvez sélectionner une trace pour voir plus de détails sur celle-ci. Application Insights fournit des informations utiles sur la requête, notamment des valeurs pour Temps de réponse et URL de la requête. Comme vous avez ajouté le package NuGet spécifique à Service Fabric, vous obtenez également des données sur votre application pour le contexte d’un cluster Service Fabric dans la section Données personnalisées. Les données incluent le contexte du service, ce qui vous permet de voir les valeurs PartitionID et ReplicaId de la source de la requête, et de mieux isoler les problèmes lors du diagnostic des erreurs dans votre application.

Pour accéder à la cartographie d’application, sélectionnez Cartographie d’application dans le menu de la ressource du volet Vue d’ensemble, ou sélectionnez l’icône Cartographie d’application. La carte montre vos deux services connectés.

Capture d’écran mettant en évidence Cartographie d’application dans le menu de la ressource.

Cartographie d’application peut vous aider comprendre la topologie de votre application, en particulier quand vous commencez à ajouter des services qui travaillent ensemble. Elle vous fournit également des données de base sur les taux de réussite des requêtes et peut vous aider à diagnostiquer les requêtes en échec pour comprendre où se situe le problème. Pour plus d’informations, consultez Cartographie d’application dans Application Insights.

Ajouter une instrumentation personnalisée à votre application

Application Insights fournit une télémétrie prête à l’emploi, mais vous pouvez ajouter une instrumentation personnalisée. Vous pouvez par exemple avoir des besoins métier nécessitant une instrumentation personnalisée ou vous voulez améliorer les diagnostics quand quelque chose se passe mal dans votre application. Vous pouvez ingérer des événements et des métriques personnalisés en utilisant l’API Application Insights.

Ensuite, ajoutez des événements personnalisés à VoteDataController.cs (dans VotingData>Controllers) pour faire un suivi quand des votes sont ajoutés et supprimés du votesDictionary sous-jacent :

  1. Ajoutez using Microsoft.ApplicationInsights; à la fin des autres instructions using.

  2. Déclarez une nouvelle valeur pour TelemetryClient au début de la classe, sous la création de IReliableStateManager : private TelemetryClient telemetry = new TelemetryClient();.

  3. Dans la fonction Put(), ajoutez un événement qui confirme qu’un vote a été ajouté. Ajoutez telemetry.TrackEvent($"Added a vote for {name}"); après la fin de la transaction, juste avant l’instruction qui retourne OkResult.

  4. Dans Delete(), il y a un bloc « if/else » basé sur la condition selon laquelle votesDictionary contient ou non des votes pour une option de vote spécifique.

    1. Ajoutez un événement qui confirme la suppression d’un vote dans l’instruction if, après await tx.CommitAsync() : telemetry.TrackEvent($"Deleted votes for {name}");
    2. Ajoutez un événement pour montrer que la suppression n’a pas eu lieu dans l’instruction else, avant l’instruction return : telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Voici un exemple de ce à quoi vos fonctions Put() et Delete() peuvent ressembler une fois que vous avez ajouté les événements :

// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
        await tx.CommitAsync();
    }

    telemetry.TrackEvent($"Added a vote for {name}");
    return new OkResult();
}

// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        if (await votesDictionary.ContainsKeyAsync(tx, name))
        {
            await votesDictionary.TryRemoveAsync(tx, name);
            await tx.CommitAsync();
            telemetry.TrackEvent($"Deleted votes for {name}");
            return new OkResult();
        }
        else
        {
            telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
            return new NotFoundResult();
        }
    }
}

Quand vous avez terminé ces modifications, sélectionnez Démarrer dans l’application pour qu’elle génère et déploie la version la plus récente. Une fois l’application déployée, accédez à localhost:8080. Ajoutez et supprimez quelques options de vote. Revenez ensuite à votre ressource Application Insights pour voir les traces correspondant à la dernière exécution (l’apparition des traces dans Application Insights peut prendre de 1 à 2 minutes). Pour tous les votes que vous avez ajoutés et supprimés, vous devez maintenant voir une entrée pour Événement personnalisé avec la télémétrie de la réponse associée.

Capture d’écran montrant des événements personnalisés.