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:
Használja a Bash-környezetet az Azure Cloud Shellben. További információ: A Bash rövid útmutatója az Azure Cloud Shellben.
Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd : Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
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
Feljegyzés
Az Azure Monitor Log Analytics esetében fizetnie kell az adatbetöltésért és az adatmegőrzésért.
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 workspaceID
az 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 PNG
alakí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
.
Jelölje ki az első két képet, és kattintson a gombra convert
. Ez sikeresen konvertálható.
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.
Ez a művelet meghiúsul, és olyan HTTP 500
hibát eredményez, amelyet nem teszteltek a fejlesztés során.
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
.
- Kattintson
Logs
a bal oldali navigációs sávról.
- Keressen rá
appservice
, és kattintsonAppServiceHTTPLogs
duplán.
- Kattintson a
Run
parancsra.
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 500
ScStatus
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 Run
a 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 TimeGenerated
alapjá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.
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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: