Menggunakan Stackdriver Logging dan Stackdriver Trace untuk Cloud Functions

1. Pengantar

Dalam codelab ini, Anda akan mempelajari cara memanfaatkan alat logging dan pemantauan yang tersedia untuk semua developer yang menggunakan Cloud Functions. Alat-alat ini disertakan dalam setiap Cloud Function yang Anda deploy dalam semua bahasa yang didukung, sehingga Anda dapat lebih produktif saat menulis dan mengoperasikan kode serverless.

5815064fec87444b.png

Anda akan menggunakan Cloud Function yang dipicu HTTP, tetapi semua yang Anda bahas juga berlaku untuk bahasa lain dan Cloud Functions yang dipicu oleh peristiwa lain.

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. (Jika belum memiliki akun Gmail atau G Suite, Anda harus membuatnya.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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.

  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.

Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Cloud Shell

Meskipun Cloud Functions, beserta kemampuan logging dan pemantauannya dapat digunakan dari jarak jauh dari laptop, Anda akan menggunakan Cloud Shell, yakni lingkungan command line yang berjalan di Google 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).

  1. Untuk mengaktifkan Cloud Shell dari Cloud Console, cukup klik Aktifkan Cloud ShellfEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (hanya perlu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

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>

Jika, untuk beberapa alasan, project belum disetel, 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 Cloud Console:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

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>
  1. Terakhir, tetapkan zona dan konfigurasi project default.
gcloud config set compute/zone us-central1-f

Anda dapat memilih berbagai zona yang berbeda. Untuk informasi selengkapnya, lihat Region & Zona.

3. Men-deploy Cloud Function sederhana

Agar sesuatu dapat dipantau, buat "Hello, World" (Halo Dunia) dan Cloud Function. Di menu kiri Google Cloud Console, klik Cloud Functions, lalu klik Create Function.

3c13aa20af602aa7.pngS

Masukkan "hello-monitor" sebagai nama Cloud Function baru Anda.

fa6816c96d6d5b94.png

Gunakan semua setelan default untuk kode sumber. (Namun, Anda dapat memilih bahasa/runtime lain jika mau.)

7aadf164450484e.pngS

Terakhir, klik Create.

dc74cd21000d6c91.png

Anda akan melihat Cloud Function Anda tercantum dengan tanda centang hijau di sampingnya, yang berarti Cloud Function siap untuk dipanggil.

5363a34eb001d5ed.pngS

4. Menguji Cloud Function dan mengirim traffic menggunakan generator beban

Setelah Cloud Function berhasil di-deploy, uji dari command line.

Pertama, gunakan Cloud Shell, tampilkan perintah berikut:

$ gcloud functions describe hello-monitor

Tindakan tersebut akan menampilkan deskripsi Cloud Function, termasuk URL untuk httpsTrigger, yang merupakan endpoint HTTP(S) untuk memanggil Cloud Function. Hasilnya akan terlihat seperti berikut: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.

Sekarang, pemicu Cloud Function akan dipicu sama mudahnya dengan menggunakan perintah curl pada URL tersebut.

$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Hello World!

Sekarang gunakan Vegeta, alat pengujian beban HTTP sederhana. Untuk menginstalnya, cukup ketik perintah berikut dari Cloud Shell :

$ go get -u github.com/tsenart/vegeta

Untuk mengirim sejumlah traffic ke Cloud Function Anda (lima permintaan per detik selama beberapa menit), gunakan perintah berikut:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

5. Menjelajahi log

Dari tampilan detail Cloud Function Anda, klik View Logs.

b24157fd3376e6a8.png

Langkah itu akan mengarahkan Anda ke bagian Stackdriver Logging di project, yang hanya menampilkan log Cloud Function Anda.

5a36fa75d2fb0165.png

Semua permintaan ke Cloud Function Anda harus menampilkan kode status 200.

Saat melihat log, Anda dapat melakukan hal berikut:

  • Filter menurut level log (dalam kasus Anda, semua log merupakan level debug).
  • Pilih jangka waktu tertentu (relatif atau absolut).
  • Aktifkan streaming log (dengan Play 751a4600016f34a7.pngSdi bagian atas layar).
  • Salin link ke entri log (untuk dibagikan dengan anggota tim).
  • Tampilkan entri log dalam konteks resource.
  • Sematkan entri log (sebagai petunjuk visual).
  • Ekspor log ke BigQuery, Cloud Storage, atau Pub/Sub (atau cukup download sebagai file JSON atau CSV).

6. Mengupdate fungsi

Dengan menggunakan Konsol Cloud, buka tampilan Function details dan amati lonjakan yang dibuat dengan penguji beban terkait jumlah pemanggilan per detik dan waktu eksekusinya.

aaee3159bbe395d3.png 7ed347101da5eca0.pngS

Alat lain yang lebih terperinci untuk mengamati latensi dan panggilan RPC adalah Stackdriver Trace, tetapi sebelum dapat menggunakannya, Anda perlu membuat beberapa perubahan pada Cloud Functions. Lakukan hal berikut:

  1. Tambahkan paket node-emoji yang menyelamatkan nyawa sebagai dependensi.
  2. Perbarui kode fungsi untuk menggunakan modul emoji node dan memperkenalkan beberapa latensi.
  3. Tambahkan variabel lingkungan guna mengaktifkan Stackdriver Trace untuk Cloud Functions.

Dari Detail fungsi, klik Edit untuk mengubah fungsi.

39b0f8f98b18a6c0.pngS

Edit file package.json guna 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 tersebut akan menambahkan emoji acak ke pesan yang ditampilkan oleh Cloud Function setelah dijeda selama 300 milidetik.

Terakhir, tambahkan variabel lingkungan Cloud Function bernama GOOGLE_CLOUD_TRACE_ENABLED dan tetapkan ke true sebagai berikut:

9205bd277b76aa21.pngS

Klik Simpan.

Kembali ke Cloud Shell dan ingat perintah untuk membuat sejumlah beban pada Cloud Function yang baru di-deploy:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

Sekarang Anda siap untuk mengamati daftar trace yang dihasilkan tanpa persyaratan penyiapan lain dan tanpa library pelacakan tertentu dalam kode Anda.

7. Melacak Cloud Function yang diperbarui

Dengan menggunakan menu sebelah kiri, buka Daftar pelacakan (di bagian Stackdriver Trace).

576373f38cad6f8.pngS

Anda akan melihat sesuatu yang mirip dengan screenshot berikut:

44a36b758b49f88f.pngS

Dengan begitu, sudah jelas bahwa latensi yang diperkenalkan di Cloud Function Anda memang diukur pada 300 milidetik.

Setiap titik pada grafik merupakan permintaan yang informasi detailnya dapat Anda lihat, seperti stempel waktu, metode dan status HTTP, labelnya, link ke entri log yang sesuai, dan panggilan RPC berikutnya yang dibuat Cloud Function.

5815064fec87444b.png

Jika Anda ingin memperbesar, cukup klik dan seret pada grafik. Memilih rentang waktu kustom di grafik rekaman aktivitas

Untuk memperkecil, klik Urungkan Zoom di bagian atas halaman.

Karena Anda telah men-deploy satu Cloud Function, grafik ini hanya menampilkan permintaan GET pada URI hello-monitor, tetapi Anda dapat memfilter pelacakan dengan metode HTTP (GET, POST, DELETE) berdasarkan status HTTP (2XX, 3XX) atau dengan menggunakan filter permintaan.

Buka Overview di menu sebelah kiri:

e920cfca2a50899e.png

Dari halaman ringkasan ini, Anda dapat menemukan rekaman aktivitas terbaru dan insight lainnya.

ef5a45647967d275.png

Anda juga dapat menemukan kemampuan untuk membuat laporan kustom berdasarkan kombinasi filter permintaan URI, metode HTTP, status HTTP, dan rentang waktu. Alat ini bahkan memungkinkan Anda membandingkan nilai yang dihasilkan dengan dasar pengukuran waktu.

5bd34e9d13b47fb6.pngS

Jika Anda berhasil menyiapkan rentang waktu yang benar dengan titik data yang cukup, Anda dapat membuat laporan yang menunjukkan pergeseran latensi penting antara Cloud Function awal dan yang baru.

2cc0e9a3212b91bb.pngS

2e7b1ebf2f0a2b4f.pngS

Laporan kustom tersebut dapat digunakan untuk menemukan kapan masalah performa muncul dan melacak indikator tingkat layanan (SLI), seperti latensi permintaan pengguna akhir.

8. Saatnya membersihkan resource

codelab telah berakhir.

Meskipun alat Cloud Functions dan Stackdriver adalah platform serverless yang tidak dikenai biaya saat tidak digunakan, jadilah pengguna cloud yang baik dan hapus Cloud Function Anda. Cukup pilih hello-monitor di Overview di bagian Cloud Functions dan klik Delete.

aceb633cf70a4a27.png

9. Apa langkah selanjutnya?

Berikut adalah beberapa bacaan lanjutan:

/