Bagikan melalui


Tutorial: Memecahkan masalah aplikasi App Service dengan Azure Monitor

Tutorial ini memperlihatkan cara memecahkan masalah aplikasi App Service menggunakan Azure Monitor. Aplikasi sampel mencakup kode yang dimaksudkan untuk menguras memori dan memicu kesalahan HTTP 500, sehingga Anda dapat mendiagnosis dan memperbaiki masalah menggunakan Azure Monitor. Setelah selesai, Anda memiliki contoh aplikasi yang berjalan di App Service di Linux yang terintegrasi dengan Azure Monitor.

Azure Monitor memaksimalkan ketersediaan dan performa aplikasi dan layanan Anda dengan memberikan solusi komprehensif untuk mengumpulkan, menganalisis, dan bertindak berdasarkan telemetri dari lingkungan cloud dan lokal Anda.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Mengonfigurasi aplikasi web dengan Azure Monitor
  • Mengirim log konsol ke Analitik Log
  • Menggunakan kueri Log untuk mengidentifikasi dan memecahkan masalah kesalahan aplikasi web

Anda dapat mengikuti langkah-langkah dalam tutorial ini di macOS, Linux, Windows.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda perlu:

Membuat sumber daya Azure

Pertama, Anda menjalankan beberapa perintah secara lokal untuk menyiapkan aplikasi sampel untuk digunakan dengan tutorial ini. Perintah tersebut membuat sumber daya Azure, membuat pengguna penyebaran, dan menyebarkan aplikasi sampel ke Azure. Anda diminta untuk memasukkan kata sandi sebagai bagian dari pembuatan pengguna penyebaran.

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

Mengonfigurasi Microsoft Azure Monitor

Membuat Ruang Kerja Analitik Log

Setelah menyebarkan aplikasi sampel ke Azure App Service, Anda mengonfigurasi kemampuan pemantauan untuk memecahkan masalah aplikasi saat masalah muncul. Azure Monitor menyimpan data log di ruang kerja Analitik Log. Ruang kerja adalah kontainer yang menyertakan informasi data dan konfigurasi.

Dalam langkah ini, Anda membuat ruang kerja Analitik Log untuk mengonfigurasi Azure Monitor dengan aplikasi Anda.

az monitor log-analytics workspace create --resource-group myResourceGroup --workspace-name myMonitorWorkspace

Membuat pengaturan diagnostik

Pengaturan diagnostik dapat digunakan untuk mengumpulkan metrik layanan Azure tertentu ke dalam Log Azure Monitor untuk analisis dengan data pemantauan lainnya menggunakan kueri log. Untuk tutorial ini, Anda mengaktifkan server web dan log kesalahan/output standar. Lihat jenis log yang didukung untuk mengetahui daftar lengkap jenis dan deskripsi log.

Anda menjalankan perintah berikut untuk membuat pengaturan diagnostik untuk AppServiceConsoleLogs (output/kesalahan standar) dan AppServiceHTTPLogs (log server web). Ganti <nama-aplikasi> dan <nama-ruangkerja> dengan nilai Anda.

Catatan

Dua perintah pertama, resourceID dan workspaceID, adalah variabel yang akan digunakan dalam perintah az monitor diagnostic-settings create. Lihat Membuat pengaturan diagnostik menggunakan Azure CLI untuk informasi selengkapnya tentang perintah ini.

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}]'

Memecahkan masalah aplikasi

Telusuri http://<app-name>.azurewebsites.net.

Contoh aplikasi, ImageConverter, mengonversi gambar yang disertakan dari JPG ke PNG. Bug telah sengaja ditempatkan dalam kode untuk tutorial ini. Jika Anda memilih gambar yang cukup, aplikasi akan menghasilkan kesalahan HTTP 500 selama konversi gambar. Bayangkan skenario ini tidak dipertimbangkan selama fase pengembangan. Anda akan menggunakan Azure Monitor untuk memecahkan masalah kesalahan.

Memverifikasi bahwa aplikasi berfungsi

Untuk mengonversi gambar, klik Tools dan pilih Convert to PNG.

Klik Alat dan pilih Konversikan ke PNG

Pilih dua gambar pertama dan klik convert. Ini berhasil dikonversi.

Pilih dua gambar pertama

Merusak aplikasi

Sekarang setelah Anda memverifikasi aplikasi dengan berhasil mengonversi dua gambar, kami mencoba mengonversi lima gambar pertama.

Mengonversi lima gambar pertama

Tindakan ini gagal dan menyebabkan kesalahan HTTP 500 yang tidak diuji selama pengembangan.

Konversi akan menyebabkan kesalahan HTTP 500

Menggunakan kueri log untuk melihat log Azure Monitor

Mari kita lihat log apa yang tersedia di ruang kerja Analitik Log.

Klik tautan ruang kerja Analitik Log ini untuk mengakses ruang kerja Anda di portal Microsoft Azure.

Di portal Microsoft Azure, pilih ruang kerja Analitik Log.

Log kueri

Kueri log membantu Anda menerapkan sepenuhnya nilai data yang dikumpulkan dalam Log Azure Monitor. Anda menggunakan kueri log untuk mengidentifikasi log di AppServiceHTTPLogs dan AppServiceConsoleLogs. Lihat ringkasan kueri log untuk informasi selengkapnya tentang kueri log.

Melihat AppServiceHTTPLogs dengan kueri log

Setelah kita mengakses aplikasi, mari kita lihat data yang dikaitkan dengan permintaan HTTP, yang ditemukan di AppServiceHTTPLogs.

  1. Klik Logs dari navigasi sebelah kiri.

Log Ruang Kerja Analitik Log

  1. Cari appservice dan klik ganda AppServiceHTTPLogs.

Tabel Ruang Kerja Analitik Log

  1. Klik Run.

Log HTTP App Service Ruang Kerja Analitik Log

Kueri AppServiceHTTPLogs menampilkan semua permintaan dalam 24 jam terakhir. Kolom ScStatus berisi status HTTP. Untuk mendiagnosis kesalahan HTTP 500, batasi ScStatus hingga 500 dan jalankan kueri, seperti yang diperlihatkan di bawah ini:

AppServiceHTTPLogs
| where ScStatus == 500

Melihat AppServiceConsoleLogs dengan kueri log

Setelah Anda mengonfirmasi HTTP 500, mari kita lihat output/kesalahan standar dari aplikasi. Log ini ditemukan di `AppServiceConsoleLogs'.

(1) Klik + untuk membuat kueri baru.

(2) Klik ganda tabel AppServiceConsoleLogs dan klik Run.

Karena mengonversi lima gambar mengakibatkan kesalahan server, Anda dapat mengetahui apakah aplikasi juga menulis kesalahan dengan memfilter ResultDescription untuk menemukan kesalahan, seperti yang ditunjukkan di bawah ini:

AppServiceConsoleLogs |
where ResultDescription  contains "error" 

ResultDescription Di kolom , Anda akan melihat kesalahan berikut:

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/

Menggabungkan AppServiceHTTPLogs dan AppServiceConsoleLogs

Setelah Anda mengidentifikasi HTTP 500 dan kesalahan standar, Anda perlu mengonfirmasi apakah ada korelasi antara pesan-pesan tersebut. Selanjutnya, Anda menggabungkan tabel berdasarkan tanda waktu, TimeGenerated.

Catatan

Kueri telah dipersiapkan untuk Anda yang melakukan tindakan berikut:

  • Memfilter HTTPLogs untuk menemukan kesalahan 500
  • Mengajukan kueri log konsol
  • Menggabungkan tabel di TimeGenerated

Jalankan kueri berikut:

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;

Di kolom ResultDescription, Anda akan melihat kesalahan berikut secara bersamaan dengan kesalahan server web:

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/

Pesan menyatakan bahwa memori telah habis pada baris 20 dari process.php. Sekarang Anda telah mengonfirmasi bahwa aplikasi menghasilkan kesalahan selama kesalahan HTTP 500. Mari kita lihat kode untuk mengidentifikasi masalah.

Identifikasi kesalahan

Di direktori lokal, buka process.php dan lihat baris 20.

imagepng($imgArray[$x], $filename);

Argumen pertama, $imgArray[$x], adalah variabel yang mempertahankan semua JPG (dalam memori) yang memerlukan konversi. Namun, hanya imagepng yang memerlukan gambar untuk dikonversi, bukan semua gambar. Gambar pra-muat tidak diperlukan dan mungkin menyebabkan habisnya memori, sehingga menimbulkan HTTP 500. Mari kita perbarui kode untuk memuat gambar sesuai permintaan untuk mengetahui apakah ini menyelesaikan masalah. Selanjutnya, Anda meningkatkan kode untuk mengatasi masalah memori.

Memperbaiki aplikasi

Perbarui secara lokal dan sebarkan ulang kode

Anda membuat perubahan berikut pada process.php untuk menangani habisnya memori:

<?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);
}

Terapkan perubahan di Git, lalu terapkan perubahan kode ke Azure.

git commit -am "Load images on-demand in process.php"
git push azure main

Menelusuri aplikasi Azure

Telusuri http://<app-name>.azurewebsites.net.

Mengonversi gambar tidak akan menghasilkan kesalahan HTTP 500 lagi.

Aplikasi PHP yang berjalan di Azure App Service

Membersihkan sumber daya

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell:

az group delete --name myResourceGroup

Perintah ini mungkin perlu waktu beberapa saat untuk dijalankan.

Hapus pengaturan diagnostik dengan perintah berikut:

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

Apa yang Anda pelajari:

  • Mengonfigurasi aplikasi web dengan Azure Monitor
  • Mengirim log ke Analitk Log
  • Menggunakan kueri Log untuk mengidentifikasi dan memecahkan masalah kesalahan aplikasi web

Langkah berikutnya