Tutorial ini akan memandu Anda mengikuti tur Google Stackdriver, yang memungkinkan Anda melakukan hal berikut dengan aplikasi Google Cloud Platform:
- Ambil Snapshot Debug dalam aplikasi Anda 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 bottleneck dalam kode Anda.
- Menambahkan titik log ke aplikasi yang sedang berjalan, tanpa perlu menerapkan aplikasi Anda. Ini adalah fitur yang benar-benar unik (dan mudah-mudahan berguna).
Dalam tutorial ini, kita akan melakukan hal berikut dari awal:
- Membuat Project Google Cloud Platform (khusus App Engine)
- Menyiapkan Repositori Sumber Project Google Cloud Platform
- Gunakan sumber Aplikasi Python Buku Tamu standar yang tersedia dari GitHub
- Men-deploy kode
- Lihat cara mendapatkan snapshot Debug aplikasi yang sedang berjalan
- Melihat Logging dan Trace Panggilan Aplikasi
- Menambahkan logpoint 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 Cloud Console 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 berjalan 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 waktu beberapa saat untuk penyediaan dan koneksi ke lingkungan):
Kemudian, setujui persyaratan layanan dan klik link "Mulai Cloud Shell"
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID
:
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 berikan 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 zona default dan konfigurasi project:
gcloud config set compute/zone us-central1-f
Anda dapat memilih berbagai zona yang berbeda. Pelajari lebih lanjut di dokumentasi Region &. Zona.
Lihat 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 kami perlu membuat repositori default terlebih dahulu untuk digunakan. Navigasikan ke Repositori Sumber menggunakan kotak penelusuran konsol :
Klik "BUAT REPOSITORI" untuk membuat repositori kode baru bernama "default" :
Dengan Cloud Shell, sekarang kita akan meng-clone direktori ini ke dalam instance Google Cloud Shell. Untuk melakukannya, pertama-tama mari kita buat direktori dalam instance Google Cloud Shell dan buka folder tersebut seperti yang ditunjukkan di bawah (contoh output):
mkdir stackdriver-demo
cd stackdriver-demo/
Sekarang, Anda dapat meng-clone repositori default di sini melalui perintah gcloud seperti yang ditunjukkan di bawah ini:
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 untuk mempelajari lebih lanjut remote git yang telah disiapkan. Hal ini tidak selalu diperlukan, melainkan sesuatu agar Anda dapat lebih memahami apa yang terjadi di balik layar.
Buka direktori default yang dibuat, lalu aktifkan perintah git remote -v
seperti yang ditunjukkan di bawah ini
cd default
git remote -v
Ini adalah output konsol yang akan Anda lihat 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 kami.
Mengambil 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 dalam instance Cloud Shell. Perintah dan outputnya 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
Kini semua kode sudah ada secara lokal di instance Google Cloud Shell. Anda dapat melihat berbagai file yang telah diambil dari project GitHub.
Mengirim kode saat ini menggunakan Cloud Shell ke Project Git Repository
Sekarang, mari kita kirim kode ini ke repositori Project GCP GCP, sehingga kita dapat menetapkan titik henti sementara, logpoint, dan lainnya untuk kode kita. Perhatikan bahwa ini bukan langkah yang wajib karena Anda dapat mengintegrasikan langsung dengan GitHub, mesin lokal Anda, dan cara lain untuk menautkan kode sumber Anda.
Namun, untuk keperluan kita di sini, kode ini akan kita kirim ke GCP Project Git Repository. Hal ini dilakukan melalui perintah git push standar seperti yang ditunjukkan di bawah ini:
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 Cloud Console GCP Anda dan khususnya ke bagian Pengembangan. Klik Kode Sumber dan untuk repositori default, Anda akan dapat melihat semua file project. Output sampelnya ditampilkan di bawah ini:
Sekarang kita sudah siap untuk men-deploy aplikasi Appbook Appbook kami. Untuk men-deploy aplikasi, pastikan Anda berada di Google Cloud Shell dan berada dalam direktori default seperti biasa. Gunakan perintah gcloud app deploy
seperti yang ditunjukkan di bawah ini:
gcloud app deploy --version 1
Saat diminta 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 telah memberikan parameter versi ke perintah deploy aplikasi. Kami memberi nilai "1"
.
Karena aplikasi Buku Tamu menggunakan Google Cloud Datastore untuk persistensi, kita perlu mengupdate indeks Datastore. Indeks ditentukan dalam file index.yaml
dan kita cukup menggunakan perintah gcloud datastore create-indexes
seperti yang ditunjukkan di bawah ini:
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
Mungkin perlu waktu agak lama untuk memperbarui indeks Datastore. Untuk memeriksa status, telusuri "Datastore index" dan klik Indeks. Saat indeks sedang dibuat, Anda akan melihat Status dengan nilai "Indexing" seperti yang ditunjukkan di bawah ini:
Kita dapat memeriksa apakah Aplikasi dengan Versi 1 di-deploy dan tersedia dengan membuka Compute → App Engine, lalu mengklik Versi seperti yang ditunjukkan di bawah ini:
Sekarang semuanya akan terlihat bagus dan Anda dapat melihat project Anda dengan membuka https://<PROJECT_ID>.appspot.com
. Mungkin diperlukan waktu beberapa menit hingga indeks datastore siap, jadi jika aplikasi menampilkan error (misalnya: Error Server Internal), coba lagi beberapa menit kemudian.
Sekarang mari kita gunakan aplikasi dengan masuk dan membuat beberapa entri buku tamu seperti yang ditunjukkan di bawah ini:
Bagus. Sekarang kita sudah siap untuk mendalami berbagai 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 banyak lagi. Semua ini terjadi saat aplikasi Anda masih ditayangkan. Ini sangat membantu jika Anda mendapatkan laporan masalah dengan aplikasi dan ingin mencoba men-debug dan melihat apa yang terjadi dengan aplikasi, memeriksa sekumpulan variabel, mengambil snapshot secara bersyarat, dan banyak lagi.
Mari kita lakukan sekarang untuk aplikasi Buku Tamu. Kita akan meminta ringkasan jika ada yang meminta halaman beranda dan secara khusus kita menginginkannya di mana mengambil daftar salam yang saat ini ada di Datastore.
Kode untuk metode ini ada di file guestbook.py
. Dan khususnya, kita tertarik untuk mulai memeriksa kode pada runtime setelah mengambil daftar salam dari datastore. Ini dilakukan di Baris #72. Jadi, kita bisa menempatkan titik henti sementara pada 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 ditampilkan di bawah. Yang perlu Anda lakukan adalah memilih file (guestbook.py
) di sebelah kiri, lalu klik nomor baris seperti yang ditunjukkan.
Tindakan ini akan menampilkan pesan yang ditandai dalam kotak merah di atas, yang menunggu snapshot dipicu. Sekarang, yang perlu kita lakukan adalah membuka halaman
https://<PROJECT_ID>.appspot.com
.
Setelah Anda melakukannya, snapshot akan diaktifkan dan Anda akan melihat bagian Variabel dan stack Panggilan terisi seperti yang ditampilkan di bawah ini. Lihat cara variabel ditampilkan dan Anda dapat memperluasnya untuk memeriksa nilainya. Ini sangat berguna.
Misalnya, jika Anda memperluas pada variabel salam, Anda akan melihat bahwa variabel tersebut memiliki data yang sesuai dengan jumlah entri buku tamu yang telah Anda buat.
Salah satu fitur yang sangat berguna adalah dengan mengambil ulang snapshot kapan saja. Cukup klik ikon kamera kapan saja dan sekali lagi Anda akan menunggu hingga snapshot mencapai seperti yang ditunjukkan di bawah ini:
Anda dapat menggunakan kolom Ekspresi seperti yang ditunjukkan di bawah untuk melacak variabel tertentu. Misalnya, kami tahu bahwa kami memiliki salam variabel dan tertarik untuk memeriksa nilainya, tepat saat snapshot tercapai. Kita dapat memasukkan variabel salam seperti yang ditunjukkan pada screenshot di bawah. Jika snapshot tercapai, nilai tersebut akan ditampilkan sesuai dengan yang ditampilkan.
Jika ingin snapshot diaktifkan hanya pada kondisi tertentu, Anda dapat menggunakan kolom Kondisi seperti yang ditunjukkan di bawah ini. Di sini kita dapat mengatakan bahwa snapshot harus terjadi hanya jika jumlah salam lebih dari 1. Lakukan eksperimen dengan alat ini jika diinginkan.
Sangat penting untuk memastikan bahwa performa aplikasi web Anda memenuhi persyaratan yang telah ditetapkan. Stackdriver Trace adalah alat utama yang membantu Anda memahami latensi dalam aplikasi.
Fitur ini diaktifkan secara default untuk semua aplikasi App Engine dan memberikan detail performa yang sangat berguna untuk semua endpoint kami beserta pemisahan di berbagai panggilan.
Dalam kasus ini, kita telah membuka halaman beranda ("/") dan melihat / menambahkan entri buku tamu. Ini memadai bagi Trace untuk memberi tahu kami lebih lanjut tentang latensi. Cukup buka Ringkasan Trace Stackdriver dan kita melihat screenshot seperti yang ditunjukkan di bawah ini. Perhatikan trace terbaru dan latensinya.
Jika kita mengklik salah satu trace, yaitu mengklik link URI, rekaman aktivitas tersebut akan menampilkan rekaman aktivitas mendetail seperti berikut:
Perhatikan, bagaimana hal tersebut dapat memberi kita pemisahan latensi dan panggilan mana yang paling banyak menghabiskan waktu. Anda dapat melihat dari visualisasi di atas bahwa kueri datastore memerlukan waktu. Mungkin salah satu pilihan yang harus dilihat adalah menyimpan data dalam cache untuk mengurangi bottleneck tersebut. Sekali lagi, semua ini bergantung pada aplikasi Anda dan akan sangat berguna untuk menentukan area mana dalam pelacakan panggilan yang mungkin memerlukan beberapa pemfaktoran ulang.
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 Default 1.
Terakhir, mari kita lihat fitur yang akan membuat Anda bersemangat tentang kemungkinan yang ditawarkannya. Biasanya sebagai developer kita berusaha sebaik mungkin untuk menempatkan laporan log dalam kode, men-deploy kode, lalu berharap bahwa log memberi tahu kita semua yang ingin kita ketahui.
Namun, kita tahu bahwa ini tidaklah cukup dan hanya pada proses debug, kita menyadari bahwa kita mungkin harus menempatkan beberapa laporan log lagi. Alur kerja biasa kemudian adalah memodifikasi kode Anda, dimasukkan ke dalam laporan log tambahan, deploy ulang, dan pantau.
Tidak masalah, tetapi bagaimana jika Anda dapat menambahkan laporan log ini (mari kita sebut logpoints sekarang) ke aplikasi yang sedang berjalan. Ini berarti kita tidak perlu menjalani proses penghentian aplikasi, mengubah kode, dan men-deploy ulang. Sebagai gantinya, kita dapat mengelola daftar logpoint dari luar aplikasi menggunakan dukungan logpoint.
Masih dari dalam Cloud Shell, mari kita periksa daftar logpoint saat ini yang telah kami konfigurasikan (yang jelas harus 0). Hal ini dilakukan melalui perintah gcloud
seperti yang ditunjukkan di bawah ini:
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 logpoint ke aplikasi yang sedang berjalan. Untuk menambahkan logpoint, kita perlu melakukan hal-hal berikut:
- Identifikasi file kode sumber dan nomor baris tempat kita ingin menambahkan logpoint.
- Identifikasi pesan log. Pesan log ini dapat di-hardcode atau bahkan ekspresi.
Dalam kasus ini, kita akan menambahkan logpoint ke file guestbook.py di baris #74 melalui perintah buat logpoint seperti yang ditunjukkan di bawah ini:
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 memberikan filename:linenumber
dan pesan log di atas. Perhatikan bahwa pesan log kami juga berisi ekspresi yang akan mencetak jumlah salam yang kami ambil dari datastore.
Perintah ini akan muncul kembali dengan pesan bahwa logpoint telah ditambahkan. Screenshot dari Cloud Shell kami ditampilkan di bawah:
Sekarang, jika Anda mengaktifkan perintah daftar logpoints, 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 melihat cara kerjanya, kita dapat kembali membuka halaman beranda di https://<PROJECT_ID>.appspot.com
. Tindakan ini akan memanggil kode dan pada akhirnya logpoint kita. Ingat, ini akan dicatat secara default di Log Aplikasi kami. Jadi yang perlu kita lakukan adalah mengunjungi Stackdriver Logging sekali lagi seperti yang ditunjukkan di bawah ini:
Klik permintaan tertentu dan Voila. Pada detail, Anda akan melihat logpoint kami diaktifkan dan pesan log ditampilkan.
Kami harap Anda menikmati tutorial ini. Topik ini hanya membahas beberapa kemampuan yang dibawa oleh platform Stackdriver. Ada banyak hal lain untuk 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 disebut "Menggunakan pemantauan dan logging Stackdriver untuk mendapatkan visibilitas yang lebih baik ke kesehatan aplikasi Anda.
Jika Anda memiliki masukan atau ingin melaporkan masalah pada codelab ini, gunakan link "Temukan bug" di kiri bawah halaman ini.