Tutoriel : Résoudre les problèmes d’une application App Service avec Azure Monitor
Ce tutoriel montre comment résoudre les problèmes liés à une application App Service à l'aide d'Azure Monitor. L’exemple d’application inclut le code destiné à saturer la mémoire et à générer des erreurs HTTP 500. Il vous permet ainsi de diagnostiquer et de résoudre le problème à l’aide d’Azure Monitor. Quand vous aurez terminé, vous disposerez d’un exemple d’application s’exécutant dans App Service sur Linux intégré à Azure Monitor.
Azure Monitor optimise la disponibilité et les performances de vos applications et services en fournissant une solution complète pour collecter, analyser et utiliser la télémétrie de vos environnements cloud et locaux.
Dans ce tutoriel, vous allez apprendre à :
- Configurer une application web avec Azure Monitor.
- Envoyer des journaux de console à Log Analytics.
- Utiliser des requêtes de journal pour identifier et résoudre les erreurs d’une application web.
Vous pouvez suivre les étapes de ce tutoriel sur macOS, Linux, Windows.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Prérequis
Pour suivre ce didacticiel, vous avez besoin des éléments suivants :
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Créer des ressources Azure
Tout d’abord, vous devez exécuter plusieurs commandes localement pour configurer l’exemple d’application que vous utiliserez avec ce tutoriel. Les commandes créent des ressources Azure, créent un utilisateur de déploiement et déploient l’exemple d’application sur Azure. Le mot de passe que vous avez fourni dans le cadre de la création de l’utilisateur du déploiement vous est demandé.
az group create --name myResourceGroup --location "South Central US"
az webapp deployment user set --user-name <username> --password <password>
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku B1 --is-linux
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|8.1" --deployment-local-git
az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
git clone https://github.com/Azure-Samples/App-Service-Troubleshoot-Azure-Monitor
cd App-Service-Troubleshoot-Azure-Monitor
git branch -m main
git remote add azure <url-from-app-webapp-create>
git push azure main
Configurer Azure Monitor
Créer un espace de travail Log Analytics
Vous avez déployé l’exemple d’application dans Azure App Service. À présent, vous configurez la fonctionnalité de supervision pour résoudre les problèmes affectant l’application. Azure Monitor stocke les données de journal dans un espace de travail Log Analytics. Un espace de travail est un conteneur qui renferme des données ainsi que des informations de configuration.
Au cours de cette étape, vous allez créer un espace de travail Log Analytics pour configurer Azure Monitor avec votre application.
az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace
Créer un paramètre de diagnostic
Les paramètres de diagnostic permettent de collecter des métriques pour certains services Azure dans les journaux Azure Monitor afin de les analyser avec d’autres données de surveillance à l’aide de requêtes de journal. Pour ce tutoriel, vous devez activer les journaux de serveur web et de sorties/d’erreurs standard. Pour obtenir la liste complète des types de journaux avec leurs descriptions, consultez Types de journaux pris en charge.
Exécutez les commandes suivantes pour créer des paramètres de diagnostic pour AppServiceConsoleLogs (sorties/erreurs standard) et AppServiceHTTPLogs (journaux de serveur web). Remplacez app-name> et workspace-name> par vos valeurs.
Notes
Les deux premières commandes, resourceID
et workspaceID
, sont des variables à utiliser dans la commande az monitor diagnostic-settings create. Pour plus d’informations sur cette commande, consultez Créer des paramètres de diagnostic à l’aide d’Azure CLI.
resourceID=$(az webapp show -g myResourceGroup -n <app-name> --query id --output tsv)
workspaceID=$(az monitor log-analytics workspace show -g myResourceGroup --workspace-name <workspace-name> --query id --output tsv)
az monitor diagnostic-settings create --resource $resourceID \
--workspace $workspaceID \
-n myMonitorLogs \
--logs '[{"category": "AppServiceConsoleLogs", "enabled": true},
{"category": "AppServiceHTTPLogs", "enabled": true}]'
Résoudre les problèmes de l’application
Accédez à http://<app-name>.azurewebsites.net
.
L’exemple d’application ImageConverter convertit les images incluses du format JPG
au format PNG
. Pour ce tutoriel, un bogue a été délibérément placé dans le code. Si vous sélectionnez un certain nombre d’images, l’application génère une erreur HTTP 500 durant leur conversion. Imaginez que ce scénario n’ait pas été envisagé pendant la phase de développement. Vous utiliserez Azure Monitor pour corriger l’erreur.
Vérification du bon fonctionnement de l’application
Pour convertir des images, cliquez sur Tools
et sélectionnez Convert to PNG
.
Sélectionnez les deux premières images, puis cliquez sur convert
. Cette conversion s’effectue correctement.
Faire planter l’application
Vous avez vérifié le bon fonctionnement de l’application en convertissant deux images. À présent, vous essayez de convertir les cinq premières images.
Cette action échoue et génère une erreur HTTP 500
qui n’a pas été testée pendant le développement.
Utiliser une requête de journal pour visualiser les journaux Azure Monitor
Voyons quels journaux sont disponibles dans l’espace de travail Log Analytics.
Cliquez sur ce lien vers l’espace de travail Log Analytics pour accéder à votre espace de travail dans le portail Azure.
Dans le portail Azure, sélectionnez votre espace de travail Log Analytics.
Requêtes dans les journaux
Les requêtes de journal vous permettent d’appliquer pleinement la valeur des données collectées dans les journaux d’activité Azure Monitor. Vous utilisez des requêtes de journal pour identifier les journaux dans AppServiceHTTPLogs et AppServiceConsoleLogs. Pour plus d’informations sur les requêtes de journal, consultez la vue d’ensemble des requêtes de journal.
Visualiser AppServiceHTTPLogs en utilisant une requête de journal
Nous avons accédé à l’application. À présent, nous allons visualiser les données associées aux requêtes HTTP, se trouvant dans AppServiceHTTPLogs
.
- Cliquez sur
Logs
dans le volet de navigation de gauche.
- Recherchez
appservice
, puis double-cliquez surAppServiceHTTPLogs
.
- Cliquez sur
Run
.
La requête AppServiceHTTPLogs
retourne toutes les requêtes des dernières 24 heures. La colonne ScStatus
contient l’état HTTP. Pour diagnostiquer les erreurs HTTP 500
, limitez l’état ScStatus
à 500 et exécutez la requête comme indiqué ci-dessous :
AppServiceHTTPLogs
| where ScStatus == 500
Visualiser AppServiceConsoleLogs en utilisant une requête de journal
Vous avez identifié les erreurs HTTP 500. À présent, vous allez observer les sorties/erreurs standard de l’application. Ces journaux se trouvent dans « AppServiceConsoleLogs ».
(1) Cliquez sur +
pour créer une requête.
(2) Double-cliquez sur la table AppServiceConsoleLogs
, puis cliquez sur Run
.
Comme la conversion de cinq images entraîne des erreurs de serveur, vous pouvez voir si l’application consigne également des erreurs en filtrant ResultDescription
sur les erreurs comme indiqué ci-dessous :
AppServiceConsoleLogs |
where ResultDescription contains "error"
Vous voyez l’erreur suivante dans la colonne ResultDescription
:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
(tried to allocate 16384 bytes) in /home/site/wwwroot/process.php on line 20,
referer: http://<app-name>.azurewebsites.net/
Joindre AppServiceHTTPLogs et AppServiceConsoleLogs
Vous avez identifié les erreurs HTTP 500 et les erreurs standard. À présent, vous devez vérifier s’il existe une corrélation entre ces messages. Ensuite, vous devez joindre les tables en fonction de l’horodatage, TimeGenerated
.
Notes
Une requête effectuant les opérations suivantes a été préparée pour vous :
- Elle filtre HTTPLogs sur les erreurs 500.
- Elle interroge les journaux de la console.
- Elle joint les tables sur
TimeGenerated
.
Exécutez la requête suivante :
let myHttp = AppServiceHTTPLogs | where ScStatus == 500 | project TimeGen=substring(TimeGenerated, 0, 19), CsUriStem, ScStatus;
let myConsole = AppServiceConsoleLogs | project TimeGen=substring(TimeGenerated, 0, 19), ResultDescription;
myHttp | join myConsole on TimeGen | project TimeGen, CsUriStem, ScStatus, ResultDescription;
La colonne ResultDescription
présente l’erreur suivante en même temps que les erreurs de serveur web :
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
(tried to allocate 16384 bytes) in /home/site/wwwroot/process.php on line 20,
referer: http://<app-name>.azurewebsites.net/
Le message indique que la mémoire est saturée à la ligne 20 de process.php
. Vous avez pu constater que l’application a généré une erreur quand l’erreur HTTP 500 s’est produite. À présent, examinons le code pour identifier le problème.
Identifier l’erreur
Dans le répertoire local, ouvrez le fichier process.php
et examinez la ligne 20.
imagepng($imgArray[$x], $filename);
Le premier argument, $imgArray[$x]
, est une variable qui contient toutes les images JPG (en mémoire) à convertir. Toutefois, imagepng
a besoin de l’image en cours de conversion uniquement et non de toutes les images. Le préchargement des images n’est pas nécessaire et peut entraîner la saturation de la mémoire, générant des erreurs HTTP 500. Nous allons mettre à jour le code pour charger les images à la demande et voir si ceci résout le problème. Ensuite, vous améliorez le code pour résoudre le problème de mémoire.
Corriger l’application
Mettre à jour localement et redéployer le code
Vous devez apporter les modifications suivantes à process.php
pour résoudre le problème de saturation de la mémoire :
<?php
//Retrieve query parameters
$maxImages = $_GET['images'];
$imgNames = explode(",",$_GET['imgNames']);
//Load JPEGs into an array (in memory)
for ($x=0; $x<$maxImages; $x++){
$filename = './images/converted_' . substr($imgNames[$x],0,-4) . '.png';
imagepng(imagecreatefromjpeg("./images/" . $imgNames[$x]), $filename);
}
Validez vos modifications dans Git, puis envoyez les modifications de code à Azure.
git commit -am "Load images on-demand in process.php"
git push azure main
Accéder à l’application Azure
Accédez à http://<app-name>.azurewebsites.net
.
La conversion des images ne doit plus générer d’erreurs HTTP 500.
Nettoyer les ressources
Au cours des étapes précédentes, vous avez créé des ressources Azure au sein d’un groupe de ressources. Si vous ne pensez pas avoir besoin de ces ressources à l’avenir, supprimez le groupe de ressources en exécutant la commande suivante dans Cloud Shell :
az group delete --name myResourceGroup
L’exécution de cette commande peut prendre une minute.
Supprimez le paramètre de diagnostic à l’aide de la commande suivante :
az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs
Vous avez appris à effectuer les opérations suivantes :
- Configurer une application web avec Azure Monitor.
- Envoyer des journaux à Log Analytics.
- Utiliser des requêtes de journal pour identifier et corriger les erreurs d’application web.
Étapes suivantes
- Interrogation de journaux d’activité grâce à Azure Monitor
- Dépannage d’une application web dans le Service d’application Microsoft Azure à l’aide de Visual Studio
- Analyse des journaux d’activité d’application dans HDInsight (en anglais)
- Tutoriel : Exécuter un test de charge pour identifier les goulots d’étranglement de performances dans une application web