Memecahkan masalah notifikasi yang tidak muncul

Anda dapat mendiagnosis dan menyelesaikan masalah notifikasi pemberitahuan Cloud Monitoring yang tidak ada dengan memeriksa log notification_channel_events di Logs Explorer. Kemudian, Anda dapat memperbaiki masalah pengiriman dan konfigurasi di seluruh saluran webhook, Pub/Sub, dan SMS, atau menyesuaikan kebijakan pemberitahuan untuk penonaktifan virtual machine (VM) dan metrik jumlah permintaan.

Notifikasi tidak diterima

Jika Anda tidak menerima notifikasi apa pun melalui saluran notifikasi yang dikonfigurasi, lakukan langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman Logs Explorer:

    Buka Logs Explorer

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.

  2. Pilih project Google Cloud yang sesuai.
  3. Kueri log untuk peristiwa saluran notifikasi:

    1. Luaskan menu Nama log dan pilih notification_channel_events.
    2. Luaskan menu Severity, lalu pilih Error.
    3. Opsional: Untuk memilih rentang waktu kustom, gunakan pemilih rentang waktu.
    4. Klik Run query.

    Langkah-langkah sebelumnya membuat kueri berikut:

    resource.type:"stackdriver_notification_channel"
    logName="projects/PROJECT_ID/logs/monitoring.googleapis.com%2Fnotification_channel_events"
    severity=ERROR
    

    Baris ringkasan dan kolom jsonPayload biasanya berisi informasi kegagalan. Misalnya, saat terjadi error gateway, baris ringkasan akan menyertakan "gagal dengan 502 Bad Gateway".

Notifikasi webhook tidak diterima

Bagian ini berlaku jika Anda tidak menerima notifikasi melalui saluran notifikasi webhook yang dikonfigurasi.

Endpoint pribadi

Jika Anda memiliki endpoint pribadi, gunakan notifikasi Pub/Sub yang dikombinasikan dengan langganan pull ke topik notifikasi tersebut. Anda tidak dapat menggunakan webhook untuk notifikasi ke endpoint pribadi.

Saat Anda mengonfigurasi saluran notifikasi Pub/Sub, notifikasi pemberitahuan akan dikirim ke antrean Pub/Sub yang memiliki kontrol Identity and Access Management. Layanan apa pun yang dapat membuat kueri atau memproses topik Pub/Sub dapat menggunakan notifikasi ini. Misalnya, aplikasi yang berjalan di virtual machine App Engine, Cloud Run, atau Compute Engine dapat menggunakan notifikasi ini.

Jika Anda menggunakan langganan pull, permintaan akan dikirim ke Google yang menunggu pesan tiba. Langganan ini memerlukan akses ke Google, tetapi tidak memerlukan aturan untuk firewall atau akses masuk.

Endpoint publik

Untuk mengidentifikasi alasan pengiriman gagal, periksa entri log Cloud Logging Anda untuk mengetahui informasi kegagalan.

Misalnya, Anda dapat menelusuri entri log untuk resource saluran notifikasi menggunakan Logs Explorer, dengan filter seperti berikut:

resource.type="stackdriver_notification_channel"

Notifikasi Pub/Sub tidak diterima

Jika Anda tidak menerima notifikasi melalui saluran notifikasi Pub/Sub yang dikonfigurasi, log dapat membantu Anda mendiagnosis dan menyelesaikan kegagalan tersebut. Bagian ini menjelaskan entri log yang ditulis sistem saat notifikasi gagal dikirim. Anda dapat menggunakan informasi di bagian ini untuk menyelesaikan alasan kegagalan.

Log mencakup error Failed to authenticate as service account

Saat membuat kueri log notification_channel_events untuk mencari error, Anda mungkin menemukan entri log yang kolom summary-nya menyertakan pesan berikut:

Failed to authenticate as service account service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com

Error ini terjadi saat akun layanan notifikasi tidak ada. Akibatnya, notifikasi tidak dikirim.

Untuk memverifikasi bahwa akun layanan ada, lakukan hal berikut:

  1. Di konsol Google Cloud , buka halaman IAM:

    Buka IAM

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah IAM & Admin.

  2. Telusuri akun layanan yang memiliki konvensi penamaan berikut:

    service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
    

    Jika akun layanan ini tidak tercantum, pilih Sertakan pemberian peran yang disediakan Google.

Untuk memicu Monitoring membuat akun layanan notifikasi, mulai proses pembuatan saluran notifikasi Pub/Sub:

  1. Di konsol Google Cloud , buka halaman  Pemberitahuan:

    Buka Pemberitahuan

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.

  2. Klik Edit saluran notifikasi.
  3. Di bagian Pub/Sub, klik Tambahkan baru.

    Monitoring membuat akun layanan notifikasi jika akun tersebut belum ada. Dialog Buat Channel Pub/Sub menampilkan nama akun layanan notifikasi.

  4. Jika Anda tidak ingin menambahkan saluran notifikasi, klik Batal. Jika tidak, selesaikan pembuatan saluran notifikasi dan klik Tambahkan saluran.

  5. Beri akun layanan izin untuk memublikasikan ke topik Pub/Sub Anda:

    1. Di tab browser baru, buka dokumen Membuat saluran notifikasi.
    2. Pilih tab Pub/Sub, lalu ikuti langkah-langkah di bagian Authorize service account di halaman tersebut.

Log mencakup error PERMISSION_DENIED

Saat membuat kueri log notification_channel_events untuk mencari error, Anda mungkin menemukan entri log yang kolom summary-nya menyertakan pesan berikut:

An error occurred while publishing notification to Cloud Pub/Sub topic TOPIC_ID. Possible causes: 1) you don't have the required role (https://cloud.google.com/monitoring/support/notification-options#pubsub); or 2) Cloud Pub/Sub API is not enabled in your project: PERMISSION_DENIED

Error ini terjadi saat akun layanan notifikasi belum diizinkan untuk mengirim notifikasi untuk topik Pub/Sub yang diminati, atau saat Pub/Sub API tidak diaktifkan di project Anda.

Untuk melihat izin akun layanan, Anda dapat menggunakan konsolGoogle Cloud atau perintah Google Cloud CLI:

  • Halaman IAM di konsol Google Cloud mencantumkan peran untuk setiap akun layanan.
  • Halaman Topics Pub/Sub di konsol Google Cloud mencantumkan setiap topik. Saat Anda memilih topik, tab Izin mencantumkan peran yang diberikan ke akun layanan.
  • Untuk mencantumkan semua akun layanan dan perannya, jalankan perintah Google Cloud CLI berikut:

    gcloud projects get-iam-policy PROJECT_ID
    

    Berikut adalah respons sebagian untuk perintah ini:

    serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
       role: roles/monitoring.notificationServiceAgent
       - members:
       [...]
       role: roles/owner
       - members:
       - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
       role: roles/pubsub.publisher
    

    Respons perintah hanya mencakup peran; tidak mencakup otorisasi per topik.

  • Untuk mencantumkan binding IAM untuk topik tertentu, jalankan perintah berikut:

    gcloud pubsub topics get-iam-policy TOPIC_ID
    

    Berikut adalah contoh respons untuk perintah ini:

    bindings:
    - members:
       - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
       role: roles/pubsub.publisher
    etag: BwXPRb5WDPI=
    version: 1
    

Untuk mengetahui informasi tentang cara memberikan otorisasi pada akun layanan notifikasi, lihat Memberikan otorisasi pada akun layanan.

Log mencakup error FAILED_PRECONDITION

Saat membuat kueri log notification_channel_events untuk mencari error, Anda mungkin menemukan entri log yang kolom summary-nya menyertakan pesan berikut:

An error occurred while publishing notification to Cloud Pub/Sub topic TOPIC_ID: FAILED_PRECONDITION

Error ini terjadi saat Pub/Sub menolak permintaan publikasi dari Monitoring karena topik target tidak memenuhi prasyarat yang diperlukan. Penyebab umum error ini meliputi:

  • Kebijakan penyimpanan pesan dan batasan residensi data: Kebijakan penyimpanan pesan topik Anda membatasi Google Cloud region tempat pesan dapat diproses atau disimpan:

    • Penerapan dalam transit di wilayah yang tidak diizinkan: Kebijakan penyimpanan pesan topik telah ditetapkan enforceInTransit ke true, dan permintaan publikasi tiba di wilayah yang tidak termasuk dalam allowedPersistenceRegions. Jika enforceInTransit adalah true, Pub/Sub menolak permintaan dari region yang tidak diizinkan, bukan mengalihkannya. Jika topik menggunakan transformasi pesan tunggal inferensi AI, maka region publikasi juga harus diizinkan oleh transformasi.
    • Wilayah persisten yang diizinkan dan dibatasi: Topik memiliki enforceInTransit yang ditetapkan ke false dan permintaan publikasi tiba di luar allowedPersistenceRegions, tetapi Pub/Sub tidak dapat mengalihkan permintaan karena tidak ada cluster yang layak dan allowedPersistenceRegions hanya berisi wilayah pribadi atau terbatas.
    • Replikasi sinkron lintas region tanpa region sekunder yang valid: Topik menggunakan replikasi sinkron lintas region dan memiliki kebijakan penyimpanan pesan, tetapi allowedPersistenceRegions tidak menyertakan region replikasi sekunder yang valid untuk lokasi publikasi.
    • Endpoint regional tanpa penerapan saat transit: Permintaan publikasi dirutekan ke endpoint regional, tetapi kebijakan penyimpanan pesan topik memiliki enforceInTransit yang ditetapkan ke false.

    Untuk mengatasi error kebijakan penyimpanan pesan, perbarui kebijakan penyimpanan pesan topik atau konfigurasi region transformasi pesan tunggal sehingga allowedPersistenceRegions menyertakan region publikasi dan region replikasi sekunder yang diperlukan, atau tetapkan enforceInTransit ke false jika penegakan regional dalam transit tidak diperlukan.

  • Error kunci enkripsi yang dikelola pelanggan (CMEK): Topik Anda dikonfigurasi untuk menggunakan kunci enkripsi yang dikelola pelanggan dari Cloud Key Management Service (Cloud KMS), dan Pub/Sub tidak dapat mengenkripsi pesan yang dipublikasikan:

    • Izin ditolak pada kunci Cloud KMS: Cloud KMS menampilkan error PERMISSION_DENIED saat Pub/Sub mencoba mengenkripsi pesan, yang dilaporkan Pub/Sub sebagai FAILED_PRECONDITION. Misalnya, error ini terjadi saat agen layanan Pub/Sub tidak memiliki peran CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) pada kunci.
    • Status kunci Cloud KMS yang tidak dapat digunakan: Cloud KMS menampilkan error FAILED_PRECONDITION karena versi kunci dinonaktifkan atau dihancurkan, atau karena kunci pengelola kunci eksternal tidak dapat dijangkau.

    Untuk mengatasi error CMEK, verifikasi bahwa versi kunci Cloud KMS diaktifkan dan dapat dijangkau, serta pastikan agen layanan Pub/Sub memiliki peran roles/cloudkms.cryptoKeyEncrypterDecrypter pada kunci tersebut.

Anda tidak akan menerima notifikasi saat VM dimatikan

Untuk mendapatkan notifikasi saat virtual machine (VM) dimatikan, buat cek uptime untuk menginterogasi VM secara berkala, lalu buat kebijakan pemberitahuan untuk memantau cek uptime tersebut. Jika Anda menggunakan Virtual Private Cloud (VPC), Anda mungkin perlu membuat pemeriksaan uptime pribadi.

Kebijakan pemberitahuan yang memantau metrik compute.googleapis.com/instance/uptime tidak akan memberi tahu Anda saat VM dimatikan. Untuk metrik ini, kebijakan pemberitahuan hanya memantau deret waktu untuk instance VM yang dalam status RUNNING. Jika VM berada dalam status lain, seperti STOPPED atau DELETED, VM tersebut tidak dipantau. Untuk mengetahui informasi tentang status instance VM, lihat Siklus proses instance VM.

Notifikasi untuk kebijakan pemberitahuan jumlah permintaan tidak diterima

Jika Anda tidak menerima notifikasi untuk kebijakan pemberitahuan yang memantau metrik serviceruntime.googleapis.com/api/request_count, pastikan periode perataan kebijakan tidak lebih dari 7 jam 30 menit.

Pesan notifikasi SMS atau kode verifikasi tidak diterima

Jika Anda tidak menerima notifikasi SMS atau kode verifikasi, pastikan Anda belum mencapai batas pesan SMS. Mungkin ada log yang mengonfirmasi error ini. Periksa log Anda untuk Denied quota token.

Perhatikan bahwa SMS bukan jenis saluran notifikasi yang andal dan mungkin tidak tersedia di wilayah tertentu. Hindari mengandalkan saluran SMS saja untuk notifikasi. Sebagai gantinya, konfigurasi saluran notifikasi tambahan seperti email.