Tutorial ini akan memandu Anda menjelajahi Google Stackdriver, yang memungkinkan Anda melakukan hal berikut dengan aplikasi Google Cloud Platform:
- Ambil Snapshot Debug di aplikasi yang berjalan di App Engine, Compute Engine, dan Container Engine.
- Lihat Log Aplikasi.
- Siapkan Metrik, Pantau, dan dapatkan pemberitahuan.
- Lacak panggilan API Anda dan dapatkan perincian tentang waktu respons dan potensi hambatan dalam kode Anda.
- Menambahkan titik log ke aplikasi yang sedang berjalan, tanpa perlu men-deploy aplikasi Anda. Ini adalah fitur yang benar-benar unik (dan semoga bermanfaat).
Dalam tutorial ini, kita akan melakukan hal-hal berikut dari awal:
- Buat Project Google Cloud Platform (khususnya App Engine)
- Menyiapkan Repositori Sumber Project Google Cloud Platform
- Gunakan sumber Aplikasi Python Buku Tamu standar yang tersedia dari GitHub
- Deploy kode
- Lihat cara mendapatkan Snapshot debug aplikasi yang sedang berjalan
- Melihat Logging dan Jejak Panggilan Aplikasi
- Menambahkan titik log ke aplikasi yang sedang berjalan. Fitur ini awalnya dibahas dalam postingan blog ini : Menambahkan Log Aplikasi ke aplikasi tanpa mulai ulang
Mari kita mulai.
Konten ini awalnya dibuat oleh Romin Irani dan diposting di sini.
Penyiapan lingkungan mandiri
Jika belum memiliki Akun Google (Gmail atau Google Apps), Anda harus membuatnya. Login ke Google Cloud Platform console (console.cloud.google.com) dan buat project baru:
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource Google Cloud.
Menjalankan melalui codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat bagian "pembersihan" di akhir dokumen ini).
Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai$300.
Google Cloud Shell
Dalam codelab ini, kita akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Mesin virtual berbasis Debian ini memuat semua alat pengembangan yang akan Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Ini berarti bahwa semua yang Anda perlukan untuk codelab ini adalah browser (ya, ini berfungsi di Chromebook).
Untuk mengaktifkan Google Cloud Shell, dari konsol developer, cukup klik tombol di sisi kanan atas (hanya perlu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan):
Kemudian, setujui persyaratan layanan dan klik link "Start Cloud Shell":
Setelah terhubung ke cloud shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID
Anda :
gcloud auth list
Output perintah
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika project belum ditetapkan karena beberapa alasan, cukup jalankan perintah berikut :
gcloud config set project <PROJECT_ID>
Mencari PROJECT_ID
Anda? Periksa ID yang Anda gunakan di langkah-langkah penyiapan atau cari di dasbor konsol:
PENTING: Terakhir, tetapkan konfigurasi project dan zona default:
gcloud config set compute/zone us-central1-f
Anda dapat memilih berbagai zona yang berbeda. Pelajari lebih lanjut di dokumentasi Region & Zona.
Periksa StackDriver API yang diaktifkan
Mari kita lihat API yang telah diaktifkan untuk project Anda. Gunakan kotak penelusuran untuk menemukan Dasbor API seperti yang ditunjukkan di bawah.
Amati API tertentu yang telah diaktifkan untuk project Anda :
Setiap project Google Cloud Platform menawarkan hosting Git pribadi, tetapi pertama-tama kita perlu membuat repositori default untuk digunakan. Buka Source Repositories menggunakan kotak penelusuran konsol :
Klik "CREATE REPOSITORY" untuk membuat repositori kode baru bernama "default" :
Dengan menggunakan Cloud Shell, kita akan meng-clone direktori ini ke instance Google Cloud Shell. Untuk melakukannya, mari kita buat terlebih dahulu direktori di instance Google Cloud Shell dan buka direktori tersebut seperti yang ditunjukkan di bawah (contoh output):
mkdir stackdriver-demo
cd stackdriver-demo/
Sekarang, kita dapat meng-clone repositori default di sini melalui perintah gcloud seperti yang ditunjukkan di bawah:
gcloud source repos clone default
Ini adalah output konsol yang akan Anda lihat :
Cloning into '/home/gcp123_student/default'...
warning: You appear to have cloned an empty repository.
Project [qwiklabs-gcp-1234abc1234] repository [default] was cloned to [/home/gcp123_student/default].
Bagus! Mari kita luangkan waktu sejenak untuk mempelajari lebih dalam remote git yang telah disiapkan. Hal ini tidak harus terjadi, tetapi hanya untuk membantu Anda lebih memahami apa yang terjadi di balik layar.
Buka direktori default yang dibuat dan jalankan perintah git remote -v
seperti yang ditunjukkan di bawah
cd default
git remote -v
Ini adalah output konsol yang akan Anda lihat, yang kurang lebih seperti ini:
origin https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default (fetch)
origin https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default (push)
Anda dapat melihat bahwa ini mengarah dengan benar ke Repositori Git yang terkait dengan Project GCP kita.
Tarik aplikasi Buku Tamu dari GitHub
Aplikasi yang akan kita gunakan adalah aplikasi App Engine standar bernama Guestbook dan tersedia di repositori GitHub Google Cloud Platform resmi. Aplikasi ini juga merupakan bagian dari dokumentasi resmi untuk memulai. Project GitHub tersedia di : https://github.com/GoogleCloudPlatform/appengine-guestbook-python
Sekarang kita akan menarik kode ini ke instance Cloud Shell. Perintah dan output-nya ditampilkan di sini :
git pull https://github.com/GoogleCloudPlatform/appengine-guestbook-python
Ini adalah output konsol yang akan Anda lihat :
remote: Counting objects: 485, done. remote: Total 485 (delta 0), reused 0 (delta 0), pack-reused 485 Receiving objects: 100% (485/485), 436.42 KiB | 163.00 KiB/s, done. Resolving deltas: 100% (195/195), done. From https://github.com/GoogleCloudPlatform/appengine-guestbook-python * branch HEAD -> FETCH_HEAD
Sekarang kita memiliki semua kode secara lokal di instance Google Cloud Shell. Anda dapat melihat berbagai file yang telah ditarik dari project Github.
Kirim kode saat ini menggunakan Cloud Shell ke Repositori Git Project
Sekarang mari kita kirimkan kode ini ke repositori Git Project GCP, sehingga kita dapat menetapkan titik henti sementara, titik log, dan lainnya untuk kode kita. Perhatikan bahwa ini bukan langkah wajib karena Anda dapat berintegrasi langsung dengan GitHub, komputer lokal, dan cara lain untuk menautkan kode sumber.
Namun, untuk tujuan kita di sini, kita akan mengirimkan kode ini ke Repositori Git Project GCP. Hal ini dilakukan melalui perintah git push standar seperti yang ditunjukkan di bawah:
git push origin master
Ini adalah output konsol yang akan Anda lihat :
Counting objects: 485, done. Compressing objects: 100% (280/280), done. Writing objects: 100% (485/485), 436.42 KiB | 0 bytes/s, done. Total 485 (delta 195), reused 485 (delta 195) remote: Storing objects: 100% (485/485), done. remote: Processing commits: 100% (152/152), done. To https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default * [new branch] master -> master
Sekarang, kembali ke Konsol Cloud GCP Anda dan khususnya ke bagian Development. Klik Source Code dan untuk repositori default, Anda akan dapat melihat semua file project. Contoh output ditampilkan di bawah:
Sekarang kita siap men-deploy aplikasi Guestbook App Engine. Untuk men-deploy aplikasi, pastikan Anda berada di Google Cloud Shell dan di direktori default seperti yang telah kita lakukan selama ini. Gunakan perintah gcloud app deploy
seperti yang ditunjukkan di bawah:
gcloud app deploy --version 1
Saat diminta untuk memilih region, pilih [1] us-east1.
Ini adalah output konsol yang akan Anda lihat :
You are about to deploy the following services: — qwiklabs-gcp-1234abc1234/default/1 (from [/home/gcp123-student/default/app.yaml]) Deployed URL: [https://qwiklabs-gcp-1234abc1234.appspot.com] Do you want to continue (Y/n)? Y Beginning deployment of service [default]... File upload done. Updating service [default]...done. Deployed service [default] to https://qwiklabs-gcp-1234abc1234.appspot.com]
Perhatikan bahwa kita memberikan parameter versi ke perintah deploy aplikasi. Kita memberinya nilai "1"
.
Karena aplikasi Guestbook menggunakan Google Cloud Datastore untuk persistensi, kita perlu memperbarui indeks Datastore. Indeks ditentukan dalam file index.yaml
dan kita cukup menggunakan perintah gcloud datastore create-indexes
seperti yang ditunjukkan di bawah:
gcloud datastore create-indexes index.yaml
Ini adalah output konsol yang akan Anda lihat :
You are about to update the following configurations: — qwiklabs-gcp-1234abc1234/index From: [/home/gcp123_student/default/index.yaml] Do you want to continue (Y/n)? Y
Indeks Datastore mungkin memerlukan waktu beberapa saat untuk diperbarui. Untuk memeriksa statusnya, telusuri "Datastore indexes" dan klik Indexes. Saat indeks sedang dibuat, Anda akan melihat Status dengan nilai "Mengindeks" seperti yang ditunjukkan di bawah:
Kita dapat memeriksa apakah Aplikasi dengan Versi 1 telah di-deploy dan tersedia dengan membuka Compute → App Engine, lalu mengklik Versions seperti yang ditunjukkan di bawah ini:
Semuanya akan terlihat baik sekarang dan Anda dapat melihat project dengan membuka https://<PROJECT_ID>.appspot.com
. Sekali lagi, indeks datastore mungkin memerlukan waktu beberapa menit untuk siap, jadi jika aplikasi menampilkan error (misalnya: Error Server Internal), coba lagi beberapa menit kemudian.
Sekarang, gunakan aplikasi dengan login dan membuat beberapa entri buku tamu seperti yang ditunjukkan di bawah ini:
Bagus! Sekarang kita siap mempelajari fitur Stackdriver.
Pertama, mari kita lihat cara mengambil snapshot aplikasi yang sedang berjalan. Snapshot berguna jika Anda ingin men-debug bagian kode tertentu, memeriksa variabel, dan lainnya. Semua ini terjadi saat aplikasi Anda masih ditayangkan. Hal ini sangat membantu jika Anda mendapatkan laporan masalah pada aplikasi dan ingin mencoba men-debug serta melihat apa yang terjadi pada aplikasi, memeriksa banyak variabel, mengambil snapshot secara bersyarat, dan lainnya.
Mari kita lakukan sekarang untuk aplikasi Buku Tamu. Kita akan meminta snapshot jika ada yang meminta halaman beranda dan khususnya kita menginginkannya di tempat yang mengambil daftar ucapan yang saat ini ada di Datastore.
Kode untuk ini ada dalam file guestbook.py
. Secara khusus, kita tertarik untuk mulai memeriksa kode saat runtime setelah kode mengambil daftar ucapan dari datastore. Hal ini dilakukan di Baris #72. Jadi, kita cukup menempatkan titik henti sementara di Baris 74, sehingga kita tahu bahwa #72 akan dieksekusi.
Untuk melakukannya, klik "Debug" dari tampilan versi AppEngine atau buka Stackdriver → Debug . Tindakan ini akan menampilkan layar yang ditunjukkan di bawah. Yang perlu Anda lakukan adalah memilih file (guestbook.py
) di sebelah kiri, lalu klik nomor baris seperti yang ditunjukkan.
Hal ini akan menampilkan pesan yang ditandai dalam kotak merah di atas, bahwa snapshot sedang menunggu untuk dipicu. Sekarang, yang perlu kita lakukan adalah membuka halaman di
https://<PROJECT_ID>.appspot.com
.
Setelah melakukannya, snapshot akan diaktifkan dan Anda akan melihat bagian Variables dan Call stack terisi seperti yang ditunjukkan di bawah. Lihat cara variabel ditampilkan dan Anda dapat meluaskannya untuk memeriksa nilai. Ini sangat berguna.
Misalnya, jika Anda meluaskan variabel salam, Anda akan melihat bahwa variabel tersebut memiliki catatan yang sesuai dengan jumlah entri buku tamu yang telah Anda buat.
Salah satu fitur yang sangat berguna adalah mengambil ulang snapshot kapan saja. Cukup klik ikon kamera kapan saja dan kamera akan menunggu lagi hingga snapshot diambil seperti yang ditunjukkan di bawah:
Anda dapat menggunakan kolom Ekspresi seperti yang ditunjukkan di bawah untuk melacak variabel tertentu. Misalnya, kita tahu bahwa kita memiliki salam variabel dan kita tertarik untuk memeriksa nilainya, saat snapshot diambil. Kita dapat memasukkan variabel salam seperti yang ditunjukkan pada screenshot di bawah. Saat snapshot di-hit, snapshot akan diisi dengan nilai seperti yang ditunjukkan.
Jika Anda ingin snapshot diaktifkan hanya pada kondisi tertentu, Anda dapat menggunakan kolom Kondisi seperti yang ditunjukkan di bawah. Di sini, kita menyatakan bahwa snapshot hanya boleh terjadi jika jumlah salam lebih besar dari 1. Anda dapat bereksperimen dengan fitur ini jika ingin.
Sangat penting untuk memastikan performa aplikasi web Anda memenuhi persyaratan yang telah Anda tetapkan. Stackdriver Trace adalah alat utama yang membantu Anda memahami latensi di aplikasi Anda.
Fitur ini diaktifkan secara default untuk semua aplikasi App Engine dan memberikan detail performa yang sangat berguna untuk semua endpoint kami beserta perincian di berbagai panggilan.
Dalam kasus ini, kita telah membuka halaman beranda ("/") dan melihat / menambahkan entri buku tamu. Hal ini sudah cukup bagi Trace untuk memberi tahu kita lebih lanjut tentang latensi. Cukup buka Ringkasan Stackdriver Traces dan kita akan melihat screenshot seperti yang ditunjukkan di bawah. Perhatikan rekaman aktivitas terbaru dan latensinya.
Jika kita mengklik salah satu rekaman aktivitas, yaitu mengklik link URI, rekaman aktivitas mendetail akan ditampilkan seperti di bawah ini:
Perhatikan bagaimana alat ini dapat memberikan perincian latensi dan panggilan mana yang membutuhkan waktu paling lama. Dari visualisasi di atas, Anda dapat melihat bahwa kueri datastore memerlukan waktu. Mungkin salah satu opsi yang dapat dipertimbangkan adalah menyimpan data dalam cache untuk mengurangi hambatan tersebut. Sekali lagi, semua ini bergantung pada aplikasi Anda dan hal ini akan sangat berguna untuk menentukan area mana dalam rekaman panggilan yang mungkin memerlukan beberapa refaktorisasi.
Anda dapat melihat log aplikasi kapan saja dengan membuka Stackdriver Logging (seperti yang ditunjukkan di bawah). Ada beberapa filter yang tersedia mulai dari berbagai Layanan GCP → Jenis Log → Tingkat Log → Tanggal dan lainnya.
Screenshot di bawah menunjukkan Log untuk aplikasi App Engine dan Versi 1 default.
Terakhir, mari kita lihat fitur yang akan membuat Anda bersemangat dengan berbagai kemungkinan yang ditawarkannya. Biasanya sebagai developer, kita melakukan yang terbaik untuk menempatkan pernyataan log dalam kode, men-deploy kode, lalu berharap log memberi tahu kita semua yang ingin kita ketahui.
Namun, kita tahu bahwa hal itu tidak cukup dan hanya saat men-debug kita menyadari bahwa mungkin kita seharusnya menempatkan beberapa pernyataan log di sana-sini. Alur kerja biasanya adalah mengubah kode, memasukkan pernyataan log tambahan, men-deploy ulang, dan memantau.
Ini tidak masalah, tetapi bagaimana jika Anda dapat menambahkan pernyataan log ini (sekarang kita sebut titik log) ke aplikasi yang sedang berjalan. Artinya, kita tidak perlu melalui proses menghentikan aplikasi, mengubah kode, dan men-deploy ulang. Sebagai gantinya, kita dapat mengelola daftar titik log dari luar aplikasi menggunakan dukungan titik log.
Masih dari dalam Cloud Shell, mari kita periksa daftar titik log saat ini yang telah kita konfigurasi (yang jelas harus 0). Hal ini dilakukan melalui perintah gcloud
seperti yang ditunjukkan di bawah:
gcloud debug logpoints list
Ini adalah output konsol yang akan Anda lihat :
Debug target not specified. Using default target: default-1 Listed 0 items.
Sekarang, kita akan menambahkan titik log ke aplikasi yang sedang berjalan. Untuk menambahkan titik log, kita perlu melakukan hal berikut:
- Identifikasi file kode sumber dan nomor baris tempat kita ingin menambahkan titik log.
- Identifikasi pesan log. Pesan log ini dapat berupa hardcode atau bahkan ekspresi.
Dalam kasus ini, kita akan menambahkan titik log ke file guestbook.py di baris #74 melalui perintah pembuatan titik log seperti yang ditunjukkan di bawah:
gcloud debug logpoints create guestbook.py:74 "Fetched greetings from Datastore. Count of greetings : {len(greetings)}"
Ini adalah output konsol yang akan Anda lihat :
Debug target not specified. Using default target: default-1 — id: 53538243519d4-f9a0-bdbce location: guestbook.py:74 logLevel: INFO logMessageFormat: Fetched greetings from Datastore. Count of greetings : {len(greetings)} condition: None status: ACTIVE
Kita telah menyediakan filename:linenumber
dan pesan log di atas. Perhatikan bahwa pesan log kita juga berisi ekspresi yang akan mencetak jumlah ucapan yang kita ambil dari datastore.
Perintah akan kembali dengan pesan bahwa titik log telah ditambahkan. Screenshot dari Cloud Shell kami ditampilkan di bawah:
Sekarang, jika Anda menjalankan perintah daftar titik log, Anda akan melihat output berikut:
gcloud debug logpoints list
Ini adalah output konsol yang akan Anda lihat :
Debug target not specified. Using default target: default-1 STATUS LOCATION CONDITION LOG_LEVEL LOG_MESSAGE_FORMAT ID ACTIVE guestbook.py:74 INFO Fetched greetings from Datastore. Count of greetings : {len(greetings)} 53538243519d4-f9a0-bdbce
Untuk melihatnya beraksi, kita dapat membuka halaman beranda di https://<PROJECT_ID>.appspot.com
sekali lagi. Tindakan ini akan memanggil kode dan pada gilirannya titik log kita. Ingat, tindakan ini akan dicatat secara default di Log Aplikasi kita. Jadi, yang perlu kita lakukan adalah membuka Stackdriver Logging sekali lagi seperti yang ditunjukkan di bawah ini:
Klik permintaan tertentu dan Voila! Dalam detailnya, Anda akan melihat titik log kami diaktifkan dan pesan log ditampilkan.
Semoga Anda menikmati tutorial ini. Dokumen ini hanya membahas beberapa kemampuan yang ditawarkan platform Stackdriver. Ada banyak hal lain yang dapat dijelajahi. Lihat blog Romin Irani (penulis asli codelab ini) di https://rominirani.com/ untuk melihat tutorial Google Cloud Platform lainnya.
Anda juga dapat melihat codelab lain yang berjudul "Menggunakan pemantauan dan pencatatan log Stackdriver untuk mendapatkan visibilitas yang lebih baik tentang kondisi aplikasi Anda".
Jika Anda memiliki masukan atau ingin melaporkan masalah terkait codelab ini, gunakan link "Temukan bug" di kiri bawah halaman ini.