Tujuan codelab ini adalah agar Anda memahami cara memanfaatkan alat logging dan pemantauan yang ditawarkan kepada semua developer Cloud Function. Alat ini dilengkapi dengan setiap Cloud Function yang Anda deploy di semua bahasa yang didukung dan akan memungkinkan Anda menjadi lebih produktif saat menulis dan mengoperasikan kode tanpa server.
Kita akan menggunakan fungsi yang dipicu HTTP di sini, tetapi semua yang kita bahas juga berlaku untuk bahasa lain dan untuk fungsi yang dipicu oleh peristiwa lain (bucket penyimpanan, pub/sub, dll.)
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
Meskipun Google Cloud Functions dan kemampuan logging serta pemantauannya dapat digunakan dari jarak jauh dari laptop Anda, 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):
Klik tombol "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>
Cloud Shell juga menetapkan beberapa variabel lingkungan secara default yang mungkin berguna saat Anda menjalankan perintah di masa mendatang.
echo $GOOGLE_CLOUD_PROJECT
Output perintah
<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.
Agar dapat memantau sesuatu, mari kita buat cloud function Halo Dunia. Di menu kiri Konsol, klik Cloud Functions, lalu "Create function
" :
Beri nama fungsi baru Anda "hello-monitor
" :
... dan tetap menggunakan setelan default untuk kode sumber (namun, Anda dapat memilih bahasa/runtime yang berbeda jika mau) :
Terakhir, buat fungsi menggunakan tombol "Create
"
Setelah beberapa saat, Anda akan melihat fungsi tercantum sebagai siap untuk dipanggil (seperti yang ditunjukkan oleh tanda centang hijau) :
Setelah cloud function berhasil di-deploy, kita akan mengujinya dari command line.
Pertama, dengan menggunakan Cloud Shell, buat perintah berikut :
$ gcloud functions describe hello-monitor
Ini akan menampilkan deskripsi fungsi, termasuk URL untuk httpsTrigger
yang merupakan endpoint HTTP(S) untuk memanggil fungsi. URL harus memiliki format : https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Memicu fungsi sekarang seharusnya semudah curl
'ing url ini :
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Sekarang kami akan menggunakan Vegeta, alat pengujian beban HTTP sederhana. Untuk menginstalnya, dari Cloud Shell, cukup ketik perintah ini :
$ go get -u github.com/tsenart/vegeta
Untuk mengirim beberapa traffic ke fungsi cloud (5 permintaan per detik selama beberapa menit), gunakan perintah ini :
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Dari tampilan detail fungsi, klik menu "Lihat Log" di sebelah kanan :
Anda akan diarahkan ke bagian Stackdriver Logging project, yang hanya menunjukkan log fungsi cloud Anda :
Semoga semua permintaan ke fungsi Anda menampilkan kode status 200.
Dengan log viewer ini, Anda dapat :
- filter menurut level log (dalam kasus kami, semua log adalah level
Debug
) - pilih jangka waktu tertentu (relatif atau absolut)
- aktifkan streaming log (tombol "play" di bagian atas layar)
- menyalin link ke entri log (untuk dibagikan dengan anggota tim)
- tampilkan entri log dalam konteks resource
- sematkan entri log (sebagai isyarat visual)
- ekspor log ke BigQuery, Cloud Storage, atau Cloud Pub/Sub (atau cukup download dalam format JSON atau CSV)
Perhatikan juga bahwa pemilih kiri atas Anda dapat memfilter log menurut fungsi. Anda juga dapat menelusuri label atau penelusuran teks lengkap dalam kotak penelusuran di bagian atas jendela. Dalam kasus kita, labelnya adalah hello-monitor
(nama fungsi) serta ID eksekusi untuk setiap permintaan.
Filter juga dapat disalin untuk dibagikan (lihat menu tarik-turun di kotak penelusuran) :
Dengan menggunakan konsol, buka "Detail fungsi" lihat dan amati lonjakan yang telah kita buat dengan penguji beban kita, baik dari segi jumlah pemanggilan per detik maupun waktu eksekusinya :
Alat lain yang lebih mendetail untuk mengamati latensi dan panggilan RPC adalah fitur Stackdriver Trace, tetapi sebelum kita dapat menggunakan fitur ini, kita perlu melakukan beberapa perubahan pada fungsi, yaitu:
- Tambahkan paket
node-emoji
yang menyelamatkan banyak jiwa sebagai dependensi - Mengupdate kode fungsi untuk menggunakan modul node-emoji dan memasukkan beberapa latensi
- Tambahkan variabel lingkungan untuk mengaktifkan Stackdriver Trace untuk Cloud Functions
Dari halaman "Detail fungsi" klik edit untuk mengubah fungsi :
Edit file package.json
untuk menambahkan dependensi untuk paket node-emoji
:
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
Edit fungsi yang sebenarnya dengan mengubah konten index.js
menjadi berikut :
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
Tindakan ini akan menambahkan emoji acak ke pesan yang ditampilkan oleh fungsi setelah dijeda selama 300 milidetik.
Terakhir, tambahkan variabel lingkungan Cloud Function bernama GOOGLE_CLOUD_TRACE_ENABLED
dan tetapkan ke true
sebagai berikut:
Jangan lupa klik Simpan!
Sekarang kembali ke Cloud Shell dan ingat perintah untuk menghasilkan beberapa beban pada fungsi yang baru di-deploy :
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Sekarang kita siap untuk mengamati daftar trace yang dihasilkan tanpa persyaratan penyiapan lain dan tidak ada library rekaman aktivitas tertentu dalam kode Anda.
Dengan menggunakan menu sebelah kiri, buka daftar Trace (di bagian Stackdriver Trace) :
Anda akan melihat sesuatu yang mirip dengan screenshot ini :
Hal ini akan menjadi sangat jelas bahwa latensi yang diperkenalkan dalam fungsi kami memang diukur pada 300 md.
Setiap titik pada grafik ini adalah permintaan yang informasinya dapat Anda lihat, seperti stempel waktu, metode dan status HTTP, labelnya, link kembali ke entri log yang sesuai, dan panggilan RPC berikutnya yang dilakukan oleh fungsi tersebut :
Jika Anda ingin memperbesar, cukup klik dan tarik pada grafik :
Untuk memperkecil, klik tombol "Urungkan Zoom" di bagian atas halaman.
Karena kita telah men-deploy fungsi tunggal, grafik hanya menampilkan permintaan GET
pada URI hello-monitor
, tetapi Anda dapat memfilter trace berdasarkan metode HTTP (GET, POST, DELETE, ...), berdasarkan status HTTP (2XX, 3XX, ...), atau dengan menggunakan filter permintaan.
Sekarang buka bagian Trace "Overview" di menu kiri :
Dari halaman ringkasan ini, Anda dapat menemukan trace terbaru dan insight lainnya.
... serta kemampuan untuk membuat laporan kustom berdasarkan kombinasi filter permintaan URI, metode HTTP, status HTTP, dan rentang waktu. Bahkan ini memungkinkan Anda membandingkan nilai yang dihasilkan dengan dasar pengukuran waktu :
Jika Anda berhasil menyiapkan rentang waktu yang benar dan memiliki cukup titik data, Anda dapat membuat laporan yang menunjukkan pergeseran latensi penting antara fungsi awal dan fungsi baru :
Laporan kustom tersebut dapat digunakan untuk mengetahui kapan masalah performa diperkenalkan serta untuk melacak indikator tingkat layanan (SLI) seperti latensi permintaan pengguna akhir.
Ini mengakhiri codelab kami yang mencakup deployment fungsi cloud baru, menavigasi log-nya, dan mengamati trace permintaannya.
Meskipun Cloud Functions dan fitur Stackdriver adalah platform tanpa server yang tidak akan menimbulkan biaya saat tidak digunakan, cloud citizen yang baik untuk menghapus fungsi kita.
Cukup pilih fungsi hello-monitor
di halaman ringkasan Cloud Functions lalu klik "delete"
Ini mengakhiri codelab sederhana yang dimulai dengan logging dan trace Cloud Functions ini.
Berikut beberapa bacaan lanjutan :
- Metrik berbasis log Stackdriver Monitoring
- Stackdriver Error Reporting
- ... atau beberapa codelab dari kategori Tanpa server
/