Samouczek: rozwiązywanie problemów z aplikacją usługi App Service za pomocą usługi Azure Monitor
W tym samouczku pokazano, jak rozwiązywać problemy z aplikacją usługi App Service przy użyciu usługi Azure Monitor. Przykładowa aplikacja zawiera kod przeznaczony do wyczerpania pamięci i powodować błędy HTTP 500, dzięki czemu można zdiagnozować i rozwiązać problem przy użyciu usługi Azure Monitor. Po zakończeniu masz przykładową aplikację działającą w App Service dla systemu Linux zintegrowaną z usługą Azure Monitor.
Usługa Azure Monitor maksymalizuje dostępność i wydajność aplikacji i usług, zapewniając kompleksowe rozwiązanie do zbierania, analizowania i działania na telemetrii ze środowisk chmurowych i lokalnych.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Konfigurowanie aplikacji internetowej za pomocą usługi Azure Monitor
- Wysyłanie dzienników konsoli do usługi Log Analytics
- Używanie zapytań dzienników do identyfikowania i rozwiązywania problemów z błędami aplikacji internetowej
Kroki opisane w tym samouczku można wykonać w systemie macOS, Linux i Windows.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Wymagania wstępne
Do ukończenia tego samouczka niezbędne są następujące elementy:
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Tworzenie zasobów platformy Azure
Najpierw uruchom kilka poleceń lokalnie, aby skonfigurować przykładową aplikację do użycia z tym samouczkiem. Polecenia tworzą zasoby platformy Azure, tworzą użytkownika wdrożenia i wdrażają przykładową aplikację na platformie Azure. Zostanie wyświetlony monit o podanie hasła dostarczonego w ramach tworzenia użytkownika wdrożenia.
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
Konfigurowanie usługi Azure Monitor
Tworzenie obszaru roboczego usługi Log Analytics
Po wdrożeniu przykładowej aplikacji w usłudze aplikacja systemu Azure możesz skonfigurować możliwość monitorowania w celu rozwiązywania problemów z aplikacją w przypadku wystąpienia problemów. Usługa Azure Monitor przechowuje dane dziennika w obszarze roboczym usługi Log Analytics. Obszar roboczy to kontener zawierający dane i informacje o konfiguracji.
W tym kroku utworzysz obszar roboczy usługi Log Analytics, aby skonfigurować usługę Azure Monitor przy użyciu aplikacji.
az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace
Tworzenie ustawienia diagnostycznego
Ustawienia diagnostyczne mogą służyć do zbierania metryk dla niektórych usług platformy Azure w dziennikach usługi Azure Monitor na potrzeby analizy z innymi danymi monitorowania przy użyciu zapytań dzienników. Na potrzeby tego samouczka włączysz serwer internetowy i standardowe dzienniki danych wyjściowych/błędów. Zobacz obsługiwane typy dzienników , aby uzyskać pełną listę typów dzienników i opisów.
Uruchom następujące polecenia, aby utworzyć ustawienia diagnostyczne dla dzienników AppServiceConsoleLogs (standardowe dane wyjściowe/błąd) i AppServiceHTTPLogs (dzienniki serwera internetowego). Zastąp <wartości nazwa> aplikacji i <nazwa> obszaru roboczego swoimi wartościami.
Uwaga
Dwa pierwsze polecenia i workspaceID
, to zmienne, resourceID
które mają być używane w poleceniu az monitor diagnostic-settings create. Aby uzyskać więcej informacji na temat tego polecenia, zobacz Tworzenie ustawień diagnostycznych przy użyciu interfejsu wiersza polecenia platformy Azure.
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}]'
Rozwiązywanie problemów z aplikacją
Przejdź do http://<app-name>.azurewebsites.net
.
Przykładowa aplikacja ImageConverter konwertuje dołączone obrazy z JPG
na PNG
. Usterka została celowo umieszczona w kodzie tego samouczka. W przypadku wybrania wystarczającej liczby obrazów aplikacja generuje błąd HTTP 500 podczas konwersji obrazu. Wyobraź sobie, że ten scenariusz nie był brany pod uwagę w fazie opracowywania. Aby rozwiązać ten problem, użyjesz usługi Azure Monitor.
Sprawdzanie, czy aplikacja działa
Aby przekonwertować obrazy, kliknij Tools
i wybierz pozycję Convert to PNG
.
Wybierz dwa pierwsze obrazy i kliknij pozycję convert
. Spowoduje to pomyślne przekonwertowanie.
Przerywanie pracy aplikacji
Teraz, gdy aplikacja została zweryfikowana przez pomyślne przekonwertowanie dwóch obrazów, spróbujemy przekonwertować pierwsze pięć obrazów.
Ta akcja kończy się niepowodzeniem HTTP 500
i powoduje błąd, który nie został przetestowany podczas programowania.
Wyświetlanie dzienników dzienników za pomocą zapytania
Zobaczmy, jakie dzienniki są dostępne w obszarze roboczym usługi Log Analytics.
Kliknij ten link obszaru roboczego usługi Log Analytics, aby uzyskać dostęp do obszaru roboczego w witrynie Azure Portal.
W witrynie Azure Portal wybierz obszar roboczy usługi Log Analytics.
Rejestrowanie zapytań
Zapytania dzienników ułatwiają pełne zastosowanie wartości danych zebranych w dziennikach usługi Azure Monitor. Zapytania dzienników służą do identyfikowania dzienników zarówno w polach AppServiceHTTPLogs, jak i AppServiceConsoleLogs. Zobacz omówienie zapytania dziennika, aby uzyskać więcej informacji na temat zapytań dzienników.
Wyświetlanie dzienników AppServiceHTTPLogs za pomocą zapytania dziennika
Teraz, gdy uzyskujemy dostęp do aplikacji, wyświetlmy dane skojarzone z żądaniami HTTP znajdującymi się w pliku AppServiceHTTPLogs
.
- Kliknij
Logs
pozycję w obszarze nawigacji po lewej stronie.
appservice
Wyszukaj i kliknij dwukrotnie plikAppServiceHTTPLogs
.
- Kliknij pozycję
Run
.
Zapytanie AppServiceHTTPLogs
zwraca wszystkie żądania w ciągu ostatnich 24 godzin. Kolumna ScStatus
zawiera stan HTTP. Aby zdiagnozować HTTP 500
błędy, ogranicz ScStatus
wartość do 500 i uruchom zapytanie, jak pokazano poniżej:
AppServiceHTTPLogs
| where ScStatus == 500
Wyświetlanie dzienników AppServiceConsoleLogs za pomocą zapytania dziennika
Teraz, po potwierdzeniu protokołu HTTP 500s, przyjrzyjmy się standardowym wyjściowym/błędom aplikacji. Te dzienniki znajdują się w obszarze "AppServiceConsoleLogs".
(1) Kliknij +
, aby utworzyć nowe zapytanie.
(2) Kliknij dwukrotnie tabelę AppServiceConsoleLogs
i kliknij przycisk Run
.
Ponieważ konwertowanie pięciu obrazów powoduje błędy serwera, możesz sprawdzić, czy aplikacja również zapisuje błędy, filtrując pod kątem ResultDescription
błędów, jak pokazano poniżej:
AppServiceConsoleLogs |
where ResultDescription contains "error"
W kolumnie ResultDescription
zostanie wyświetlony następujący błąd:
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/
Dołączanie do dzienników AppServiceHTTPLogs i AppServiceConsoleLogs
Teraz, gdy zidentyfikowano zarówno błędy HTTP 500s, jak i standardowe, należy potwierdzić, czy istnieje korelacja między tymi komunikatami. Następnie połączysz tabele na podstawie sygnatury czasowej TimeGenerated
.
Uwaga
Zostało przygotowane zapytanie, które wykonuje następujące czynności:
- Filtruje dzienniki HTTP pod kątem błędów 500
- Zapytania dotyczące dzienników konsoli
- Sprzęża tabele na
TimeGenerated
Uruchom poniższe zapytanie:
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;
W kolumnie ResultDescription
zobaczysz następujący błąd w tym samym czasie co błędy serwera internetowego:
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/
Komunikat stwierdza, że pamięć została wyczerpana w wierszu 20 z process.php
. Teraz potwierdzono, że aplikacja wygenerowała błąd podczas błędu HTTP 500. Przyjrzyjmy się kodowi, aby zidentyfikować problem.
Identyfikowanie błędu
W katalogu lokalnym otwórz process.php
wiersz i spójrz na wiersz 20.
imagepng($imgArray[$x], $filename);
Pierwszym argumentem jest $imgArray[$x]
zmienna przechowująca wszystkie pliki JPG (w pamięci) wymagające konwersji. imagepng
Jednak wymaga tylko przekonwertowania obrazu, a nie wszystkich obrazów. Wstępne ładowanie obrazów nie jest konieczne i może powodować wyczerpanie pamięci, co prowadzi do http 500s. Zaktualizujmy kod, aby załadować obrazy na żądanie, aby sprawdzić, czy rozwiązuje problem. Następnie ulepszysz kod, aby rozwiązać problem z pamięcią.
Naprawianie aplikacji
Lokalne aktualizowanie i ponowne wdrażanie kodu
Aby obsłużyć wyczerpanie pamięci, należy wprowadzić następujące zmiany 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);
}
Zatwierdź zmiany w narzędziu Git, a następnie wypchnij zmiany kodu na platformę Azure.
git commit -am "Load images on-demand in process.php"
git push azure main
Przechodzenie do aplikacji platformy Azure
Przejdź do http://<app-name>.azurewebsites.net
.
Konwertowanie obrazów nie powinno już powodować błędów HTTP 500.
Czyszczenie zasobów
W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie będą raczej potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w usłudze Cloud Shell:
az group delete --name myResourceGroup
Wykonanie tego polecenia może potrwać około minutę.
Usuń ustawienie diagnostyczne za pomocą następującego polecenia:
az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs
Które czynności umiesz wykonać:
- Skonfigurowano aplikację internetową za pomocą usługi Azure Monitor
- Wysłane dzienniki do usługi Log Analytics
- Używane zapytania dzienników do identyfikowania i rozwiązywania problemów z błędami aplikacji internetowej
Następne kroki
- Wykonywanie zapytań dotyczących dzienników za pomocą usługi Azure Monitor
- Rozwiązywanie problemów z usługą aplikacja systemu Azure w programie Visual Studio
- Analizowanie dzienników aplikacji w usłudze HDInsight
- Samouczek: uruchamianie testu obciążeniowego w celu zidentyfikowania wąskich gardeł wydajności w aplikacji internetowej