Pemberitahuan: Error Berbasis Log pada Topik Pub/Sub

1. Pengantar

Terakhir Diperbarui: 21 Juni 2023

Pemberitahuan tentang Error Berbasis Log untuk Ketersediaan

Pemberitahuan berbasis log dapat digunakan untuk menentukan ketersediaan aplikasi dengan memantau peristiwa atau pola tertentu dalam log*.* Dengan mendapatkan pemberitahuan tentang gangguan atau masalah lain yang dihadapi pengguna, Anda dapat mengambil langkah-langkah untuk meminimalkan dampaknya terhadap pengguna dan pelanggan.

Meskipun pemeriksaan waktu aktif memberikan gambaran umum ketersediaan, mungkin lebih akurat untuk menggunakan pesan error yang berasal dari log sebagai indikator jenis ketidaktersediaan yang lebih spesifik, dan untuk mendapatkan gambaran tentang proporsi pengguna yang mengalami masalah.

Error dapat muncul karena berbagai penyebab, mulai dari kesalahan pengguna hingga pemeliharaan, upgrade, dan bahkan faktor eksternal pada sistem, seperti cuaca buruk. Kunci dalam pemberitahuan adalah tidak mencoba mengantisipasi semua kemungkinan penyebab, tetapi memilih beberapa gejala utama yang dapat menjadi awal untuk pemecahan masalah.

Topik Pub/Sub sebagai Saluran Notifikasi Pemberitahuan

Topik Pub/Sub dapat digunakan sebagai saluran notifikasi Google Cloud Monitoring untuk mengirimkan 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 mengirimkan pesan ke topik Pub/Sub. Pelanggan langganan Pub/Sub kemudian 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 untuk 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

Pilih atau Buat Project Google Cloud

Untuk memilih project yang ada, gunakan 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 diarahkan 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 Anda.
  • Akun penagihan: Anda dapat menggunakan akun penagihan yang ada atau membuat akun penagihan baru.
  • Buat: Setelah Anda memasukkan semua informasi yang diperlukan, klik tombol Buat untuk membuat project Anda.

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

3. Men-deploy Aplikasi API

Apa yang dimaksud dengan aplikasi atau API contoh?

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

Setelah men-deploy API dan menganggapnya 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 productid dan tingkat inventaris di tangan untuk produk tersebut.

Data respons yang ditampilkan adalah format JSON.

Catatan: Aplikasi API ini hanya untuk tujuan demo dan tidak mewakili penerapan API yang aman dan tangguh. Aplikasi ini dimaksudkan agar tersedia dengan cepat bagi kita, untuk mempelajari tujuan utama lab, yaitu Operasi Google Cloud.

Contoh Data dan Permintaan/Respons API

Aplikasi tidak didukung oleh database di backend untuk mempermudah. File ini berisi 3 ID produk contoh dan tingkat inventaris di tangan.

ID Produk

Tingkat Inventaris di Tangan

I-1

10

I-2

20

I-3

30

Contoh Permintaan dan Respons API ditampilkan di bawah:

Permintaan API

Respons API

https://<somehost>/inventory

[ { "I-1": 10, "I-2": 20, "I-3": 30 }]

https://<somehost>/inventory/I-1

{ "productid": "I-1", "qty": 10}

https://<somehost>/inventory/I-2

{ "productid": "I-2", "qty": 20}

https://<somehost>/inventory/I-200

{ "productid": I-200, "qty": -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 Konsol GCP, 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

Virtual machine ini dimuat dengan semua alat pengembangan yang Anda perlukan. 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

Tindakan ini akan membuat folder berjudul cloud-code-sample-repository di folder ini.

(Opsional) Jalankan aplikasi di Cloud Shell

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

  1. Dari terminal, buka API versi Python 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 sudah diinstal dan kita akan menggunakan versi default. Jika Anda berencana menjalankannya secara lokal di laptop, Anda dapat menggunakan Python 3.8+) :

$ python app.py

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

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

Klik Preview on port 8080. 5. Tindakan ini akan membuka jendela browser. Anda akan melihat Error 404 dan itu tidak masalah. Ubah URL dan ubah agar hanya memiliki /inventory setelah nama host.

Misalnya, di komputer saya, tampilannya 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.png

  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 .

Anda akan ditanyai beberapa pertanyaan dan beberapa poinnya disebutkan di bawah:

  1. Nama layanan (python-flask-api): Gunakan nama default ini atau pilih nama lain seperti my-inventory-api
  2. API [run.googleapis.com] tidak diaktifkan di project [613162942481]. Apakah Anda ingin mengaktifkan dan mencoba lagi (proses ini akan memerlukan waktu beberapa menit)? (y/N)? Y
  3. Tentukan region: Pilih 31 (us-west-1)
  4. API [artifactregistry.googleapis.com] tidak diaktifkan di project [613162942481]. Apakah Anda ingin mengaktifkan dan mencoba lagi (proses ini akan memerlukan waktu beberapa menit)? (y/N)? Y
  5. Men-deploy dari sumber memerlukan repositori Docker Artifact Registry untuk menyimpan container yang di-build. Repositori bernama [cloud-run-source-deploy] di region [us-west1] akan dibuat.
  6. Do you want to continue (Y/n)? Y
  7. Allow unauthenticated invocations to [my-inventory-api] (y/N)? Y

Pada akhirnya, hal ini akan memulai proses untuk mengambil kode sumber Anda, memasukkannya ke dalam container, mengirimkannya ke Artifact Registry, lalu men-deploy layanan + revisi Cloud Run. Anda harus bersabar selama proses ini (dapat memakan waktu 3-4 menit) dan Anda akan melihat proses selesai dengan URL Layanan ditampilkan kepada Anda.

Contoh eksekusi ditampilkan di bawah:

87ba8dbf88e8cfa4.png

Menguji aplikasi

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

  1. Catat URL Layanan dari langkah sebelumnya. Misalnya, di penyiapan saya, ditampilkan sebagai https://my-inventory-api-bt2r5243dq-uw.a.run.app. Mari kita sebut ini <SERVICE_URL>.
  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

Hal ini 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 Anda jalankan di Cloud Run. Anda akan melihat layanan yang baru saja di-deploy. Bergantung pada nama yang Anda pilih, Anda akan melihat sesuatu seperti ini:

2633965c4bc957cc.png

Klik Nama layanan untuk melihat detailnya. Detail sampel ditampilkan di bawah:

33042ae64322ce07.png

Perhatikan URL-nya, yang tidak lain adalah URL layanan yang dapat Anda masukkan ke browser dan akses Inventory API yang baru saja kita deploy. Lihat Metrik dan detail lainnya.

Mari kita mulai menggunakan 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 Konsol Google Cloud:

  1. Telusuri Pub/Sub di kotak Penelusuran, lalu buka Pub/Sub. 935028bd8f6328ef.png
  2. Klik tab Topics jika Anda belum membukanya. 7fd8bf91386a88fd.png
  3. Klik tombol Create Topic. cd9d197f9023c41b.png
  4. Masukkan nama yang mudah dikenali untuk topik Anda.

173f313b4a3c4934.png

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

20848252ee83df93.png

5. Membuat Kebijakan Pemberitahuan untuk Error

Mempelajari 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.) beserta Tingkat Log untuk memfilter pesan log sesuai kebutuhan.

6605b68395185b89.png

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

https://<SERVICE_URL>/inventory/I-999

Sekarang kita akan menelusuri semua PERINGATAN yang telah dihasilkan oleh API kita, saat ID Produk yang salah diberikan dalam Kueri.

Membuat Kebijakan Pemberitahuan Berbasis Log Kustom untuk Error

Misalnya, kita ingin memantau kemunculan pesan error yang sangat spesifik untuk sebagian aplikasi. Misalnya, jika kami melihat sejumlah besar error saat mencari ID Produk. Masalah ini adalah gejala dari banyak kemungkinan masalah (link yang rusak, inkonsistensi database, atau bot yang menghitung situs kami). Meskipun sulit atau tidak mungkin untuk membayangkan setiap kemungkinan penyebab, aplikasi yang mengirim pesan ini bahkan sekali saja adalah masalah tingkat tinggi yang perlu kami ketahui. Untuk mendapatkan pemberitahuan tentang error tersebut, kita perlu membuat kebijakan berdasarkan data dalam log error.

  1. Di Kotak Kueri, masukkan parameter kueri berikut:

resource.type="cloud_run_revision"

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

Ini akan terlihat seperti berikut:

f672154cfebf0051.png

  1. Klik Run Query. Kemudian, semua permintaan yang masuk dan yang mengalami masalah ini akan ditampilkan.

77c190e3a2fab6bf.png

  1. Untuk mengonversi hal 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 menampilkan formulir untuk membuat kebijakan pemberitahuan berbasis log.

b82446854bad87fc.png

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

resource.type="cloud_run_revision"

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

764227db73ec3de6.png

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

bb3d96448ec998a1.png

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

3593c48c29d4b76c.png

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

6. Selamat

Selamat, Anda telah berhasil mengonfigurasi Pemeriksaan Uptime untuk mengirimkan pemberitahuan ke Pub/Sub.