Appstats untuk Python 2

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(), atau ndb.gql().
  • Panggilan Memcache seperti memcache.get(), atau memcache.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.

Tonton video demo.

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:

    def webapp_add_wsgi_middleware(app):
        from google.appengine.ext.appstats import recording
        app = recording.appstats_wsgi_middleware(app)
        return app

    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 di MIDDLEWARE_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/), tambahkan appstats bawaan ke file app.yaml Anda:

    runtime: python27
    api_version: 1
    threadsafe: yes
    
    builtins:
    - appstats: on
    
    handlers:
    - url: .*
      script: main.app
    
  • URL Kustom

    Jika perlu memetakan Appstats ke direktori selain direktori default, Anda dapat menggunakan perintah url di app.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 pada sys.path di appengine_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:

    screenshot

  • 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:

    screenshot

    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:

    screenshot

  • 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.

    screenshot

  • 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.