Python 2 SDK menyertakan library Appstats yang digunakan untuk membuat profil performa RPC (Remote Procedure Call) aplikasi Anda. RPC App Engine adalah panggilan jaringan dua arah antara aplikasi Anda dan App Engine Service API. Misalnya, semua panggilan API berikut adalah panggilan RPC:
- Panggilan Datastore seperti
ndb.get_multi()
,ndb.put_multi()
, ataundb.gql()
. - Panggilan Memcache seperti
memcache.get()
, ataumemcache.get_multi()
. - Panggilan Pengambilan URL seperti
urlfetch.fetch()
. - Panggilan Mail seperti
mail.send()
.
Mengoptimalkan atau men-debug aplikasi yang skalabel bisa menjadi tantangan karena banyak masalah dapat menyebabkan performa yang buruk atau biaya yang tidak terduga. Masalah ini sangat sulit untuk di-debug dengan sumber informasi biasa, seperti log atau statistik waktu permintaan. Sebagian besar permintaan aplikasi menghabiskan banyak waktu untuk menunggu panggilan jaringan sampai selesai sebagai bagian dari upaya memenuhi permintaan.
Agar aplikasi tetap berjalan cepat, Anda perlu mengetahui:
- Apakah aplikasi Anda melakukan panggilan RPC yang tidak perlu?
- Haruskah kami menyimpan data dalam cache, alih-alih melakukan panggilan RPC berulang untuk mendapatkan data yang sama?
- Apakah performa aplikasi Anda akan lebih baik jika beberapa permintaan dieksekusi secara paralel, bukan secara serial?
Library Appstats membantu Anda menjawab pertanyaan ini dan memverifikasi bahwa aplikasi Anda menggunakan panggilan RPC dengan cara yang paling efisien dengan memungkinkan Anda membuat profil panggilan RPC Anda. Dengan Appstats, Anda dapat melacak semua panggilan RPC untuk permintaan tertentu dan melaporkan waktu dan biaya setiap panggilan.
Mengoptimalkan penggunaan RPC aplikasi Anda juga dapat mengurangi tagihan Anda. Lihat Mengelola Resource Aplikasi.
Penyiapan
Tidak ada yang perlu didownload atau diinstal untuk mulai menggunakan Appstats. Anda hanya perlu mengonfigurasi aplikasi, men-deploy ulang, dan mengakses konsol Appstats seperti yang dijelaskan dalam langkah-langkah di bawah. Library Appstats akan menangani sisanya.
1. Menginstal perekam peristiwa
Untuk mencatat statistik tentang permintaan web, setiap pengendali permintaan untuk aplikasi Anda harus memanggil Appstats. Bergantung pada framework yang digunakan aplikasi Anda, pilih salah satu opsi berikut:
Pengendali permintaan WSGI
Untuk menggunakan Appstats dengan pengendali permintaan WSGI, termasuk framework WSGI seperti webapp2, Anda harus menggabungkan aplikasi WSGI dengan middleware appstats. Cara paling sederhana untuk melakukannya adalah dengan menentukan middleware WSGI untuk menggabungkan setiap aplikasi WSGI menggunakan
appengine_config.py
.Jika belum ada, buat file bernama
appengine_config.py
di direktori root aplikasi Anda. Tambahkan fungsi berikut ke file tersebut:Sebelum memanggil aplikasi WSGI, runtime akan mengimpor file ini dan memanggil fungsi
webapp_add_wsgi_middleware
, jika ditemukan.Lihat Konfigurasi Opsional di bawah untuk informasi selengkapnya tentang
appengine_config.py
.Framework Django
Untuk menginstal middleware Appstats di aplikasi Django, edit file
settings.py
Anda, dan tambahkan baris berikut untuk menjadi item pertama diMIDDLEWARE_CLASSES
:MIDDLEWARE_CLASSES = ( 'google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware', # ... )
Middleware Appstats harus menjadi item pertama, sehingga profiler dapat menyertakan middleware lain dalam statistiknya.
Middleware Django memanggil Appstats untuk merekam peristiwa, sebagaimana mestinya. Anda tidak perlu mengubah kode aplikasi lainnya.
2. Menetapkan jalur konsol
Konsol Appstats diakses dengan mengunjungi URL untuk aplikasi Anda di browser web. Anda harus menetapkan jalur URL dengan salah satu dari dua cara berikut:
URL Default
Untuk memetakan Appstats ke direktori default (
/_ah/stats/
), tambahkanappstats
bawaan ke fileapp.yaml
Anda:URL Kustom
Jika perlu memetakan Appstats ke direktori selain direktori default, Anda dapat menggunakan perintah
url
diapp.yaml
:- url: /stats.* script: google.appengine.ext.appstats.ui.app
3. Konfigurasi opsional
Anda dapat mengonfigurasi perilaku Appstats dengan menambahkan konten ke file appengine_config.py di direktori utama aplikasi Anda. Untuk contoh lengkap opsi konfigurasi, lihat file google/appengine/ext/appstats/sample_appengine_config.py
di SDK.
Beberapa hal yang perlu diketahui tentang appengine_config.py
:
- Jika pengendali permintaan mengubah
sys.path
, Anda harus melakukan modifikasi yang sama padasys.path
diappengine_config.py
, sehingga antarmuka web Appstats dapat melihat semua file.
Menampilkan biaya
AppStats dapat melacak biaya dan waktu RPC. Jika aplikasi Anda cukup cepat tetapi lebih mahal dari yang Anda harapkan, cari operasi yang berbiaya lebih dari yang Anda perkirakan. Untuk mengaktifkan pelacakan biaya, tetapkan appstats_CALC_RPC_COSTS = True
di file appengine_config.py
Anda.
4. Menguji Appstats dari server pengembangan
Anda dapat menguji penyiapan Appstats dengan server pengembangan. Jika mengonfigurasi jalur konsol untuk menggunakan URL default di atas, Anda dapat mengakses konsol di http://localhost:8080/_ah/stats/.
5. Deploy
Setelah merasa puas dengan penyiapan Appstats, deploy aplikasi Anda. Jika Anda mengonfigurasi jalur konsol untuk menggunakan URL default di atas, Anda dapat mengakses konsol di http://your_app_id.appspot.com/_ah/stats
.
Tur konsol Appstats
Konsol Appstats memberikan informasi yang sangat penting tentang panggilan RPC yang dilakukan, jalur URL yang diminta, histori permintaan terbaru, dan detail setiap permintaan:
Tabel Statistik RPC menampilkan statistik untuk setiap jenis RPC yang dibuat aplikasi Anda. Mengklik tombol plus akan memperluas entri untuk menampilkan pengelompokan berdasarkan permintaan jalur untuk RPC:
Tabel Statistik Jalur menampilkan statistik untuk setiap permintaan jalur yang dikirim ke aplikasi Anda. Mengklik tombol plus akan memperluas entri untuk menampilkan pengelompokan berdasarkan RPC untuk permintaan jalur:
Jika Anda telah mengaktifkan fitur pelacakan biaya API, biaya ini juga akan ditampilkan.
Tabel Histori Permintaan menampilkan data yang berkaitan dengan tiap permintaan. Mengklik tombol plus akan memperluas entri untuk menampilkan pengelompokan berdasarkan RPC. Mengklik link permintaan akan menampilkan linimasa untuk permintaan tersebut, termasuk waktu RPC individual:
Grafik Linimasa RPC menampilkan kapan panggilan RPC tertentu dilakukan dan berapa lama permintaan diproses. Kolom Total RPC menampilkan total waktu yang dihabiskan untuk menunggu panggilan RPC, dan kolom Total Keseluruhan menampilkan total waktu yang dihabiskan untuk memproses permintaan. Seperti yang Anda lihat dari linimasa di bawah, sebagian besar waktu dihabiskan untuk panggilan RPC. Inilah yang sering terjadi. Tab lainnya menampilkan informasi tambahan tentang permintaan tersebut. Saat menganalisis performanya, sangat penting untuk memahami dampak panggilan RPC terhadap waktu respons aplikasi Anda.
Dengan Interactive Playground, developer dapat memasukkan kode Python arbitrer ke dalam formulir web dan mengeksekusinya di dalam lingkungan aplikasi mereka.
Setelah membuka Appstats, klik link untuk Interactive Playground. Formulir dengan satu area teks akan ditampilkan. Masukkan kode Python arbitrer apa pun yang Anda suka di area teks, lalu kirimkan formulir tersebut untuk mengeksekusinya. Setiap hasil yang dicetak ke output standar akan ditampilkan di samping area teks, dan analisis Linimasa dari panggilan RPC yang dihasilkan oleh kode Anda akan ditampilkan.
Interactive Playground dapat diaktifkan atau dinonaktifkan. Di SDK, fitur ini diaktifkan secara default; di lingkungan produksi, fitur ini dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan baris berikut ke file
appengine_config.py
Anda:<pre suppresswarning="yes" class="prettyprint"> appstats_SHELL_OK = True </pre>
Cara kerja Duet AI
Appstats menggunakan hook API untuk menambahkan dirinya sendiri ke framework remote procedure call yang mendasari API layanan App Engine. Appstats ini mencatat statistik untuk semua panggilan API yang dilakukan selama pengendali permintaan, lalu menyimpan data dalam memcache, menggunakan namespace __appstats__
. Appstats menyimpan statistik untuk 1.000 permintaan terbaru. Data tersebut meliputi data ringkasan, masing-masing sekitar 200 byte, dan data detail, yang masing-masing bisa berukuran maksimal 100 KB. Anda dapat mengontrol jumlah detail yang disimpan dalam data detail. (Lihat Konfigurasi Opsional dan contoh file konfigurasi.)
Hook API menambahkan beberapa overhead ke pengendali permintaan. Appstats menambahkan pesan ke log di level "info" untuk melaporkan jumlah resource yang digunakan library Appstats itu sendiri. Baris log terlihat seperti ini:
<pre suppresswarning="yes" class="prettyprint">
INFO 2009-08-25 12:04:07,277 recording.py:290] Saved; key: __appstats__:046800, part: 160 bytes, full: 25278 bytes, overhead: 0.019 + 0.018; link: http://your_app_id.[REGION_ID].r.appspot.com/stats/detail?time=1234567890123
</pre>
Baris ini melaporkan kunci memcache yang diperbarui, ukuran data ringkasan (part
) dan detail (full
), serta waktu (dalam detik) yang dihabiskan untuk merekam informasi ini. Baris log mencakup link ke antarmuka administratif Appstats yang menampilkan data untuk peristiwa ini.