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:
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
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
.
Pilih dua gambar pertama dan klik convert
. Ini berhasil dikonversi.
Merusak aplikasi
Sekarang setelah Anda memverifikasi aplikasi dengan berhasil mengonversi dua gambar, kami mencoba mengonversi lima gambar pertama.
Tindakan ini gagal dan menyebabkan kesalahan HTTP 500
yang tidak diuji selama pengembangan.
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
.
- Klik
Logs
dari navigasi sebelah kiri.
- Cari
appservice
dan klik gandaAppServiceHTTPLogs
.
- Klik
Run
.
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.
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