Oktatóanyag: App Service-alkalmazás hibaelhárítása az Azure Monitorral

Ez az oktatóanyag bemutatja, hogyan háríthat el egy App Service-alkalmazást az Azure Monitor használatával. A mintaalkalmazás a memória kimerülésére és HTTP 500-hibák okozására szolgáló kódot tartalmaz, így az Azure Monitor használatával diagnosztizálhatja és kijavíthatja a problémát. Ha végzett, egy mintaalkalmazás fut a Linuxon futó App Service-ben az Azure Monitorral integrálva.

Az Azure Monitor a felhőből és a helyszíni környezetekből származó telemetriai adatok gyűjtésére, elemzésére és kezelésére szolgáló átfogó megoldással maximalizálja az alkalmazások és szolgáltatások rendelkezésre állását és teljesítményét.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Webalkalmazás konfigurálása az Azure Monitorral
  • Konzolnaplók küldése a Log Analyticsbe
  • Webalkalmazási hibák azonosítása és elhárítása napló lekérdezésekkel

Az oktatóanyag lépései macOS, Linux és Windows rendszerre is vonatkoznak.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Előfeltételek

Az oktatóanyag elvégzéséhez a következőkre lesz szüksége:

Azure-erőforrások létrehozása

Először több parancsot futtat helyileg, hogy beállítson egy mintaalkalmazást az oktatóanyaghoz való használatra. A parancsok Azure-erőforrásokat hoznak létre, üzembe helyezési felhasználót hoznak létre, és üzembe helyezik a mintaalkalmazást az Azure-ban. A rendszer kéri a központi telepítési felhasználó létrehozásának részeként megadott jelszót.

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

Az Azure Monitor konfigurálása

Log Analytics-munkaterület létrehozása

Most, hogy üzembe helyezte a mintaalkalmazást a Azure-alkalmazás Szolgáltatásban, konfigurálja a figyelési képességet az alkalmazás hibaelhárítására, ha problémák merülnek fel. Az Azure Monitor naplóadatokat tárol egy Log Analytics-munkaterületen. A munkaterületek olyan tárolók, amelyek adatokat és konfigurációs információkat tartalmaznak.

Ebben a lépésben létrehoz egy Log Analytics-munkaterületet az Azure Monitor alkalmazással való konfigurálásához.

az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace

Diagnosztikai beállítás létrehozása

A diagnosztikai beállítások segítségével bizonyos Azure-szolgáltatások metrikáit gyűjtheti az Azure Monitor-naplókba, hogy más monitorozási adatokkal elemezhesse őket napló lekérdezésekkel. Ebben az oktatóanyagban engedélyezi a webkiszolgálót és a szabványos kimeneti/hibanaplókat. A naplótípusok és leírások teljes listáját a támogatott naplótípusokban találja.

A következő parancsokat futtatva diagnosztikai beállításokat hozhat létre az AppServiceConsoleLogs (standard kimenet/hiba) és az AppServiceHTTPLogs (webkiszolgáló-naplók) számára. Cserélje le <az alkalmazásnevet> és< a munkaterület nevét> az értékekre.

Feljegyzés

Az első két parancs, resourceID és workspaceIDaz az monitor diagnostic-settings create parancsban használandó változók. Erről a parancsról további információt a diagnosztikai beállítások létrehozása az Azure CLI használatával című témakörben talál.

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}]'

Az alkalmazás hibaelhárítása

Nyissa meg a következő címet: http://<app-name>.azurewebsites.net.

Az ImageConverter mintaalkalmazás a mellékelt képeket JPG a következőre PNGalakítja: . Szándékosan hiba került az oktatóanyag kódjába. Ha elegendő képet választ ki, az alkalmazás HTTP 500-es hibát eredményez a képkonvertálás során. Tegyük fel, hogy ezt a forgatókönyvet nem vették figyelembe a fejlesztési fázisban. A hiba elhárításához az Azure Monitort fogja használni.

Az alkalmazás működésének ellenőrzése

Képek konvertálásához kattintson Tools és válassza a lehetőséget Convert to PNG.

Click Tools and select Convert to PNG

Jelölje ki az első két képet, és kattintson a gombra convert. Ez sikeresen konvertálható.

Select the first two images

Az alkalmazás megszakítása

Most, hogy ellenőrizte az alkalmazást két lemezkép sikeres konvertálásával, megpróbáljuk konvertálni az első öt képet.

Convert first five images

Ez a művelet meghiúsul, és olyan HTTP 500 hibát eredményez, amelyet nem teszteltek a fejlesztés során.

The convert will result in a HTTP 500 error

Azure Monitor-naplók megtekintése napló lekérdezés használatával

Lássuk, milyen naplók érhetők el a Log Analytics-munkaterületen.

Erre a Log Analytics-munkaterületre mutató hivatkozásra kattintva elérheti a munkaterületet az Azure Portalon.

Az Azure Portalon válassza ki a Log Analytics-munkaterületet.

Naplólekérdezések

A napló lekérdezések segítségével teljes mértékben alkalmazhatja az Azure Monitor-naplókban gyűjtött adatok értékét. Naplólekérdezésekkel azonosíthatja az AppServiceHTTPLogs és az AppServiceConsoleLogs naplóit. A napló lekérdezésekkel kapcsolatos további információkért tekintse meg a napló lekérdezéseinek áttekintését .

AppServiceHTTPLogs megtekintése napló lekérdezéssel

Most, hogy hozzáfértünk az alkalmazáshoz, tekintsük meg a HTTP-kérésekhez társított adatokat, amelyek a AppServiceHTTPLogs.

  1. Kattintson Logs a bal oldali navigációs sávról.

Log Anlytics Worksace Logs

  1. Keressen rá appservice , és kattintson AppServiceHTTPLogsduplán.

Log analytics Workspace Tables

  1. Kattintson a Run parancsra.

Log Analytics Workspace App Service HTTP Logs

A AppServiceHTTPLogs lekérdezés az elmúlt 24 óra összes kérését visszaadja. Az oszlop ScStatus a HTTP-állapotot tartalmazza. A hibák diagnosztizálásához korlátozza az HTTP 500ScStatus 500-as értéket, és futtassa a lekérdezést az alábbiak szerint:

AppServiceHTTPLogs
| where ScStatus == 500

AppServiceConsoleLogs megtekintése naplólekérdezéssel

Most, hogy megerősítette a HTTP 500-at, nézzük meg az alkalmazás szokásos kimenetét/hibáit. Ezek a naplók az "AppServiceConsoleLogs" fájlban találhatók.

(1) Kattintson ide + egy új lekérdezés létrehozásához.

(2) Kattintson duplán a AppServiceConsoleLogs táblára, és kattintson Runa gombra.

Mivel az öt rendszerkép konvertálása kiszolgálóhibákat eredményez, láthatja, hogy az alkalmazás is hibákat ír-e a hibák szűrésével ResultDescription , ahogy az alább látható:

AppServiceConsoleLogs |
where ResultDescription  contains "error" 

Az oszlopban ResultDescription a következő hiba jelenik meg:

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/

Csatlakozás az AppServiceHTTPLogs és az AppServiceConsoleLogs szolgáltatáshoz

Most, hogy azonosította a HTTP 500s és a standard hibákat is, ellenőriznie kell, hogy van-e korreláció ezek között az üzenetek között. Ezután az időbélyeg TimeGeneratedalapján összekapcsolja a táblákat.

Feljegyzés

A következő lekérdezést készíti elő Önnek:

  • HTTP-naplók szűrése 500 hiba esetén
  • Konzolnaplók lekérdezése
  • Összekapcsolja a táblákat a következőn: TimeGenerated

Futtassa az alábbi lekérdezést:

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;

Az oszlopban ResultDescription a webkiszolgáló hibáival egy időben a következő hibaüzenet jelenik meg:

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/

Az üzenet azt jelzi, hogy a memória kimerült a 20 process.php. sorban. Most már megerősítette, hogy az alkalmazás hibát eredményezett a HTTP 500-hiba során. Tekintsük át a kódot a probléma azonosításához.

A hiba azonosítsa

A helyi könyvtárban nyissa meg a process.php 20. sort, és nézze meg a 20. sort.

imagepng($imgArray[$x], $filename);

Az első argumentum egy olyan változó, $imgArray[$x]amely az összes (memóriában lévő) JPG-t tartja, amely átalakítást igényel. Azonban csak a kép konvertálására van szükség, imagepng és nem az összes képre. A képek előzetes betöltése nem szükséges, és a memória kimerülését okozhatja, ami HTTP 500-hoz vezethet. Frissítsük a kódot, hogy igény szerint betöltsük a képeket, hogy kiderüljön, megoldja-e a problémát. A következő lépésben a memóriaproblémák megoldásához fejleszti a kódot.

Az alkalmazás javítása

A kód frissítése helyileg és ismételt üzembe helyezése

A memóriakimerülés kezeléséhez a következő módosításokat process.php kell végrehajtania:

<?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);
}

Mentse a módosításokat a Gitben, majd továbbítsa a kód módosításait az Azure-ba.

git commit -am "Load images on-demand in process.php"
git push azure main

Tallózás az Azure-alkalmazáshoz

Nyissa meg a következő címet: http://<app-name>.azurewebsites.net.

A képek konvertálása nem eredményezheti a HTTP 500-ra vonatkozó hibákat.

PHP app running in Azure App Service

Az erőforrások eltávolítása

Az előző lépésekben Azure-erőforrásokat hozott létre egy erőforráscsoportban. Ha várhatóan nem lesz szüksége ezekre az erőforrásokra a jövőben, törölje az erőforráscsoportot a következő parancs Cloud Shellben történő futtatásával:

az group delete --name myResourceGroup

A parancs futtatása egy percig is eltarthat.

Törölje a diagnosztikai beállítást a következő paranccsal:

az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs

Az alábbiak elvégzését ismerte meg:

  • Webalkalmazás konfigurálása az Azure Monitorral
  • Naplók küldése a Log Analyticsnek
  • A webalkalmazás hibáinak azonosítására és elhárítására használt napló lekérdezések

Következő lépések