Öğretici: App Service ile Azure İzleyici

Bu öğreticide, Azure İzleyici kullanarak bir App Service uygulamasının sorunlarını Azure İzleyici. Örnek uygulama, belleği tüketen ve HTTP 500 hatalarına neden olan kodu içerir. Bu nedenle, bu kodu kullanarak sorunu Azure İzleyici. Bitirdikten sonra, Azure İzleyici ile tümleştirilmiş bir Linux üzerinde App Service üzerinde çalışan bir Azure İzleyici.

Azure İzleyici, bulut ve şirket içi ortamlarından telemetri toplama, analiz etme ve bu telemetri üzerinde işlem yapmak için kapsamlı bir çözüm teslim ederek uygulama ve hizmetlerinizin kullanılabilirliğini ve performansını en üst düzeye çıkarmaktadır.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Web uygulamasını Azure İzleyici
  • 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 ücretsiz bir hesap oluşturun.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdakilere ihtiyacınız olacak:

Azure kaynakları oluşturma

İlk olarak, bu öğreticide kullanmak üzere örnek bir uygulama kurulumu yapmak için birkaç komutu yerel olarak çalıştırabilirsiniz. Komutlar Azure kaynaklarını, dağıtım kullanıcılarını ve örnek uygulamayı Azure'a dağıtır. Dağıtım kullanıcısı oluşturma işlemi kapsamında 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|7.3" --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

Yapılandırma Azure İzleyici

Log Analytics Çalışma Alanı Oluşturma

Örnek uygulamayı Azure App Service dağıtmış olduğunuza göre, sorunlar ortaya çıktığında uygulamayı gidermek için izleme özelliğini yapılandırabilirsiniz. Azure İzleyici 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ıza ek yapılandırmayı yapılandırmak için Azure İzleyici Log Analytics çalışma alanı oluşturabilirsiniz.

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 etmek Azure İzleyici Günlükler'e belirli Azure hizmetlerinin ölçümlerini toplamak için kullanılabilir. Bu öğreticide, 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ın. ve <app-name> değerlerini <workspace-name> değerleriyle değiştirin.

Not

İlk iki komut olan resourceID ve workspaceID , komutunda kullanılacak az monitor diagnostic-settings create 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}]'

Uygulama sorunlarını giderme

http://<app-name>.azurewebsites.net adresine gidin.

Örnek uygulama ImageConverter, dahil edilen görüntüleri 'den 'ye JPG PNG dönüştürür. Bu öğreticinin koduna kasıtlı olarak bir hata yerleştirilmiştir. Yeterli görüntü seçersiniz, uygulama görüntü dönüştürme sırasında bir HTTP 500 hatası üretir. Imagine senaryo, geliştirme aşamasında dikkate alınmadı. Hatayı gidermek için Azure İzleyici'i kullansanız iyi olur.

Uygulamanın çalıştığını doğrulama

Görüntüleri dönüştürmek için seçeneğine Tools tıklayın ve öğesini Convert to PNG seçin.

'Araçlar'a tıklayın ve 'PNG'ye Dönüştür' öğesini seçin

İlk iki görüntü seçin ve seçeneğine convert tıklayın. Bu, başarıyla dönüştürülür.

İlk iki görüntü seçin

Uygulamayı bozma

İki görüntü başarıyla dönüştürerek uygulamayı doğruladıktan sonra ilk beş görüntüye dönüştürmeye çalışabilirsiniz.

İlk beş görüntü dönüştürme

Bu eylem başarısız olur ve HTTP 500 geliştirme sırasında test edilmemiş bir hata üretir.

Dönüştürme bir HTTP 500 hatasına neden olur

Günlük sorgusunu kullanarak günlük Azure İzleyici görüntüleme

Şimdi Log Analytics çalışma alanında hangi günlüklerin kullanılabilir olduğunu göreceğiz.

Çalışma alanınıza erişmek için bu Log Analytics çalışma alanı bağlantısına Azure portal.

Aşağıdaki Azure portal Log Analytics çalışma alanını seçin.

Günlük sorguları

Günlük sorguları, Günlükler'de toplanan verilerin değerini tam olarak uygulamanıza Azure İzleyici olur. Günlük sorgularını kullanarak hem AppServiceHTTPLogs hem de AppServiceConsoleLogs günlüklerini tanımlayabilirsiniz. Günlük sorguları hakkında daha fazla bilgi için bkz. günlük sorgusuna genel bakış.

Günlük sorgusuyla AppServiceHTTPLogs'u görüntüleme

Uygulamaya eriştiğimize göre, http istekleriyle ilişkilendirilmiş olan ve içinde bulunan verileri AppServiceHTTPLogs görüntülebilirsiniz.

  1. Sol Logs gezinti bölmesinden tıklayın.

Log Anlytics Worksace Logs

  1. için arama appservice ve çift AppServiceHTTPLogs tıklama.

Log Analytics Çalışma Alanı Tabloları

  1. Run öğesine tıklayın.

LOG Analytics Çalışma Alanı App Service HTTP Günlükleri

Sorgu AppServiceHTTPLogs son 24 saat içinde tüm istekleri döndürür. sütunu ScStatus HTTP durumunu içerir. Hataları HTTP 500 tanılamak için ScStatus 500 ile sınırlandırın ve aşağıda gösterildiği gibi sorguyu çalıştırın:

AppServiceHTTPLogs
| where ScStatus == 500

Günlük sorgusuyla AppServiceConsoleLogs'u görüntüleme

HTTP 500'leri onaylandıktan sonra uygulamanın standart çıktısına/hatalarına göz atabilirsiniz. Bu günlükler 'AppServiceConsoleLogs' içinde bulunur.

(1) Yeni + sorgu oluşturmak için tıklayın.

(2) Tabloya çift tıklayın AppServiceConsoleLogs ve Run tıklayın.

Beş görüntü dönüştürülmesi sunucu hatalarına neden olduğu için, aşağıda da olduğu gibi hataları filtreleerek uygulamanın hata yazarak ResultDescription hata olup olamayacaklarını görebilirsiniz:

AppServiceConsoleLogs |
where ResultDescription  contains "error" 

sütununda ResultDescription aşağıdaki hatayı alı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ılın

Artık hem HTTP 500'leri hem de standart hataları belirledik, bu iletiler arasında bağıntı olup oImay olduğunu onaylamanız gerekir. Ardından, zaman damgasını temel alarak tabloları bir araya TimeGenerated getirdisiniz.

Not

Sizin için aşağıdakini yapar bir sorgu hazırlanmıştır:

  • HTTPLog'ları 500 hataları için filtreler
  • Konsol günlüklerini sorgular
  • Tabloları üzerinde birleştirme 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;

sütununda, ResultDescription web sunucusu hataları ile aynı anda aşağıdaki hatayı alı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, 20. satırda belleğin tükenmiş olduğunu ifade process.php ediyor. Uygulamanın HTTP 500 hatası sırasında bir hata ürettiğini onayladık. Şimdi sorunu tanımlamak için koda göz atabilirsiniz.

Hatayı belirleme

Yerel dizinde, 'i 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ürmesi gereken tüm JPG'leri (bellek içinde) tutan bir değişkendir. Ancak yalnızca imagepng görüntünün dönüştürülmesi gerekir ve tüm görüntüler dönüştürülmesi gerekir. Görüntülerin önceden yüklenmesi gerekli değildir ve bellek tükenmesi nedeniyle HTTP 500'lere neden olabilir. Şimdi kodu isteğe bağlı görüntüleri yükecek şekilde güncelleştirecek ve sorunu çözecek şekilde bakalım. Ardından, bellek sorununu çözmek için kodu geliştirebilirsiniz.

Uygulamayı onarma

Kodu yerel makinede güncelleştirme ve yeniden dağıtma

process.phpBellek tükenmesi 'ni işlemek için aşağıdaki değişiklikleri yapın:

<?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 gidin

http://<app-name>.azurewebsites.net adresine gidin.

Görüntülerin dönüştürülmesi, HTTP 500 hatalarını daha uzun bir şekilde üretmemelidir.

Azure App Service’te çalışan PHP uygulaması

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.

Aşağıdaki komutla tanılama ayarını silin:

az monitor diagnostic-settings delete --resource $resourceID -n myMonitorLogs

Öğrendikleriniz:

  • Azure Izleyici ile bir Web uygulaması yapılandırıldı
  • Günlükler Log Analytics gönderildi
  • Web uygulaması hatalarını tanımlamak ve sorunlarını gidermek için kullanılan günlük sorguları

Sonraki adımlar