Tutorial ini menjelaskan cara membuat aplikasi pemantauan performa web menggunakan teknologi serverless Google Cloud.
Performa memainkan peran utama dalam keberhasilan aplikasi web apa pun. Jika situs Anda berperforma buruk, pendaftaran Anda dan retensi pengguna yang lebih rendah mungkin akan terjadi, hal ini mungkin akan memengaruhi sasaran bisnis Anda. Performa harus menjadi kriteria keberhasilan utama saat mendesain, mem-build, dan menguji aplikasi web Anda.
Namun, performa halaman juga dapat berubah dari waktu ke waktu seiring berkembangnya aplikasi Anda. Developer dapat menambahkan atau memperbarui gambar dan skrip, atau infrastruktur penayangan aplikasi yang mendasarinya sendiri dapat berubah. Oleh karena itu, penting untuk memantau performa halaman secara rutin. Biasanya, Anda menyimpan metrik performa untuk mengaktifkan histori analisis. Selain itu, membuat pemberitahuan juga biasa dilakukan jika performa halaman berada di bawah batas yang ditentukan.
Tujuan
- Buat Cloud Function yang menggunakan Chrome headless untuk mengumpulkan metrik performa halaman web.
- Simpan metrik di Cloud Storage.
- Buat Cloud Function lain, yang dipicu oleh peristiwa pembuatan Cloud Storage, untuk menganalisis metrik halaman.
- Simpan hasil analisis di Firestore.
- Buat Cloud Function lain, yang dipicu oleh peristiwa pembuatan Firestore, untuk memublikasikan pemberitahuan ke Pub/Sub jika performa halaman buruk.
- Buat tugas Cloud Scheduler untuk memicu Cloud Function pertama secara berkala.
- Verifikasi output untuk mengetahui keberhasilan dan skenario kegagalan.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:
- Cloud Functions
- Cloud Scheduler
- Cloud Storage
- Firestore
- Pub/Sub
- Container Registry
- Cloud Build
Gunakan kalkulator harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Cloud Functions, Cloud Scheduler, Pub/Sub, and Cloud Build APIs.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Cloud Functions, Cloud Scheduler, Pub/Sub, and Cloud Build APIs.
Arsitektur
Operasi pemantauan performa web biasanya bersifat stateless dan berumur pendek. Pemicu juga sering kali berbasis peristiwa, yang terjadi sesuai jadwal atau dipicu sebagai bagian dari beberapa proses lainnya, seperti pipeline pengujian otomatis. Karakteristik ini menjadikan arsitektur serverless sebagai pilihan yang menarik untuk menerapkan aplikasi analisis web.
Dalam tutorial ini, Anda menggunakan berbagai bagian stack serverless Google Cloud, termasuk Cloud Functions, Firestore, Cloud Scheduler, dan Pub/Sub. Anda tidak perlu mengelola infrastruktur untuk salah satu layanan tersebut, dan Anda hanya membayar sesuai penggunaan. Inti aplikasi diimplementasikan menggunakan Cloud Functions, yang menyediakan lingkungan eksekusi tanpa server yang skalabel dan berbasis peristiwa. Dengan Cloud Functions, Anda dapat membuat dan menghubungkan aplikasi menggunakan bagian logika independen yang dikaitkan secara longgar.
Diagram berikut menunjukkan arsitektur solusi serverless yang Anda buat dalam tutorial ini.
Mempersiapkan lingkungan
Sebelum membuat lingkungan serverless, Anda akan mendapatkan kode dari GitHub, menetapkan variabel, dan menyiapkan resource yang diperlukan nanti untuk dianalisis dan disimpan.
Mendapatkan kode dan menetapkan variabel lingkungan
Di konsol Google Cloud, buka Cloud Shell.
Clone repositori yang berisi kode untuk Cloud Functions yang digunakan dalam tutorial ini:
git clone https://github.com/GoogleCloudPlatform/solutions-serverless-web-monitoring.git
Ubah ke direktori fungsi:
cd solutions-serverless-web-monitoring/functions
Tetapkan project ID dan nomor project saat ini sebagai variabel shell:
export PROJECT=$DEVSHELL_PROJECT_ID export PROJECT_NUM=$(gcloud projects list \ --filter="$PROJECT" \ --format="value(PROJECT_NUMBER)")
Tetapkan region deployment default untuk Cloud Functions. Contoh berikut menetapkan region ke
us-east1
, tetapi Anda dapat mengubahnya ke region tempat Cloud Functions tersedia.export REGION=us-east1 gcloud config set functions/region $REGION
Membuat bucket Cloud Storage
Di bagian ini, Anda akan membuat bucket Cloud Storage untuk menyimpan data performa halaman yang dikumpulkan. Anda dapat memilih lokasi atau kelas penyimpanan mana pun, tetapi sebaiknya buat bucket di lokasi yang sama dengan Cloud Functions yang akan menggunakan bucket itu.
Di Cloud Shell, ekspor variabel shell untuk nama bucket Cloud Storage yang akan menyimpan metrik. Nama bucket harus unik secara global, jadi perintah berikut menggunakan nomor project Google Cloud Anda sebagai akhiran pada nama bucket.
export METRICS_BUCKET=page-metrics-$PROJECT_NUM
Gunakan alat
gsutil
untuk membuat bucket:gsutil mb -l $REGION gs://$METRICS_BUCKET
Update file
env-vars.yaml
dengan nama bucket. File ini berisi variabel lingkungan yang akan Anda teruskan ke Cloud Functions nanti.sed -i "s/\[YOUR_METRICS_BUCKET\]/$METRICS_BUCKET/" env-vars.yaml
Membuat koleksi Firestore
Di bagian selanjutnya, Anda akan menganalisis metrik performa halaman. Di bagian ini, Anda akan membuat koleksi Firestore untuk menyimpan hasil dari setiap analisis.
Di konsol Google Cloud, buka halaman Firestore.
Jika Anda belum pernah membuat database Firestore sebelumnya, lakukan langkah-langkah berikut:
- Klik Select Native mode untuk mengaktifkan Firestore.
- Pilih lokasi regional yang dekat dengan region tempat Cloud Functions akan dijalankan.
- Klik Create database.
Perlu waktu beberapa saat untuk menyelesaikan konfigurasi.
Klik Mulai Koleksi, lalu tetapkan ID koleksi ke
page-metrics
.Klik Save.
Buat topik dan langganan Pub/Sub
Biasanya, Anda ingin memberi tahu sistem dan pihak yang berkepentingan jika analisis menunjukkan bahwa performa halaman buruk. Di bagian ini, Anda akan membuat topik Pub/Sub yang akan berisi pesan yang menjelaskan performa yang buruk.
Di Cloud Shell, buat topik Pub/Sub bernama
performance-alerts
:gcloud pubsub topics create performance-alerts
Buat langganan ke topik. Anda menggunakan langganan untuk memverifikasi bahwa pesan pemberitahuan dipublikasikan ke topik.
gcloud pubsub subscriptions create performance-alerts-sub \ --topic performance-alerts
Mengumpulkan metrik performa halaman
Banyak situs menggunakan JavaScript untuk merender konten halaman secara dinamis. Hal ini membuat analisis performa menjadi lebih rumit karena klien harus mengemulasikan browser agar dapat memuat halaman web sepenuhnya. Runtime Node.js untuk Cloud Functions memiliki dukungan untuk Chrome headless, yang menyediakan fungsi browser web lengkap di lingkungan serverless.
Puppeteer adalah library Node.js yang dibuat oleh tim Chrome DevTools yang menyediakan API tingkat tinggi untuk mengontrol Chrome headless. Secara default, Puppeteer menginstal browser versi terbaru bersama library tersebut. Oleh karena itu, Anda dapat menambahkan Puppeteer sebagai dependensi ke Cloud Function sebagai cara mudah untuk menggunakan Chrome headless dalam fungsi.
Mengukur dan menganalisis performa halaman web adalah bidang yang besar dan kompleks. Agar lebih mudah, dalam tutorial ini Anda menggunakan Puppeteer untuk mengumpulkan beberapa metrik performa halaman tingkat atas. Namun, Anda juga dapat menggunakan Puppeteer dan Chrome DevTools Protocol (CDP) untuk mengumpulkan informasi yang lebih mendetail, seperti rekaman aktivitas linimasa. Anda juga dapat menampilkan pengalaman pengguna akhir secara lebih baik dengan mengemulasi kemacetan jaringan dan melakukan throttling CPU. Untuk pengantar yang bagus tentang menganalisis performa halaman web, lihat situs developer web Chrome.
Perhatikan bahwa ada banyak faktor yang memengaruhi waktu muat halaman web, termasuk karakteristik performa klien. Penting untuk menetapkan dasar pengukuran menggunakan konfigurasi CPU dan RAM pada Cloud Function.
Cuplikan berikut dari file tracer/index.js
menunjukkan cara menggunakan
Puppeteer untuk memuat halaman web:
Di cloud Shell, deploy
trace
Cloud Function:gcloud functions deploy trace \ --trigger-http \ --runtime nodejs10 \ --memory 1GB \ --source tracer \ --env-vars-file env-vars.yaml \ --quiet
Diperlukan waktu beberapa menit untuk men-deploy Cloud Function.
Parameter deployment menentukan bahwa fungsi tersebut harus memiliki pemicu HTTP, harus menggunakan runtime Node.js 10, dan harus memiliki memori sebesar 1 GB. Jumlah memori ini diperlukan untuk menjalankan Chrome headless. Variabel lingkungan disediakan ke fungsi menggunakan file
env-vars.yaml
Secara default, Cloud Functions yang dipicu HTTP memungkinkan pemanggilan yang tidak diautentikasi. Oleh karena itu, Anda harus mengamankan fungsi rekaman aktivitas.
Hapus peran IAM
cloudfunctions.invoker
untukallUsers
:gcloud beta functions remove-iam-policy-binding trace \ --member allUsers \ --role roles/cloudfunctions.invoker
Menganalisis metrik
Tujuan umum dari latihan pemantauan performa web adalah melacak performa terhadap beberapa tolok ukur yang ditentukan. Jika metrik tertentu melebihi batas yang diharapkan, hal tersebut dapat menunjukkan masalah pada rilis software terbaru, atau masalah dengan infrastruktur yang mendasarinya.
Di bagian ini, Anda akan membuat Cloud Function di Python untuk mengurai metrik halaman dan mempertahankan hasilnya ke koleksi Firestore. Fungsi ini mengevaluasi metrik FirstMeaningfulPaint
terhadap batas yang diharapkan, dan menandai hasil analisis sebagai masalah jika nilai minimum terlampaui.
FirstMeaningfulPaint
adalah
metrik yang berfokus pada pengguna
yang menjelaskan secara luas kapan suatu
halaman menjadi berguna bagi pengguna. Anda menggunakan pemicu Cloud Storage untuk menjalankan fungsi analisis setiap kali file baru ditulis ke bucket yang berisi metrik.
Cuplikan berikut dari file analyzer/main.py
menunjukkan fungsi:
Men-deploy
analyze
Cloud Function:gcloud functions deploy analyze \ --trigger-resource gs://$METRICS_BUCKET \ --trigger-event google.storage.object.finalize \ --runtime python37 \ --source analyzer \ --env-vars-file env-vars.yaml
Fungsi ini dipicu oleh peristiwa
finalize
di bucket metrik, yang dikirim setiap kali objek dibuat dalam bucket. Fungsi ini menggunakan runtime Python 3.7.
Memperingatkan saat terjadi kegagalan
Biasanya, Anda ingin mengambil tindakan jika analisis metrik menunjukkan halaman yang berperforma buruk.
Di bagian ini, Anda akan membuat Cloud Function untuk mengirim pesan ke topik Pub/Sub jika performa halaman tidak memuaskan. Fungsi ini dipicu setiap kali dokumen dibuat di koleksi Firestore. Pihak yang berminat dapat berlangganan topik Pub/Sub dan mengambil tindakan yang sesuai. Misalnya, aplikasi dukungan dapat berlangganan pesan Pub/Sub dan mengirim email, memicu pager dukungan, atau membuka bug.
Cuplikan berikut dari file alerter/main.py
menunjukkan fungsi:
Perhatikan bahwa notifikasi hanya dikirim jika kolom status menunjukkan kegagalan.
Men-deploy
alert
Cloud Function:gcloud functions deploy alert \ --trigger-event providers/cloud.firestore/eventTypes/document.create \ --trigger-resource "projects/$PROJECT/databases/(default)/documents/page-metrics/{any}" \ --runtime python37 \ --source alerter \ --env-vars-file env-vars.yaml \ --entry-point generate_alert
Fungsi ini dipicu oleh peristiwa
document.create
dalam koleksi Firestorepage-metrics
. Akhiran{any}
adalah karakter pengganti yang menunjukkan bahwa fungsi harus dipicu setiap kali dokumen dibuat dalam koleksi.
Menjadwalkan analisis
Sebaiknya pantau performa halaman secara rutin. Misalnya, Anda mungkin ingin menganalisis halaman tertentu setiap jam, setiap hari, atau setiap minggu. Di bagian ini, Anda akan membuat tugas Cloud Scheduler untuk menjalankan pipeline analisis secara berkala dengan memicu fungsi trace
.
Tugas Cloud Scheduler dijalankan menggunakan akun layanan yang telah diberi peran IAM cloudfunctions.invoker
yang diperlukan untuk fungsi trace
.
Terkadang halaman web tidak merespons dengan benar, atau waktu permintaan habis, sehingga percobaan ulang tidak dapat dihindari dengan aplikasi analisis web. Oleh karena itu, penting untuk memiliki logika percobaan ulang di aplikasi Anda. Cloud Functions mendukung percobaan ulang untuk fungsi latar belakang.
Percobaan ulang tidak tersedia untuk Cloud Functions yang dipicu HTTP, sehingga Anda tidak dapat menggunakan Cloud Functions untuk mencoba kembali fungsi trace
. Namun, Cloud Scheduler mendukung percobaan ulang. Untuk informasi selengkapnya tentang cara mengonfigurasi
parameter percobaan ulang, lihat
dokumentasi
RetryConfig.
Pastikan ketiga Cloud Functions telah di-deploy dengan benar dan menunjukkan status
ACTIVE
.gcloud functions list
Buat akun layanan baru yang akan digunakan sebagai identitas untuk menjalankan tugas Cloud Scheduler.
gcloud iam service-accounts create tracer-job-sa
Berikan peran IAM
cloudfunctions.invoker
kepada akun layanan baru untuk fungsitrace
.gcloud beta functions add-iam-policy-binding trace \ --role roles/cloudfunctions.invoker \ --member "serviceAccount:tracer-job-sa@$PROJECT.iam.gserviceaccount.com"
Membuat tugas Cloud Scheduler:
gcloud scheduler jobs create http traceWithRetry \ --uri="https://$REGION-$PROJECT.cloudfunctions.net/trace" \ --http-method=POST \ --message-body="{\"url\":\"http://www.example.com\"}" \ --headers="Content-Type=application/json" \ --oidc-service-account-email="tracer-job-sa@$PROJECT.iam.gserviceaccount.com" \ --schedule="0 3 * * *" \ --time-zone="UTC" \ --max-retry-attempts=3 \ --min-backoff=30s
Karena tugas akan memanggil fungsi
trace
yang dipicu HTTP, perintah tersebut akan menentukan jenis tugas sebagaihttp
, dan menyediakan URL pemicu fungsi sebagai nilaiuri
. Halaman yang akan dianalisis, dalam hal iniwww.example.com
, disediakan dalam flagmessage-body
. Flagoidc-service-account-email
menentukan akun layanan yang akan digunakan untuk autentikasi. Perintah tersebut menunjukkan jumlah percobaan ulang untuk mencoba menggunakan tandamax-retry-attempts
, dan nilai yang diteruskan dengan flagschedule
menetapkan jadwal eksekusi ke pukul 03.00 UTC setiap hari.
Memverifikasi hasil
Di bagian ini, Anda akan memverifikasi bahwa Anda mendapatkan perilaku yang diharapkan untuk kondisi berhasil dan gagal.
Memverifikasi keberhasilan
Tugas Cloud Scheduler tidak akan berjalan hingga waktu terjadwal berikutnya, yang dalam hal ini adalah pukul 03.00 UTC. Untuk langsung melihat hasilnya, Anda dapat memicu run secara manual.
- Tunggu 90 detik hingga tugas penjadwal selesai diinisialisasi.
Jalankan tugas Cloud Scheduler secara manual:
gcloud scheduler jobs run traceWithRetry
Tunggu sekitar 30 detik hingga pipeline fungsi selesai.
Buat daftar konten bucket metrik untuk menunjukkan bahwa metrik halaman telah dikumpulkan:
gsutil ls -l gs://$METRICS_BUCKET
Di konsol Google Cloud, buka halaman Cloud Logging viewer:
Anda melihat pesan log dari masing-masing Cloud Functions:
trace
,analyze
, danalert
. Diperlukan waktu beberapa saat agar log mengalir, sehingga Anda mungkin perlu memuat ulang ke panel log.Catat ID dokumen Firestore, yang tercantum setelah teks
Created new Firestore document page-metrics/
Di konsol Google Cloud, buka halaman Firestore:
Periksa dokumen yang berisi hasil analisis. Nilai dokumen menunjukkan status
PASS
dan berisi metrik performa halaman terbaru.Di Cloud Shell, pastikan tidak ada pesan pemberitahuan yang dikirim ke topik Pub/Sub dengan mencoba menarik pesan dari langganan:
gcloud pubsub subscriptions pull \ projects/$PROJECT/subscriptions/performance-alerts-sub \ --auto-ack
Anda tidak melihat item yang tercantum.
Memverifikasi kegagalan
Picu fungsi rekaman aktivitas secara manual. Kali ini, Anda memberikan halaman Tutorial Google Cloud sebagai URL. Halaman ini memiliki banyak konten dinamis yang meningkatkan waktu muat halaman melebihi batas maksimum yang diharapkan.
gcloud functions call trace \ --data='{"url":"https://cloud.google.com/docs/tutorials"}'
Anda memiliki izin yang memadai untuk memanggil fungsi karena Anda memiliki peran IAM
Owner
atauEditor
project.Tunggu sekitar 30 detik hingga pipeline fungsi selesai.
Buat daftar konten bucket metrik untuk memverifikasi bahwa metrik tambahan telah dikumpulkan:
gsutil ls -l gs://$METRICS_BUCKET
Sekarang Anda akan melihat dua item di setiap bucket.
Di konsol Google Cloud, buka halaman penampil Cloud Logging dan filter untuk log Cloud Function:
Anda melihat error dari fungsi
analyze
yang menunjukkan bahwa halaman melebihi waktu pemuatan maksimum yang diizinkan. Sekali lagi, Anda mungkin perlu memuat ulang panel log untuk melihat pesan terbaru.Catat ID dokumen Firestore.
Di konsol Google Cloud, buka halaman Firestore:
Temukan dokumen yang menjelaskan analisis yang gagal.
Kolom status ditandai sebagai
FAIL
.Di Cloud Shell, pastikan pesan pemberitahuan dikirim ke topik Pub/Sub dengan mengambil pesan dari langganan.
gcloud pubsub subscriptions pull \ projects/$PROJECT/subscriptions/performance-alerts-sub \ --auto-ack
Kali ini, Anda akan melihat konten pesan.
Pembersihan
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Pelajari lebih lanjut teknologi serverless Google Cloud.
- Pelajari tutorial Cloud Functions lainnya.
- Tonton video dari Google I/O '18 yang menjelaskan penggunaan lain untuk Puppeteer dan Chrome headless.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.