Kurz: Řešení potíží s aplikací služby App Service pomocí služby Azure Monitor
V tomto kurzu se dozvíte, jak řešit potíže s aplikací služby App Service pomocí služby Azure Monitor. Ukázková aplikace obsahuje kód, který má vyčerpat paměť a způsobit chyby HTTP 500, abyste mohli diagnostikovat a opravit problém pomocí služby Azure Monitor. Po dokončení máte spuštěnou ukázkovou aplikaci na App Service v Linuxu integrované se službou Azure Monitor.
Azure Monitor maximalizuje dostupnost a výkon vašich aplikací a služeb tím, že poskytuje komplexní řešení pro shromažďování, analýzu a akce na telemetrii z cloudových a místních prostředí.
V tomto kurzu se naučíte:
- Konfigurace webové aplikace pomocí služby Azure Monitor
- Odesílání protokolů konzoly do Log Analytics
- Identifikace a řešení chyb webové aplikace pomocí dotazů protokolu
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 Azure před tím, než začnete.
Požadavky
Pro absolvování tohoto kurzu potřebujete:
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Vytvoření zdrojů Azure
Nejprve spustíte několik příkazů místně a nastavíte ukázkovou aplikaci pro použití s tímto kurzem. Příkazy vytvářejí prostředky Azure, vytvářejí uživatele nasazení a nasazují ukázkovou aplikaci do Azure. Zobrazí se výzva k zadání hesla zadaného 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|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
Konfigurace služby Azure Monitor
Vytvoření pracovního prostoru služby Log Analytics
Teď, když jste nasadili ukázkovou aplikaci do služby Aplikace Azure Service, nakonfigurujete funkci monitorování pro řešení potíží s aplikací. Azure Monitor ukládá data protokolů do pracovního prostoru služby Log Analytics. Pracovní prostor je kontejner, který obsahuje data a informace o konfiguraci.
V tomto kroku vytvoříte pracovní prostor služby Log Analytics pro konfiguraci služby Azure Monitor s vaší aplikací.
az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace
Vytvoření nastavení diagnostiky
Nastavení diagnostiky se dá použít ke shromažďování metrik pro určité služby Azure do protokolů služby Azure Monitor pro účely analýzy s jinými daty monitorování pomocí dotazů na protokoly. Pro účely tohoto kurzu povolíte webový server a standardní výstupní/chybové protokoly. Úplný seznam typů protokolů a popisů najdete v podporovaných typech 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 <název> aplikace a <název> pracovního prostoru hodnotami.
Poznámka:
První dva příkazy resourceID
a workspaceID
jsou proměnné, které se mají použít v příkazu az monitor diagnostic-settings create . 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}]'
Odstranění potíží aplikace
Přejděte na http://<app-name>.azurewebsites.net
.
Ukázková aplikace ImageConverter převádí zahrnuté obrázky z JPG
do PNG
. V kódu pro účely tohoto kurzu byla záměrně vložena chyba. Pokud vyberete dostatek obrázků, aplikace během převodu obrázků vytvoří chybu HTTP 500. Představte si, že tento scénář se během fáze vývoje nepovažoval za tento scénář. K řešení chyby použijete Azure Monitor.
Ověření fungování aplikace
Chcete-li převést obrázky, klikněte 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 dva obrázky, pokusíme se převést prvních pět obrázků.
Tato akce selže a vygeneruje chybu, která nebyla testována HTTP 500
během vývoje.
Použití dotazu protokolu k zobrazení protokolů služby Azure Monitor
Pojďme se podívat, jaké protokoly jsou dostupné v pracovním prostoru služby Log Analytics.
Kliknutím na tento odkaz na pracovní prostor služby Log Analytics získáte přístup k pracovnímu prostoru na webu Azure Portal.
Na webu Azure Portal vyberte pracovní prostor služby Log Analytics.
Dotazy na protokoly
Dotazy na protokoly vám pomůžou plně použít hodnotu dat shromážděných v protokolech služby Azure Monitor. Pomocí dotazů protokolu identifikujete protokoly v protokolech AppServiceHTTPLogs i AppServiceConsoleLogs. Další informace o dotazech protokolu najdete v přehledu dotazu protokolu.
Zobrazení protokolů APPServiceHTTPLogs s dotazem protokolu
Teď, když jsme k aplikaci přistupovali, se podíváme na data spojená s požadavky HTTP, která najdete v souboru AppServiceHTTPLogs
.
- Klikněte
Logs
z levé navigace.
- Vyhledejte
appservice
a poklikejte naAppServiceHTTPLogs
.
- Klikněte na
Run
.
Dotaz AppServiceHTTPLogs
vrátí všechny požadavky za posledních 24 hodin. Sloupec ScStatus
obsahuje stav HTTP. Pokud chcete diagnostikovat HTTP 500
chyby, omezte ScStatus
500 a spusťte dotaz, jak je znázorněno níže:
AppServiceHTTPLogs
| where ScStatus == 500
Zobrazení protokolů AppServiceConsoleLogs s dotazem protokolu
Teď, když jste potvrdili http 500s, se podíváme na standardní výstup/chyby z aplikace. Tyto protokoly se nacházejí v AppServiceConsoleLogs.
(1) Kliknutím +
vytvoříte nový dotaz.
(2) Poklikejte na AppServiceConsoleLogs
tabulku a klikněte na Run
tlačítko .
Vzhledem k tomu, že převod pěti imagí vede k chybám serveru, můžete zjistit, jestli aplikace také zapisuje chyby filtrováním ResultDescription
chyb, jak je znázorněno níže:
AppServiceConsoleLogs |
where ResultDescription contains "error"
Ve sloupci ResultDescription
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řipojení k AppServiceHTTPLogs a AppServiceConsoleLogs
Teď, když jste identifikovali jak HTTP 500, tak standardní chyby, musíte ověřit, jestli mezi těmito zprávami existuje korelace. Dále spojíte tabulky na základě časového razítka TimeGenerated
.
Poznámka:
Dotaz je připravený pro vás, který provede následující:
- Filtruje protokoly HTTP 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;
ResultDescription
Ve sloupci se zobrazí následující chyba současně s chybami 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 uvádí, že paměť byla vyčerpána na řádku 20 z process.php
. Teď jste potvrdili, že aplikace vytvořila chybu během chyby HTTP 500. Pojďme se podívat na kód a identifikovat problém.
Určení chyby
V místním adresáři otevřete process.php
řádek 20 a podívejte se na řádek 20.
imagepng($imgArray[$x], $filename);
Prvním argumentem je proměnná, $imgArray[$x]
která má všechny skupiny JPG (v paměti) vyžadující převod. imagepng
Potřebuje ale jenom převést obrázek, nikoli všechny obrázky. Předinstalované image nejsou nutné a mohou způsobovat vyčerpání paměti, což vede k http 500s. Pojďme aktualizovat kód tak, aby načítal obrázky na vyžádání, abychom zjistili, jestli problém vyřeší. Dále kód vylepšíte, abyste vyřešili problém s pamětí.
Oprava aplikace
Místní aktualizace a opětovné nasazení kódu
Při 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řejděte do aplikace Azure.
Přejděte na http://<app-name>.azurewebsites.net
.
Převod imagí by již neměl vést k chybám 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.
Pomocí následujícího příkazu odstraňte nastavení diagnostiky:
az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs
Naučili jste se:
- Konfigurace webové aplikace pomocí služby Azure Monitor
- Odeslané protokoly do Log Analytics
- Použití dotazů protokolu k identifikaci a řešení chyb webové aplikace