Codelab pelacakan dan logging Cloud Functions

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:

Screenshot dari 10-02-2016 12:45:26.png

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

aktivasiCloudShell.png

Klik tombol "Mulai Cloud Shell"

Screen Shot 2017-06-14 at 10.13.43 PM.png

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:

ID_project.png

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 &amp. 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:

  1. Tambahkan paket node-emoji yang menyelamatkan banyak jiwa sebagai dependensi
  2. Mengupdate kode fungsi untuk menggunakan modul node-emoji dan memasukkan beberapa latensi
  3. 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 :Memilih rentang waktu kustom di grafik trace

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 :

/