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 ini disertakan dengan setiap Cloud Function yang Anda deploy di semua bahasa yang didukung dan akan membuat Anda 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 untuk 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, serta kemampuan logging dan pemantauannya dapat digunakan dari jarak jauh menggunakan laptop, Anda akan menggunakan Cloud Shell, 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

Untuk memiliki sesuatu yang dapat dipantau, buat Cloud Function "Hello, World". Di menu sebelah kiri Konsol Google Cloud, klik Cloud Functions, lalu klik Create Function.

3c13aa20af602aa7.png

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

fa6816c96d6d5b94.png

Pertahankan semua nilai default untuk kode sumber. (Namun, Anda dapat memilih bahasa/runtime yang berbeda jika Anda mau.)

7aadf164450484e.png

Terakhir, klik Create.

dc74cd21000d6c91.png

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

5363a34eb001d5ed.png

4. Uji Cloud Function dan kirim traffic menggunakan generator beban

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

Pertama, menggunakan Cloud Shell, keluarkan perintah berikut:

$ gcloud functions describe hello-monitor

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

Pemicuan Cloud Function kini semudah menggunakan perintah curl di URL tersebut.

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

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

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

Untuk mengirimkan beberapa 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, klik View Logs.

b24157fd3376e6a8.png

Tindakan ini akan mengarahkan Anda ke bagian Stackdriver Logging di project Anda, 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 tingkat log (dalam kasus Anda, semua log berada di tingkat debug).
  • Pilih jangka waktu tertentu (relatif atau absolut).
  • Aktifkan streaming log (dengan Play 751a4600016f34a7.pngdi bagian atas layar).
  • Menyalin link ke entri log (untuk dibagikan kepada anggota tim).
  • Menampilkan entri log dalam konteks resource.
  • Menyematkan entri log (sebagai isyarat visual).
  • Mengekspor log ke BigQuery, Cloud Storage, atau Pub/Sub (atau cukup mendownloadnya sebagai file JSON atau CSV).

6. Perbarui fungsi

Dengan menggunakan Konsol Cloud, buka tampilan Detail fungsi dan amati lonjakan yang Anda buat dengan penguji beban dalam jumlah pemanggilan per detik dan waktu eksekusinya.

aaee3159bbe395d3.png 7ed347101da5eca0.png

Alat lain yang lebih mendetail untuk mengamati latensi dan panggilan RPC adalah Stackdriver Trace, tetapi sebelum dapat menggunakannya, Anda perlu melakukan 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 node-emoji dan memperkenalkan beberapa latensi.
  3. Tambahkan variabel lingkungan untuk mengaktifkan Stackdriver Trace untuk Cloud Functions.

Dari Function details, klik Edit untuk mengubah fungsi.

39b0f8f98b18a6c0.png

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 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 Cloud Function setelah dijeda selama 300 milidetik.

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

9205bd277b76aa21.png

Klik Simpan.

Kembali ke Cloud Shell dan panggil kembali perintah untuk menghasilkan beberapa 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 mengamati daftar rekaman aktivitas yang dihasilkan tanpa persyaratan penyiapan lain dan tanpa library pelacakan tertentu dalam kode Anda.

7. Lacak Cloud Function yang diupdate

Menggunakan menu sebelah kiri, buka Daftar trace (di bagian Stackdriver Trace).

576373f38cad6f8.png

Anda akan melihat sesuatu yang mirip dengan screenshot berikut:

44a36b758b49f88f.png

Hal ini akan menunjukkan dengan jelas bahwa latensi yang diperkenalkan di Cloud Function Anda memang diukur pada 300 milidetik.

Setiap titik pada grafik adalah permintaan yang informasinya dapat Anda lihat secara mendetail, seperti stempel waktu, metode dan status HTTP, labelnya, link ke entri log yang sesuai, dan panggilan RPC berikutnya yang dilakukan Cloud Function.

5815064fec87444b.png

Jika Anda ingin memperbesar, cukup klik dan tarik grafik. Memilih rentang waktu kustom dalam grafik rekaman aktivitas

Untuk memperkecil, klik Urungkan Zoom di bagian atas halaman.

Karena Anda men-deploy satu Cloud Function, grafik hanya menampilkan permintaan GET di URI hello-monitor, tetapi Anda dapat memfilter rekaman aktivitas menurut metode HTTP (GET, POST, DELETE) menurut status HTTP (2XX, 3XX) atau menggunakan filter permintaan.

Buka Ringkasan 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. Anda bahkan dapat membandingkan nilai yang dihasilkan dengan dasar pengukuran waktu.

5bd34e9d13b47fb6.png

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

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

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

8. Saatnya membersihkan resource

Codelab ini telah selesai.

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

aceb633cf70a4a27.png

9. Apa langkah selanjutnya?

Berikut beberapa bacaan lanjutan:

/