Kurz: řešení potíží s aplikací App Service pomocí Azure Monitor
V tomto kurzu se dozvíte, jak řešit App Service aplikaci pomocí Azure monitor. Ukázková aplikace obsahuje kód určený k vyčerpání paměti a způsobuje chyby HTTP 500, takže můžete diagnostikovat a vyřešit problém pomocí Azure Monitor. Až budete hotovi, budete mít ukázkovou aplikaci spuštěnou na App Service na platformě Linux integrovanou s Azure monitor.
Azure monitor maximalizuje dostupnost a výkon vašich aplikací a služeb tím, že poskytuje ucelené řešení pro shromažďování, analýzu a vykonávání telemetrie z vašich cloudových a místních prostředí.
V tomto kurzu se naučíte:
- Konfigurace webové aplikace s Azure Monitor
- Odeslání protokolů konzoly do Log Analytics
- Použití dotazů protokolu k identifikaci a řešení chyb webových aplikací
Podle kroků v tomto kurzu můžete postupovat v systémech macOS, Linux a Windows.
Pokud ještě nemáte předplatné Azure,vytvořte si bezplatný účet před tím, než začnete.
Požadavky
K dokončení tohoto kurzu budete potřebovat:
Vytvoření prostředků Azure
Za prvé můžete spustit několik příkazů místně a nastavit ukázkovou aplikaci, která se použije v tomto kurzu. Příkazy vytvoří prostředky Azure, vytvoří uživatele nasazení a nasadí ukázkovou aplikaci do Azure. Zobrazí se výzva k zadání hesla, které jste zadali jako součást vytvoření uživatele nasazení.
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|7.3" --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
Konfigurace Azure Monitor
Vytvoření pracovního prostoru Log Analytics
Teď, když jste nasadili ukázkovou aplikaci na Azure App Service, nakonfigurujete možnost monitorování, abyste aplikaci mohli řešit, když dojde k problémům. Azure Monitor ukládá data protokolu v pracovním prostoru Log Analytics. Pracovní prostor je kontejner, který obsahuje data a informace o konfiguraci.
V tomto kroku vytvoříte Log Analytics pracovní prostor pro konfiguraci Azure Monitor s vaší aplikací.
az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace
Vytvoření nastavení diagnostiky
Nastavení diagnostiky lze použít ke shromáždění metrik pro určité služby Azure do protokolů Azure Monitor k analýze s ostatními daty monitorování pomocí dotazů protokolu. V tomto kurzu povolíte webový server a standardní protokoly výstupu a chyb. Úplný seznam typů protokolů a popisů najdete v části podporované typy protokolů .
Spuštěním následujících příkazů vytvořte nastavení diagnostiky pro AppServiceConsoleLogs (standardní výstup/chyba) a AppServiceHTTPLogs (protokoly webového serveru). Nahraďte <app-name> a <workspace-name> hodnotami.
Poznámka
První dva příkazy, resourceID a workspaceID , jsou proměnné, které mají být použity v az monitor diagnostic-settings create příkazu. Další informace o tomto příkazu najdete v tématu Vytvoření nastavení diagnostiky pomocí 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}]'
Řešení potíží s aplikací
Přejděte na adresu http://<app-name>.azurewebsites.net.
Ukázková aplikace, ImageConverter, převede zahrnuté obrázky z JPG na PNG . Chyba byla záměrně umístěna do kódu pro tento kurz. Pokud vyberete dostatek imagí, aplikace během převodu imagí vytvoří chybu HTTP 500. Imagine tento scénář nebyl posouzen během fáze vývoje. K odstranění chyby použijte Azure Monitor.
Ověřte, že aplikace funguje.
Chcete-li převést obrázky, klikněte na tlačítko Tools a vyberte Convert to PNG .

Vyberte první dva obrázky a klikněte na convert . Tím se úspěšně převede.

Přerušení aplikace
Teď, když jste aplikaci ověřili tak, že úspěšně převedete dvě image, zkusíme převést prvních pět imagí.

Tato akce se nezdařila a vytvoří HTTP 500 chybu, která nebyla testována během vývoje.

Použití dotazu protokolu k zobrazení protokolů Azure Monitor
Pojďme se podívat, jaké protokoly jsou k dispozici v pracovním prostoru Log Analytics.
Kliknutím na tento odkaz Log Analytics pracovního prostoru získáte přístup k pracovnímu prostoru v Azure Portal.
V Azure Portal vyberte pracovní prostor Log Analytics.
Dotazy na protokoly
Dotazy protokolu umožňují plně použít hodnotu dat shromažďovaných v protokolech Azure Monitor. Pomocí dotazů protokolu můžete identifikovat protokoly v AppServiceHTTPLogs i AppServiceConsoleLogs. Další informace o dotazech protokolu najdete v tématu Přehled dotazů protokolu .
Zobrazit AppServiceHTTPLogs s dotazem protokolu
Teď, když jsme získali aplikaci, Podívejme se na data přidružená k požadavkům HTTP, která najdete v části AppServiceHTTPLogs .
- Klikněte na tlačítko
Logsz levé navigační části.

- Vyhledejte
appservicea dvakrát klikněte na tlačítkoAppServiceHTTPLogs.

- Klikněte na
Run(Další).

AppServiceHTTPLogsDotaz vrátí všechny požadavky za posledních 24 hodin. Sloupec ScStatus obsahuje stav HTTP. Chcete-li diagnostikovat HTTP 500 chyby, omezte na ScStatus 500 a spusťte dotaz, jak je znázorněno níže:
AppServiceHTTPLogs
| where ScStatus == 500
Zobrazit AppServiceConsoleLogs s dotazem protokolu
Teď, když jste potvrdili HTTP 500, Pojďme se podívat na standardní výstup a chyby z aplikace. Tyto protokoly jsou k dispozici v ' AppServiceConsoleLogs '.
(1) kliknutím + vytvoříte nový dotaz.
(2) poklikejte na AppServiceConsoleLogs tabulku a klikněte na Run .
Vzhledem k tomu, že při převodu pěti imagí dojde k chybám serveru, můžete zjistit, jestli je aplikace také zapsána chybami filtrováním ResultDescription chyb, jak je vidět níže:
AppServiceConsoleLogs |
where ResultDescription contains "error"
Ve ResultDescription sloupci se zobrazí následující chyba:
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/
Připojit AppServiceHTTPLogs a AppServiceConsoleLogs
Teď, když jste identifikovali HTTP 500 i standardní chyby, je potřeba potvrdit, jestli existuje korelace mezi těmito zprávami. V dalším kroku spojíte tabulky na základě časového razítka TimeGenerated .
Poznámka
Pro vás byl připraven dotaz, který provede následující akce:
- HTTPLogs filtry pro chyby 500
- Dotazy na protokoly konzoly
- Spojí tabulky na.
TimeGenerated
Spusťte tento dotaz:
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;
Ve ResultDescription sloupci se zobrazí následující chyba ve stejnou dobu jako chyby webového serveru:
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/
Zpráva o stavu paměti byla vyčerpána na řádku 20 process.php . Nyní jste potvrdili, že aplikace vytvořila chybu během chyby HTTP 500. Pojďme se podívat na kód pro identifikaci problému.
Určení chyby
V místním adresáři otevřete process.php a podívejte se na řádek 20.
imagepng($imgArray[$x], $filename);
První argument, $imgArray[$x] , je proměnná, která uchovává všechny JPGs (v paměti), které potřebují převod. Ale imagepng potřebuje jenom převáděnou image, ne všechny image. Předběžné načtení imagí není nutné a může způsobovat vyčerpání paměti, což vede k 500 HTTP. Pojďme aktualizovat kód, aby se načetly obrázky na vyžádání, aby se zobrazilo, jestli problém vyřešil. Dále Vylepšete kód pro vyřešení problému s pamětí.
Oprava aplikace
Místní aktualizace a opětovné nasazení kódu
Pro zpracování vyčerpání paměti provedete následující změny process.php :
<?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);
}
Potvrďte změny v Gitu a potom odešlete změny kódu do Azure.
git commit -am "Load images on-demand in process.php"
git push azure main
Přejít k aplikaci Azure
Přejděte na adresu http://<app-name>.azurewebsites.net.
Převod obrázků by neměl nadále vydávat chyby HTTP 500.

Vyčištění prostředků
V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:
az group delete --name myResourceGroup
Spuštění tohoto příkazu může trvat přibližně minut.
Odstraňte nastavení diagnostiky pomocí následujícího příkazu:
az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs
Naučili jste se:
- Nakonfigurovali jste webovou aplikaci pomocí Azure Monitor
- Odeslané protokoly do Log Analytics
- Použití dotazů protokolu k identifikaci a řešení chyb webových aplikací