Exercice : ajouter la journalisation et surveiller une fonction Azure dans le portail
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.
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.
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
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).
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.
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
À l’aide de Cloud Shell, remplacez le répertoire par le dossier racine de votre projet :
cd ~/event-reporting
Ouvrez votre fichier pom.xml avec l’éditeur de code de Cloud Shell :
code pom.xml
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>
.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
Ouvrez votre fichier host.json avec l’éditeur de code de Cloud Shell :
code host.json
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, maislogging
etapplicationInsights
définissent des paramètres différents pour ces fonctionnalités.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.
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 fonctionrun()
.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(); }
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(); }
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
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;
Ajoutez la définition suivante à la classe
Function()
de votre application. Cette instruction instancie un objetTelemetryClient
:private TelemetryClient telemetry = new TelemetryClient();
Copiez chacune des instructions
context.getLogger()
et modifiez le code afin que chacune des entrées dupliquées appelletelemetry.trackEvent()
au lieu decontext.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(); } . . .
Appuyez sur Ctrl + S pour enregistrer votre fichier Function.java, puis sur Ctrl + Q pour fermer l’éditeur de code.
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.
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
Connectez-vous au portail Azure avec le même compte que celui avec lequel vous avez activé le bac à sable.
Sélectionnez Toutes les ressources dans le menu à gauche.
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.
Affichez votre activité de streaming des journaux :
Sélectionnez Flux de journal dans le menu Application de fonction.
Ouvrez la liste déroulante Journaux App Insights, puis sélectionnez Journaux Filesystem.
Notez que votre exemple de trafic génère une série d’entrées de journal.
Affichez votre activité de Métriques en temps réel :
Sélectionnez la liste déroulante Journaux Filesystem, puis sélectionnez Journaux App Insights.
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.
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.