Exercice : ajouter la journalisation et surveiller une fonction Azure dans le portail

Effectué

Dans l’unité précédente, vous avez découvert quelques-uns des avantages de l’incorporation d’Application Insights dans votre application de fonction. Vous avez également découvert certaines des autres fonctionnalités de journalisation disponibles pour votre équipe de développeurs.

À ce niveau de votre recherche de projet, vous avez déployé votre application de fonction sur Azure en utilisant Maven et vous avez testé votre application de fonction en production. La tâche suivante consiste à ajouter les fonctionnalités de suivi et de journalisation à votre application.

Dans cet exercice, vous mettez à jour vos fichiers config de projet de fonction pour prendre en charge la diffusion en continu de journaux et Application Insights. Vous apprenez également à ajouter un suivi personnalisé et des déclencheurs d’événements Application Insight à votre code de projet.

Effectuer le streaming des journaux en temps réel

Maintenant que votre application de fonction est déployée et exécutée sur Azure, vous pouvez la résoudre en utilisant la commande Azure CLI simple pour obtenir la diffusion en continu de journaux en temps réel à partir de l’application.

  1. Dans le Portail Azure, dans la page Vue d’ensemble de votre fonction HttpExample. Utilisez l’icône Copier dans le Presse-papiers pour copier la valeur de votre Groupe de ressources et de votre Application de fonction.

  2. Dans la fenêtre Azure Cloud Shell, entrez la commande az webapp log tail -n <functionAppName> -g <resourceGroup> pour diffuser en continu des journaux. Remplacez <functionAppName> et <resourceGroup> par les valeurs enregistrées à l’étape précédente. Par exemple :

    az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
    
    
  3. Un résultat similaire au message suivant doit s’afficher.

    2024-01-25T20:44:58  Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds). 
    2024-01-25T20:45:58  No new trace in the past 1 min(s).
    
  4. Ouvrez un nouvel onglet dans votre navigateur web et collez l’URL entièrement construite à partir de l’exercice précédent pour accéder à votre application de fonction afin de générer certains journaux.

  5. Lorsque vous avez terminé le test, appuyez sur Ctrl+C dans votre Cloud Shell pour fermer le flux de journal.

Ajout de l’instrumentation à votre projet Java pour Application Insights

Maintenant que la fonctionnalité Application Insights est activée pour votre application, votre tâche suivante consiste à l’activer dans votre application. Si vous souhaitez activer la journalisation de l’application et Application Insights, vous devez modifier les fichiers de configuration pour inclure les bibliothèques et autres dépendances requises.

Il existe deux fichiers config que vous devez mettre à jour : pom.xml et host.json.

Modification de votre fichier pom.xml

  1. À l’aide de Cloud Shell, remplacez le répertoire par le dossier racine de votre projet :

    cd ~/event-reporting
    
  2. Ouvrez votre fichier pom.xml avec l’éditeur de code de Cloud Shell :

    code pom.xml
    
  3. Ajoutez les éléments suivants à la section <dependencies> autonome afin d’activer Application Insights pour votre application :

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-web-auto</artifactId>
        <version>2.6.0</version>
    </dependency>
    

    Remarque

    Veillez à ajouter <dependency> pour Application Insights à la collection <dependencies> autonome, et non à la collection <dependencies> contenue dans l’élément <dependencyManagement>.

  4. Appuyez sur Ctrl + S pour enregistrer votre fichier pom.xml, puis sur Ctrl + Q pour fermer l’éditeur de code.

Modification de votre fichier host.json

  1. Ouvrez votre fichier host.json avec l’éditeur de code de Cloud Shell :

    code host.json
    
  2. Supprimez le code JSON existant et remplacez-le par les paramètres suivants :

    {
        "version": "2.0",
        "extensionBundle": {
            "id": "Microsoft.Azure.Functions.ExtensionBundle",
            "version": "[1.*, 2.0.0)"
        },
        "logging": {
            "fileLoggingMode": "always",
            "logLevel": {
                "default": "Information"
            }
        },
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "maxTelemetryItemsPerSecond" : 5
            }
        }
    }
    

    Les paramètres de extensionBundle ont déjà été définis, mais logging et applicationInsights définissent des paramètres différents pour ces fonctionnalités.

  3. Appuyez sur Ctrl + S pour enregistrer votre fichier host.json, puis sur Ctrl + Q pour fermer l’éditeur de code.

Ajout de la journalisation et du suivi Application Insights à votre code de projet

Pour améliorer l’utilité des données collectées par Application Insights qui s’affichent dans vos fichiers journaux, vous devez ajouter quelques commandes de journalisation des données au code de votre application.

Ajout de la journalisation à votre fichier Function.java

Pour ajouter la journalisation générale à votre fonction, vous pouvez, comme dans l’exemple suivant, ajouter du code à des points clés de votre code d’application, où vous remplacez la chaîne [LOG MESSAGE] par un message que vous souhaitez voir dans les fichiers journaux de votre application.

context.getLogger().info("[LOG MESSAGE]");

Pour ajouter la journalisation à votre application, procédez comme suit.

  1. Ouvrez le fichier Function.java à l’éditeur Cloud Shell :

    code ~/event-reporting/src/main/java/com/contoso/functions/Function.java
    

    Si vous examinez le code existant, vous remarquerez qu’il existe une commande context.getLogger(). Il s’agit de la première instruction après la définition de la fonction run().

  2. Recherchez la section de code suivante, qui teste une chaîne de requête GET vide ou une requête POST vide :

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
    
  3. Modifiez cette section de code pour qu’elle contienne deux commandes context.getLogger() qui sortent l’état de votre fonction dans le système de journalisation :

    if (name == null) {
        context.getLogger().info("Execution failure - Incorrect or missing parameter used.");
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        context.getLogger().info("Execution success - name parameter = " + name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
    
  4. Appuyez sur Ctrl + S pour enregistrer votre fichier Function.java, mais ne fermez pas l’éditeur. Vous allez continuer à ajouter du code à votre application dans la section suivante de cet exercice.

Ajout du suivi Application Insights à votre fichier Function.java

  1. Ajoutez l’instruction import suivante à l’ensemble d’importations existant. Cette instruction importe la bibliothèque de télémétrie Application Insights :

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Ajoutez la définition suivante à la classe Function() de votre application. Cette instruction instancie un objet TelemetryClient :

    private TelemetryClient telemetry = new TelemetryClient();
    
  3. Copiez chacune des instructions context.getLogger() et modifiez le code afin que chacune des entrées dupliquées appelle telemetry.trackEvent() au lieu de context.getLogger() :

    . . .
    context.getLogger().info("Java HTTP trigger processed a request.");
    telemetry.trackEvent("Java HTTP trigger processed a request.");
    
    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);
    
    if (name == null) {
        context.getLogger().info("Execution failure - Incorrect or missing parameter used.");
        telemetry.trackEvent("Execution failure - Incorrect or missing parameter used.");
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        context.getLogger().info("Execution success - name parameter = " + name);
        telemetry.trackEvent("Execution success - name parameter = " + name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hi, " + name).build();
    }
    . . .
    
  4. Appuyez sur Ctrl + S pour enregistrer votre fichier Function.java, puis sur Ctrl + Q pour fermer l’éditeur de code.

  5. La dernière chose à faire est de créer, d’empaqueter et de redéployer votre application de fonction.

    cd ~/event-reporting
    mvn clean package azure-functions:deploy
    

La journalisation et la collecte de données Application Insights sont maintenant ajoutées à votre fonction.

Utilisation d’Application Insights pour surveiller votre fonction Azure

Votre application est maintenant mise à jour pour prendre en charge la journalisation précise avec l’enregistreur d’événements et Application Insights.

  1. Pour générer un exemple de trafic HTTP, copiez l’URL utilisée pour tester votre application dans un navigateur web lors de l’exercice précédent. Utilisez cette URL avec cURL pour créer une boucle dans Azure Cloud Shell, par exemple :

    while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
    
  2. Connectez-vous au portail Azure avec le même compte que celui avec lequel vous avez activé le bac à sable.

  3. Sélectionnez Toutes les ressources dans le menu à gauche.

  4. Sélectionnez votre fonction dans la liste des ressources. Pour cet exercice, le nom de votre fonction commence par event-reporting. Par exemple : event-reporting-20200102030405006.

  5. Affichez votre activité de streaming des journaux :

    1. Sélectionnez Flux de journal dans le menu Application de fonction.

    2. Ouvrez la liste déroulante Journaux App Insights, puis sélectionnez Journaux Filesystem.

      Image showing where to find Log Streaming.

    3. Notez que votre exemple de trafic génère une série d’entrées de journal.

      Image showing Log Streaming.

  6. Affichez votre activité de Métriques en temps réel :

    1. Sélectionnez la liste déroulante Journaux Filesystem, puis sélectionnez Journaux App Insights.

    2. Sélectionnez Ouvrir dans Métriques temps réel. Vous pouvez maintenant voir que votre exemple de trafic génère des résultats Application Insights et Métriques temps réel.

      Image showing Application Insights and Live Metrics highlights.

Bravo. Vous avez réussi à configurer votre fonction Azure pour la journalisation détaillée.

Avant de continuer, revenez à Cloud Shell et appuyez sur Ctrl + C pour fermer la boucle de commande.