Pemberitahuan: Error Berbasis Log pada Topik Pub/Sub

1. Pengantar

Terakhir Diperbarui: 21 Juni 2023

Pemberitahuan tentang Error Berbasis Log terkait Ketersediaan

Pemberitahuan berbasis log dapat digunakan untuk menentukan ketersediaan aplikasi dengan memantau peristiwa atau pola tertentu dalam log*.* Dengan diberi tahu tentang pemadaman layanan atau masalah lainnya yang dihadapi pengguna, Anda dapat mengambil langkah-langkah untuk meminimalkan dampaknya terhadap pengguna dan pelanggan Anda.

Meskipun cek uptime memberikan ringkasan umum tentang ketersediaan, akan lebih akurat jika menggunakan pesan error yang berasal dari log sebagai indikator jenis ketidaktersediaan yang lebih spesifik, dan untuk mengetahui berapa proporsi pengguna yang mengalami masalah.

Kesalahan dapat timbul dari berbagai penyebab, mulai dari kesalahan pengguna hingga pemeliharaan sistem, upgrade, dan bahkan faktor eksternal sistem, seperti cuaca buruk. Kunci dalam peringatan bukanlah untuk mencoba mengantisipasi semua kemungkinan penyebab, tetapi memilih beberapa gejala utama yang dapat berfungsi sebagai awal untuk pemecahan masalah.

Topik Pub/Sub sebagai Saluran Notifikasi Pemberitahuan

Topik Pub/Sub dapat digunakan sebagai saluran notifikasi Google Cloud Monitoring untuk mengirim pemberitahuan ke langganan Pub/Sub. Hal ini memungkinkan Anda mengintegrasikan pemberitahuan Cloud Monitoring dengan sistem lain, termasuk layanan notifikasi pihak ketiga.

Untuk menggunakan topik Pub/Sub sebagai saluran notifikasi, Anda harus membuat topik Pub/Sub dan langganan Pub/Sub terlebih dahulu. Kemudian, Anda perlu membuat saluran notifikasi Cloud Monitoring yang menggunakan topik Pub/Sub sebagai tujuan.

Saat pemberitahuan dipicu, Cloud Monitoring akan mengirim pesan ke topik Pub/Sub. Pelanggan langganan Pub/Sub dapat memproses pesan dan mengambil tindakan yang sesuai.

Yang akan Anda bangun

Dalam codelab ini, Anda akan men-deploy aplikasi, membuat topik Pub/Sub, dan membuat pemberitahuan berbasis log yang memeriksa error di bagian tertentu aplikasi dan menggunakan topik Pub/Sub sebagai saluran notifikasi.

Yang akan Anda pelajari

  • Cara membuat topik Pub/Sub
  • Cara membuat pemberitahuan berbasis log

Codelab ini berfokus pada pembuatan pemberitahuan error. Konsep dan kode aplikasi yang tidak-relevan akan dibahas sekilas dan disediakan sehingga Anda cukup menyalin dan menempelkannya.

Yang Anda butuhkan

  • Akun Google Cloud dengan izin untuk:
  • Men-deploy aplikasi Cloud Run
  • Membuat topik Pub/Sub
  • Membuat pemberitahuan

2. Mempersiapkan

Memilih atau Membuat Project Google Cloud

Untuk memilih project yang ada, gunakan menu dropdown:

b35bf95b8bf3d5d8.png

Untuk membuat project baru di Google Cloud, Anda dapat mengikuti langkah-langkah berikut:

  1. Buka Konsol Google Cloud Platform.
  2. Klik tombol Create Project.
  3. Masukkan nama project Anda.
  4. Pilih akun penagihan untuk project Anda.
  5. Klik tombol Buat.

Project Anda akan dibuat dan Anda akan dibawa ke dasbor project. Dari sana, Anda dapat mulai menggunakan layanan Google Cloud.

Berikut beberapa detail tambahan tentang setiap langkah:

  • Nama: Nama project Anda harus unik dalam organisasi.
  • Akun penagihan: Anda dapat menggunakan akun penagihan yang sudah ada atau membuat yang baru.
  • Buat: Setelah memasukkan semua informasi yang diperlukan, klik tombol Buat untuk membuat project Anda.

Untuk informasi selengkapnya, lihat dokumentasi Google Cloud tentang cara membuat project.

3. Men-deploy Aplikasi API

Apa yang dimaksud dengan aplikasi contoh atau API tersebut?

Aplikasi kita adalah aplikasi Inventory API sederhana yang mengekspos Endpoint REST API dengan beberapa operasi untuk mencantumkan item inventaris dan mendapatkan jumlah inventaris item tertentu.

Setelah kita men-deploy API dan mengasumsikan bahwa API tersebut dihosting di https://<somehost>, kita dapat mengakses endpoint API sebagai berikut:

https://<somehost>/inventory

Tindakan ini akan mencantumkan semua item produk dengan tingkat inventaris di tangan.

https://<somehost>/inventory/{productid}

Tindakan ini akan memberikan satu data dengan id produk dan tingkat inventaris langsung untuk produk tersebut.

Data respons yang ditampilkan adalah format JSON.

Catatan: Aplikasi API ini hanya untuk tujuan demo dan tidak merepresentasikan implementasi API yang aman dan andal. Lab ini dimaksudkan untuk menyediakan aplikasi cepat bagi kita, guna mempelajari tujuan utama lab, yaitu Google Cloud Operations.

Data Contoh dan Permintaan/Respons API

Aplikasi tidak didukung oleh database di backend untuk menyederhanakan semuanya. Contoh ID produk ini berisi 3 contoh ID produk dan tingkat inventarisnya.

ID Produk

Tingkat Inventaris Langsung

I-1

10

I-2

20

I-3

30

Contoh Permintaan dan Respons API ditampilkan di bawah ini:

Permintaan API

Respons API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

Membuat Clone Repositori

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:

bce75f34b2c53987.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

f6ef2b5f13479f3a.png

Mesin virtual ini dimuat dengan semua alat pengembangan yang Anda butuhkan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser.

Menyiapkan gcloud

Di Cloud Shell, tetapkan project ID Anda dan simpan sebagai variabel PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

Sekarang, jalankan perintah berikut:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

Ini akan membuat folder berjudul {i>cloud-code-sample-repository<i} dalam folder ini.

(Opsional) Menjalankan aplikasi di Cloud Shell

Anda dapat menjalankan aplikasi secara lokal dengan mengikuti langkah-langkah berikut:

  1. Dari terminal, buka versi Python API melalui perintah berikut:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. Di terminal, berikan perintah berikut (Pada saat penulisan, Cloud Shell dilengkapi dengan Python 3.9.x yang terinstal dan kita akan menggunakan versi default-nya. Jika Anda berencana untuk menjalankannya secara lokal di laptop Anda, Anda dapat menggunakan Python 3.8+) :

$ python app.py

  1. Anda dapat menjalankan perintah berikut untuk memulai Server Python secara lokal.

1f798fbddfdc2c8e.pngS 46edf454cc70c5a6.pngS

Klik Preview pada port 8080. 5. Tindakan ini akan membuka jendela browser. Anda akan melihat pesan {i>Error<i} 404 dan itu bukan masalah. Ubah URL dan ubah menjadi hanya berisi /inventory setelah nama host.

Misalnya, di komputer saya, terlihat seperti ini:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Tindakan ini akan menampilkan daftar item inventaris seperti yang dijelaskan sebelumnya:

709d57ee2f0137e4.pngS

  1. Anda dapat menghentikan server sekarang dengan membuka Terminal dan menekan Ctrl-C

Men-deploy aplikasi

Sekarang kita akan men-deploy aplikasi API ini ke Cloud Run. Proses ini melibatkan penggunaan klien command line gcloud untuk menjalankan perintah guna men-deploy kode ke Cloud Run.

Dari terminal, berikan perintah gcloud berikut:

$ gcloud run deploy --source .

Langkah ini akan mengajukan beberapa pertanyaan dan beberapa poin disebutkan di bawah ini:

  1. Nama layanan (python-flask-api): Gunakan default ini atau pilih sesuatu seperti my-inventory-api
  2. API [run.googleapis.com] tidak diaktifkan di project [613162942481]. Apakah Anda ingin mengaktifkan dan mencoba lagi (proses ini memerlukan waktu beberapa menit)? (y/T)? Y
  3. Tentukan wilayah: Pilih 31 (us-west-1)
  4. API [artifactregistry.googleapis.com] tidak diaktifkan pada project [613162942481]. Apakah Anda ingin mengaktifkan dan mencoba lagi (proses ini memerlukan waktu beberapa menit)? (y/T)? Y
  5. Men-deploy dari sumber memerlukan repositori Docker Artifact Registry untuk menyimpan container yang dibangun. Repositori bernama [cloud-run-source-deploy] di region [us-west1] akan dibuat.
  6. Ingin melanjutkan (Y/t)? Y
  7. Izinkan pemanggilan yang tidak diautentikasi ke [my-inventory-api] (y/N)? Y

Terakhir, langkah ini akan memulai proses untuk mengambil kode sumber Anda, menyimpannya ke dalam container, mengirimnya ke Artifact Registry, lalu men-deploy layanan + revisi Cloud Run. Anda harus bersabar melalui proses ini (dapat memerlukan waktu 3-4 menit) dan Anda akan melihat proses diselesaikan dengan URL Layanan yang ditunjukkan kepada Anda.

Contoh operasi ditampilkan di bawah ini:

87ba8dbf88e8cfa4.png

Uji aplikasi.

Setelah kita men-deploy aplikasi ke Cloud Run, Anda dapat mengakses aplikasi API sebagai berikut:

  1. Catat URL Layanan dari langkah sebelumnya. Misalnya, pada penyiapan saya, ditampilkan sebagai https://my-inventory-api-bt2r5243dq-uw.a.run.app. Sebut saja <SERVICE_URL> ini.
  2. Buka browser dan akses 3 URL berikut untuk endpoint API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Harus sesuai dengan spesifikasi yang telah kami berikan di bagian sebelumnya dengan contoh Permintaan dan Respons API.

Mendapatkan Detail Layanan dari Cloud Run

Kami men-deploy Layanan API ke Cloud Run, lingkungan komputasi serverless. Kita dapat mengunjungi layanan Cloud Run melalui konsol Google Cloud kapan saja.

Dari menu utama, buka Cloud Run. Tindakan ini akan menampilkan daftar layanan yang telah Anda jalankan di Cloud Run. Anda akan melihat layanan yang baru saja di-deploy. Bergantung pada nama yang dipilih, Anda akan melihat sesuatu seperti ini:

2633965c4bc957cc.pngS

Klik nama Layanan untuk melihat detailnya. Detail contoh ditampilkan di bawah ini:

33042ae64322ce07.pngS

Perhatikan URL ini, yang hanyalah URL layanan yang dapat Anda masukkan ke browser dan mengakses Inventory API yang baru saja di-deploy. Lihat Metrik dan detail lainnya.

Mari mulai dengan Google Cloud Operations Suite sekarang.

4. Membuat Topik Pub/Sub untuk Menerima Notifikasi Pemberitahuan

Untuk membuat topik Pub/Sub, Anda dapat mengikuti langkah-langkah berikut di Google Cloud Console:

  1. Telusuri Pub/Sub di Kotak penelusuran, lalu buka Pub/Sub. 935028bd8f6328ef.pngS
  2. Klik tab Topik jika belum berada di sana. 7fd8bf91386a88fd.png
  3. Klik tombol Create Topic. cd9d197f9023c41b.png
  4. Masukkan nama yang dapat dikenali untuk topik Anda.

173f313b4a3c4934.pngS

  1. Klik tombol Buat. ca9a02477da21a44.png
  2. Salin Nama topik menggunakan tombol ikon salin. Anda akan membutuhkannya untuk bagian berikutnya.

20848252ee83df93.pngS

5. Membuat Kebijakan Pemberitahuan untuk Error

Menjelajahi Log Error

Untuk melihat log error aplikasi:

Klik tab Logging.

Tindakan ini akan menampilkan antarmuka log tempat Anda dapat secara khusus memilih/membatalkan pilihan berbagai Resource (Project, Resource Google Cloud, nama layanan, dll.) bersama dengan Log Level untuk memfilter pesan log sesuai kebutuhan.

6605b68395185b89.pngS

Simulasikan beberapa permintaan yang tidak valid ke Layanan Inventaris dengan memberikan ID produk yang bukan salah satu dari I-1, I-2, dan I-3. Misalnya, permintaan yang salah adalah:

https://&lt;SERVICE_URL&gt;/inventory/I-999

Sekarang kita akan mencari semua PERINGATAN yang telah dibuat oleh API, jika ID Produk yang salah diberikan di Kueri.

Membuat Kebijakan Pemberitahuan Berbasis Log Kustom untuk Error

Misalkan kita ingin mewaspadai kemunculan pesan error yang sangat spesifik untuk suatu bagian aplikasi. Misalnya, jika kami melihat banyak sekali error saat mencari ID Produk. Masalah ini adalah gejala dari berbagai kemungkinan masalah (link yang buruk, inkonsistensi database, atau bot yang menghitung situs kami). Meskipun sulit atau tidak mungkin untuk membayangkan setiap kemungkinan penyebab, aplikasi yang mengirimkan pesan ini sekalipun adalah masalah tingkat tinggi yang perlu diketahui. Untuk memperingatkannya, kita perlu membuat kebijakan berdasarkan data di log error.

  1. Di Kotak Kueri, sisipkan parameter kueri berikut:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "PERINGATAN dalam aplikasi: Permintaan inventaris yang diterima untuk ID produk salah"

Ini akan terlihat seperti berikut:

f672154cfebf0051.png

  1. Klik Run Query. Selanjutnya, semua permintaan yang masuk dan yang bermasalah akan ditampilkan.

77c190e3a2fab6bf.png

  1. Untuk mengonversi informasi di atas menjadi pemberitahuan, klik tombol Buat pemberitahuan yang Anda lihat di Logs Explorer tepat di bawah kolom kueri, di sebelah kanan:

4cd3fcf142189376.png

  1. Tindakan ini akan memunculkan formulir untuk membuat kebijakan pemberitahuan berbasis log.

b82446854bad87fc.png

  1. Gunakan kueri awal untuk log yang perlu disertakan dalam pemberitahuan:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.pngS

  1. Tetapkan frekuensi notifikasi dan durasi insiden. Untuk tujuan contoh, Anda dapat menggunakan nilai minimum untuk setiap nilai:

bb3d96448ec998a1.png

  1. Akhirnya, untuk "Siapa yang harus diberi tahu?" pilih saluran notifikasi Pub/Sub yang Anda buat sebelumnya:

3593c48c29d4b76c.pngS

  1. Klik Simpan. Untuk melihat dan mengelola kebijakan pemberitahuan, buka halaman Alerting dan periksa di bagian Kebijakan: ca08ea380fb37c91.png

6. Selamat

Selamat, Anda telah berhasil mengonfigurasi Cek Uptime untuk mengirim pemberitahuan ke Pub/Sub.