Öğretici: Azure İzleyici ile App Service uygulamasında sorun giderme
Bu öğreticide, Azure İzleyici kullanarak App Service uygulamasında sorun giderme adımları gösterilmektedir. Örnek uygulama, belleği tüketmek ve HTTP 500 hatalarına neden olmak için kullanılan kodu içerir, böylece Azure İzleyici'yi kullanarak sorunu tanılayabilir ve düzeltebilirsiniz. İşiniz bittiğinde, Azure İzleyici ile tümleştirilmiş Linux üzerinde App Service üzerinde çalışan bir örnek uygulamanız vardır.
Azure İzleyici , bulut ve şirket içi ortamlarınızdan telemetri toplamak, analiz etmek ve üzerinde işlem gerçekleştirmek için kapsamlı bir çözüm sunarak uygulamalarınızın ve hizmetlerinizin kullanılabilirliğini ve performansını en üst düzeye çıkarır.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Azure İzleyici ile web uygulaması yapılandırma
- Konsol günlüklerini Log Analytics'e gönderme
- Web uygulaması hatalarını belirlemek ve gidermek için Günlük sorgularını kullanma
Bu öğreticideki adımları MacOS, Linux ve Windows üzerinde izleyebilirsiniz.
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Önkoşullar
Bu öğreticiyi tamamlamak için aşağıdakiler gerekir:
Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.
CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.
Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.
İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.
Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
Azure kaynakları oluşturma
İlk olarak, bu öğreticiyle kullanılacak örnek bir uygulama ayarlamak için yerel olarak birkaç komut çalıştırırsınız. Komutlar Azure kaynakları oluşturur, bir dağıtım kullanıcısı oluşturur ve örnek uygulamayı Azure'a dağıtır. Dağıtım kullanıcısının oluşturulmasının bir parçası olarak sağlanan parola istenir.
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
Azure İzleyici'yi yapılandırma
Log Analytics Çalışma Alanı Oluşturma
Örnek uygulamayı Azure Uygulaması Hizmeti'ne dağıttığınıza göre, artık sorun oluştuğunda uygulamayı gidermek için izleme özelliğini yapılandıracaksınız. Azure İzleyici günlük verilerini log Analytics çalışma alanında depolar. Çalışma alanı, veri ve yapılandırma bilgilerini içeren bir kapsayıcıdır.
Bu adımda, uygulamanızla Azure İzleyici'yi yapılandırmak için bir Log Analytics çalışma alanı oluşturursunuz.
az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace
Tanılama ayarı oluşturma
Tanılama ayarları, günlük sorgularını kullanarak diğer izleme verileriyle analiz için belirli Azure hizmetlerinin ölçümlerini Azure İzleyici Günlüklerine toplamak için kullanılabilir. Bu öğretici için web sunucusunu ve standart çıkış/hata günlüklerini etkinleştirirsiniz. Günlük türlerinin ve açıklamalarının tam listesi için desteklenen günlük türlerine bakın.
AppServiceConsoleLogs (standart çıkış/hata) ve AppServiceHTTPLogs (web sunucusu günlükleri) için tanılama ayarları oluşturmak için aşağıdaki komutları çalıştırırsınız. Uygulama-adı> ve< çalışma alanı-adı> değerleriniz ile değiştirin.<
Not
İlk iki komut resourceID
ve workspaceID
, az monitor diagnostic-settings create komutunda kullanılacak değişkenlerdir. Bu komut hakkında daha fazla bilgi için bkz . Azure CLI kullanarak tanılama ayarları oluşturma.
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}]'
Uygulamadaki sorunları giderme
http://<app-name>.azurewebsites.net
adresine göz atın.
ImageConverter örnek uygulaması, eklenen görüntüleri 'den'e JPG
PNG
dönüştürür. Bu öğretici için koda kasıtlı olarak bir hata yerleştirildi. Yeterli görüntü seçerseniz uygulama, görüntü dönüştürme sırasında bir HTTP 500 hatası oluşturur. Geliştirme aşamasında bu senaryonun göz önünde bulundurulmamış olduğunu düşünün. Hatayı gidermek için Azure İzleyici'yi kullanacaksınız.
Uygulamanın çalıştığını doğrulama
Resimleri dönüştürmek için öğesine tıklayın Tools
ve öğesini seçin Convert to PNG
.
İlk iki resmi seçin ve öğesine tıklayın convert
. Bu işlem başarıyla dönüştürülür.
Uygulamayı kesme
İki görüntüyü başarıyla dönüştürerek uygulamayı doğruladığınıza göre, ilk beş görüntüyü dönüştürmeye çalışıyoruz.
Bu eylem başarısız olur ve geliştirme sırasında test edilmedi bir HTTP 500
hata üretir.
Azure İzleyici günlüklerini görüntülemek için günlük sorgusunu kullanma
Log Analytics çalışma alanında hangi günlüklerin kullanılabildiğini görelim.
Azure portalında çalışma alanınıza erişmek için bu Log Analytics çalışma alanı bağlantısına tıklayın.
Azure portalında Log Analytics çalışma alanınızı seçin.
Günlük sorguları
Günlük sorguları, Azure İzleyici Günlüklerinde toplanan verilerin değerini tam olarak uygulamanıza yardımcı olur. Günlük sorgularını hem AppServiceHTTPLogs hem de AppServiceConsoleLogs içindeki günlükleri tanımlamak için kullanırsınız. Günlük sorguları hakkında daha fazla bilgi için günlük sorgusuna genel bakış bölümüne bakın.
Günlük sorgusuyla AppServiceHTTPLogs'ları görüntüleme
Uygulamaya erişdiğimize göre, içinde bulunan AppServiceHTTPLogs
HTTP istekleriyle ilişkili verileri görüntüleyelim.
- Sol gezinti bölmesinden tıklayın
Logs
.
- için
appservice
arama yapıp çift tıklayınAppServiceHTTPLogs
.
Run
’a tıklayın.
Sorgu, AppServiceHTTPLogs
son 24 saat içindeki tüm istekleri döndürür. Sütun ScStatus
HTTP durumunu içerir. Hataları tanılamak HTTP 500
için öğesini 500 ile sınırlayın ScStatus
ve sorguyu aşağıda gösterildiği gibi çalıştırın:
AppServiceHTTPLogs
| where ScStatus == 500
Günlük sorgusuyla AppServiceConsoleLogs'ları görüntüleme
HTTP 500'leri onayladığınıza göre, şimdi uygulamadan standart çıkışa/hatalara göz atalım. Bu günlükler 'AppServiceConsoleLogs' içinde bulunur.
(1) Yeni sorgu oluşturmak için tıklayın +
.
(2) Tabloya AppServiceConsoleLogs
çift tıklayın ve öğesine tıklayın Run
.
Beş görüntünün dönüştürülmesi sunucu hatalarıyla sonuçlandığından, uygulamanın aşağıda gösterildiği gibi hataları filtreleyerek hata yazıp ResultDescription
yazmadığı görebilirsiniz:
AppServiceConsoleLogs |
where ResultDescription contains "error"
ResultDescription
sütununda aşağıdaki hatayı görürsünüz:
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/
AppServiceHTTPLogs ve AppServiceConsoleLogs'a Katılma
Artık hem HTTP 500'leri hem de standart hataları tanımladığınıza göre, bu iletiler arasında bir bağıntı olup olmadığını onaylamanız gerekir. Ardından, zaman damgasına TimeGenerated
göre tabloları birleştirin.
Not
Aşağıdakiler için bir sorgu hazırlanmıştır:
- HTTPLogs'a 500 hatası için filtre uygular
- Konsol günlüklerini sorgular
- Üzerindeki tabloları birleştirir
TimeGenerated
Aşağıdaki sorguyu çalıştırın:
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
sütununda, web sunucusu hatalarıyla aynı anda aşağıdaki hatayı görürsünüz:
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/
İleti, belleğin 20 process.php
. satırında tükendiğini belirtir. Uygulamanın HTTP 500 hatası sırasında bir hata ürettiğini doğruladınız. Şimdi sorunu belirlemek için koda göz atalım.
Hatayı belirleme
Yerel dizinde öğesini açın process.php
ve 20. satıra bakın.
imagepng($imgArray[$x], $filename);
İlk bağımsız değişken olan $imgArray[$x]
, dönüştürmeye ihtiyaç duyan tüm JPG'leri (bellek içi) tutan bir değişkendir. Ancak, tüm görüntüleri değil yalnızca imagepng
görüntünün dönüştürülmesi gerekir. Görüntülerin önceden yüklenmesi gerekli değildir ve bellek tükenmesine neden olarak HTTP 500'lere yol açabilir. Sorunu çözip çözmediğini görmek için isteğe bağlı görüntüleri yüklemek için kodu güncelleştirelim. Ardından, bellek sorununu gidermek için kodu geliştirin.
Uygulamayı düzeltme
Kodu yerel makinede güncelleştirme ve yeniden dağıtma
Bellek tükenmesini işlemek için 'de aşağıdaki değişiklikleri process.php
yaparsınız:
<?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);
}
Değişikliklerinizi Git’e işleyin ve ardından kod değişikliklerini Azure’a gönderin.
git commit -am "Load images on-demand in process.php"
git push azure main
Azure uygulamasına göz atın
http://<app-name>.azurewebsites.net
adresine göz atın.
Görüntülerin dönüştürülmesi artık HTTP 500 hataları oluşturmamalıdır.
Kaynakları temizleme
Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:
az group delete --name myResourceGroup
Bu komutun çalıştırılması bir dakika sürebilir.
Tanılama ayarını aşağıdaki komutla silin:
az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs
Öğrendikleriniz:
- Azure İzleyici ile web uygulaması yapılandırma
- Log Analytics'e gönderilen günlükler
- Web uygulaması hatalarını belirlemek ve gidermek için kullanılan günlük sorguları