Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Den här självstudien visar hur du felsöker en Azure App Service-app med hjälp av Azure Monitor. Exempelappen innehåller kod som är avsedd att uttömma minne och orsaka HTTP 500-fel, så att du kan diagnostisera och åtgärda problemet med hjälp av Azure Monitor. När du är klar har du en exempelapp som körs på App Service på Linux som är integrerad med Azure Monitor.
Azure Monitor maximerar tillgängligheten och prestandan för dina program och tjänster genom att leverera en omfattande lösning för att samla in, analysera och agera på systemgenererade loggar från molnet och lokala miljöer.
I den här självstudien lär du dig att:
- Konfigurera en webbapp med Azure Monitor
- Skicka konsolloggar till Log Analytics
- Använda loggfrågor för att identifiera och felsöka webbappsfel
Du kan följa stegen i den här självstudien om macOS, Linux eller Windows.
Förutsättningar
Ett Azure-abonnemang. Om du inte har något Azure-konto skapar du ett kostnadsfritt konto innan du börjar.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Kom igång med Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Autentisera till Azure med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Skapa Azure-resurser
Kör först flera kommandon för att konfigurera en exempelapp som ska användas med den här handledningen. Följande kommandon skapar Azure-resurser, skapar en distributionsanvändare och distribuerar exempelappen till Azure. Du uppmanas att ange lösenordet som en del av skapandet av distributionsanvändaren.
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.4" --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
Konfigurera Azure Monitor
Skapa en Log Analytics-arbetsyta
När du har distribuerat exempelappen till Azure App Service konfigurerar du övervakningsfunktionen för att felsöka appen när problem uppstår. Azure Monitor lagrar loggdata på en Log Analytics-arbetsyta. En arbetsyta är en container som innehåller data och konfigurationsinformation.
I det här steget skapar du en Log Analytics-arbetsyta för att konfigurera Azure Monitor med din app.
az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace
Skapa en diagnostikinställning
Azure Monitor använder diagnostikinställningar för att samla in mått för vissa Azure-tjänster för analys med andra övervakningsdata med hjälp av loggfrågor. I den här självstudien aktiverar du webbservern och standardloggarna för utdata/fel. En fullständig lista över loggtyper och beskrivningar finns i Resursloggar som stöds.
Kör följande kommandon för att skapa diagnostikinställningar för AppServiceConsoleLogs (standardutdata/fel) och AppServiceHTTPLogs (webbserverloggar). Ersätt < och > med dina värden.
resourceID=$(az webapp show -g myResourceGroup -n <app-name> --query id --output tsv)
workspaceID=$(az monitor log-analytics workspace show -g myResourceGroup --workspace-name myMonitorWorkspace --query id --output tsv)
az monitor diagnostic-settings create --resource $resourceID \
--workspace $workspaceID \
-n myMonitorLogs \
--logs '[{"category": "AppServiceConsoleLogs", "enabled": true},
{"category": "AppServiceHTTPLogs", "enabled": true}]'
Kommentar
De två första kommandona, resourceID och workspaceID, är variabler som ska användas i kommandot az monitor diagnostic-settings create . Mer information finns i Skapa diagnostikinställningar med Azure CLI.
Felsöka appen
Bläddra till http://<app-name>.azurewebsites.net.
Exempelappen ImageConverter konverterar inkluderade bilder från JPG till PNG. En bugg placerades avsiktligt i koden för den här handledningen. Om du väljer tillräckligt många bilder genererar appen ett HTTP 500-fel under bildkonverteringen. Tänk dig att det här scenariot inte övervägdes under utvecklingsfasen. Du använder Azure Monitor för att felsöka felet.
Kontrollera att appen fungerar
Om du vill konvertera bilder väljer du Verktyg och sedan Konvertera till PNG.
Välj de två första bilderna och välj Konvertera. Detta konverteras.
Dela upp appen
När du har verifierat appen genom att konvertera två bilder kan du försöka konvertera de första fem bilderna.
Den här åtgärden misslyckas och genererar ett HTTP 500-fel som inte testades under utvecklingen.
Använda loggfråga för att visa Azure Monitor-loggar
Nu ska vi se vilka loggar som är tillgängliga på Log Analytics-arbetsytan.
Välj den här Log Analytics-arbetsytelänken för att få åtkomst till din arbetsyta i Azure-portalen.
I Azure Portal väljer du din Log Analytics-arbetsyta.
Loggfrågor
Loggfrågor hjälper dig att fullt ut tillämpa värdet för de data som samlas in i Azure Monitor-loggar. Du använder loggfrågor för att identifiera loggarna i både AppServiceHTTPLogs och AppServiceConsoleLogs. Mer information finns i Loggfrågor i Azure Monitor.
Visa AppServiceHTTPLogs med loggfråga
När du har åtkomst till appen visar du de data som är associerade med HTTP-begäranden i AppServiceHTTPLogs.
Välj Loggar på sidomenyn.
Sök efter appservice och dubbelklicka på AppServiceHTTPLogs.
Välj Kör.
Frågan AppServiceHTTPLogs returnerar alla begäranden under de senaste 24 timmarna. Kolumnen ScStatus innehåller HTTP-status. Om du vill diagnostisera HTTP 500-felen begränsar du ScStatus till 500 och kör frågan:
AppServiceHTTPLogs
| where ScStatus == 500
Visa AppServiceConsoleLogs med loggfråga
När du har bekräftat HTTP 500s kan du ta en titt på standardutdata/fel från appen. Dessa loggar finns i AppServiceConsoleLogs.
Välj + för att skapa en ny fråga.
Dubbelklicka på tabellen AppServiceConsoleLogs och välj Kör.
Eftersom konvertering av fem bilder resulterar i serverfel kan du se om appen också skriver fel genom att ResultDescription filtrera efter fel:
AppServiceConsoleLogs |
where ResultDescription contains "error"
I kolumnen ResultDescription visas följande fel:
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/
Gå med i AppServiceHTTPLogs och AppServiceConsoleLogs
När du har identifierat både HTTP 500- och standardfel måste du bekräfta om det finns en korrelation mellan dessa meddelanden. Koppla ihop tabellerna baserat på tidsstämpeln TimeGenerated.
Kommentar
En fråga har förberetts för dig som gör följande:
- Filtrerar HTTPLogs för 500-fel
- Frågekonsolloggar
- Ansluter tabellerna på
TimeGenerated
Kör följande fråga:
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;
I kolumnen ResultDescription visas följande fel samtidigt som webbserverfel:
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/
Meddelandet anger att minnet har förbrukats på rad 20 i process.php. Nu har du bekräftat att programmet skapade ett HTTP 500-fel. Nu ska vi ta en titt på koden för att identifiera problemet.
Identifiera felet
I den lokala katalogen App-Service-Troubleshoot-Azure-Monitor öppnar du process.php och tittar på rad 20.
imagepng($imgArray[$x], $filename);
Det första argumentet, $imgArray[$x], är en variabel som innehåller alla JPG:er (minnesintern) som behöver konvertering.
imagepng Dock behöver bara bilden konverteras och inte alla bilder. Förinläsning av bilder är inte nödvändigt och kan orsaka minnesöverbelastning, vilket leder till HTTP 500-fel. Nu ska vi uppdatera koden för att läsa in bilder på begäran för att se om den löser problemet. Förbättra sedan koden för att åtgärda minnesproblemet.
Åtgärda appen
Uppdatera lokalt och distribuera om koden
Gör följande ändringar i process.php för att hantera minnesöverbelastningen:
<?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);
}
Spara ändringarna på Git och skicka sedan kodändringarna till Azure.
git commit -am "Load images on-demand in process.php"
git push azure main
Bläddra till Azure-appen
Bläddra till http://<app-name>.azurewebsites.net.
Konvertering av bilder bör inte längre generera HTTP 500-fel.
Rensa resurser
I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:
az group delete --name myResourceGroup
Det kan ta en minut att köra det här kommandot.
Ta bort diagnostikinställningarna genom att köra följande kommando:
az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs