Sdílet prostřednictvím


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:

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 workspaceIDjsou 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.

Klikněte na Nástroje a vyberte Převést na PNG.

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

Výběr prvních dvou obrázků

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ů.

Převod prvních pěti obrázků

Tato akce selže a vygeneruje chybu, která nebyla testována HTTP 500 během vývoje.

Výsledkem převodu bude chyba HTTP 500.

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.

  1. Klikněte Logs z levé navigace.

Protokoly pracovního prostoru služby Log Analytics

  1. Vyhledejte appservice a poklikejte na AppServiceHTTPLogs.

Tabulky pracovního prostoru služby Log Analytics

  1. Klikněte na Run.

Protokoly HTTP služby App Service pracovního prostoru služby Log Analytics

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 Runtlačí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.

Aplikace PHP spuštěná ve službě Azure App Service

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

Další kroky