排解未收到通知的問題

如要診斷及解決 Cloud Monitoring 警告通知遺失的問題,請在 Logs Explorer 中檢查 notification_channel_events 記錄。接著,您就能修正 Webhook、Pub/Sub 和簡訊管道的傳送和設定問題,或是調整虛擬機器 (VM) 關機和要求計數指標的快訊政策。

未收到通知

如果透過任何已設定的通知管道都未收到通知,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。

  2. 選取適當的 Google Cloud 專案。
  3. 查詢通知管道事件的記錄:

    1. 展開「記錄名稱」選單,然後選取「notification_channel_events」。
    2. 展開「嚴重性」選單,然後選取「錯誤」。
    3. 選用:如要選取自訂時間範圍,請使用時間範圍選取器。
    4. 點選「執行查詢」。

    先前的步驟會建立下列查詢:

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

    摘要行和 jsonPayload 欄位通常包含失敗資訊。舉例來說,如果發生閘道錯誤,摘要行會顯示「failed with 502 Bad Gateway」。

未收到 Webhook 通知

如果無法透過已設定的 Webhook 通知管道接收通知,請參閱本節內容。

私人端點

如果您有私人端點,請使用 Pub/Sub 通知,並搭配該通知主題的提取訂閱項目。您無法使用 Webhook 將通知傳送至私人端點。

設定 Pub/Sub 通知管道後,系統會將快訊通知傳送至具有身分與存取權管理控制項的 Pub/Sub 佇列。任何可查詢或監聽 Pub/Sub 主題的服務,都能接收這些通知。舉例來說,在 App Engine、Cloud Run 或 Compute Engine 虛擬機器上執行的應用程式,都可以使用這些通知。

如果您使用提取訂閱項目,系統會向 Google 傳送要求,等待訊息送達。這些訂閱項目需要存取 Google,但不需要防火牆或輸入存取規則。

公開端點

如要找出傳送失敗的原因,請檢查 Cloud Logging 記錄項目中的失敗資訊。

舉例來說,您可以使用 Logs Explorer,透過下列篩選條件搜尋通知管道資源的記錄項目:

resource.type="stackdriver_notification_channel"

未收到 Pub/Sub 通知

如果無法透過已設定的 Pub/Sub 通知管道接收通知,記錄有助於診斷及解決失敗問題。本節說明系統在通知傳送失敗時寫入的記錄項目。您可以參考本節資訊,解決失敗原因。

記錄包含 Failed to authenticate as service account 錯誤

查詢 notification_channel_events 記錄中的錯誤時,您可能會發現 summary 欄位包含下列訊息的記錄項目:

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

如果通知服務帳戶不存在,就會發生這個錯誤。因此系統不會傳送通知。

如要確認服務帳戶是否存在,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「IAM」頁面:

    前往 IAM

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「IAM & Admin」(IAM 與管理) 的結果。

  2. 搜尋符合下列命名慣例的服務帳戶:

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

    如果未列出這個服務帳戶,請選取「包含 Google 提供的角色授權」。

如要觸發 Monitoring 建立通知服務帳戶,請開始建立 Pub/Sub 通知管道:

  1. 前往 Google Cloud 控制台的 「Alerting」(警告) 頁面:

    前往「Alerting」(警告)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。

  2. 按一下「編輯通知管道」。
  3. 在「Pub/Sub」部分中,按一下「新增」。

    如果通知服務帳戶不存在,監控服務會建立該帳戶。「建立 Pub/Sub 管道」對話方塊會顯示通知服務帳戶的名稱。

  4. 如不想新增通知管道,請按一下「取消」。 否則,請完成通知管道建立程序,然後按一下「新增管道」。

  5. 授予服務帳戶將訊息發布至 Pub/Sub 主題的權限:

    1. 在新瀏覽器分頁中開啟「建立通知管道」文件。
    2. 選取「Pub/Sub」分頁,然後按照頁面「授權服務帳戶」部分中的步驟操作。

記錄包含 PERMISSION_DENIED 錯誤

查詢 notification_channel_events 記錄中的錯誤時,您可能會發現 summary 欄位包含下列訊息的記錄項目:

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

如果通知服務帳戶未獲授權,無法針對感興趣的 Pub/Sub 主題傳送通知,或是專案中未啟用 Pub/Sub API,就會發生這項錯誤。

如要查看服務帳戶的權限,可以使用Google Cloud 控制台或 Google Cloud CLI 指令:

  • Google Cloud 控制台的「IAM」頁面會列出每個服務帳戶的角色。
  • Google Cloud 控制台的 Pub/Sub「主題」頁面會列出每個主題。選取主題後,「權限」分頁會列出授予服務帳戶的角色。
  • 如要列出所有服務帳戶及其角色,請執行下列 Google Cloud CLI 指令:

    gcloud projects get-iam-policy PROJECT_ID
    

    以下是這項指令的部分回覆:

    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
    

    指令回應只會列出角色,不會列出每個主題的授權。

  • 如要列出特定主題的 IAM 繫結,請執行下列指令:

    gcloud pubsub topics get-iam-policy TOPIC_ID
    

    這項指令的回應範例如下:

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

如要瞭解如何授權通知服務帳戶,請參閱「授權服務帳戶」。

記錄包含 FAILED_PRECONDITION 錯誤

查詢 notification_channel_events 記錄中的錯誤時,您可能會發現 summary 欄位包含下列訊息的記錄項目:

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

如果目標主題不符合必要的前提條件,Pub/Sub 就會拒絕監控服務的發布要求,並顯示這個錯誤。這項錯誤的常見原因包括:

  • 訊息儲存政策和資料落地限制:主題的訊息儲存政策會限制可處理或儲存訊息的 Google Cloud 區域:

    • 在禁止的區域強制執行傳輸中限制:主題的訊息儲存政策已將 enforceInTransit 設為 true,且發布要求傳送至 allowedPersistenceRegions 以外的區域。如果 enforceInTransit 為 true,Pub/Sub 會拒絕來自禁止區域的要求,而不是重新導向。如果主題使用 AI 推論單一訊息轉換,則發布區域也必須允許轉換。
    • 受限制的允許持續性區域:主題已設為 enforceInTransit 和 false,且發布要求來自 allowedPersistenceRegions 以外的區域,但 Pub/Sub 無法重新導向要求,因為沒有可用的叢集,且 allowedPersistenceRegions 只包含私人或受限制的區域。
    • 跨區域同步複製,但沒有有效的次要區域: 主題使用跨區域同步複製,且有訊息 儲存政策,但 allowedPersistenceRegions 不包含發布位置的有效次要複製區域。
    • 區域端點未強制執行傳輸中限制:發布要求會轉送至區域端點,但主題的訊息儲存政策已將 enforceInTransit 設為 false。

    如要解決訊息儲存政策錯誤,請更新主題的訊息儲存政策或單一訊息轉換區域設定,確保 allowedPersistenceRegions 包含發布區域和所有必要的次要複寫區域,或在不需要強制執行傳輸中區域時,將 enforceInTransit 設為 false。

  • 客戶自行管理的加密金鑰 (CMEK) 錯誤:您的主題已設為使用 Cloud Key Management Service (Cloud KMS) 的客戶自行管理的加密金鑰,但 Pub/Sub 無法加密發布的訊息:

    • Cloud KMS 金鑰權限遭拒:當 Pub/Sub 嘗試加密訊息時,Cloud KMS 會傳回 PERMISSION_DENIED 錯誤,Pub/Sub 則會回報為 FAILED_PRECONDITION。舉例來說,如果 Pub/Sub 服務代理在金鑰上沒有 CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色,就會發生這個錯誤。
    • Cloud KMS 金鑰狀態無法使用:Cloud KMS 會傳回 FAILED_PRECONDITION 錯誤,因為金鑰版本已停用或刪除,或是無法連線至外部金鑰管理員金鑰。

    如要解決 CMEK 錯誤,請確認 Cloud KMS 金鑰版本已啟用且可存取,並確保 Pub/Sub 服務代理具備金鑰的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。

系統不會在 VM 關機時通知您

如要在虛擬機器 (VM) 關機時收到通知,請建立運作時間檢查,定期查詢 VM,然後建立警告政策來監控該項運作時間檢查。如果您使用虛擬私有雲 (VPC),可能需要建立私人正常運作時間檢查。

監控 compute.googleapis.com/instance/uptime 指標的警告政策不會在 VM 關機時通知您。對於這項指標,只有處於 RUNNING 狀態的 VM 執行個體,警報政策才會監控其時間序列。如果 VM 處於任何其他狀態 (例如 STOPPED 或 DELETED),系統就不會監控該 VM。如要瞭解 VM 執行個體狀態,請參閱 VM 執行個體生命週期。

未收到要求計數警告政策的通知

如果監控 serviceruntime.googleapis.com/api/request_count 指標的警告政策未發送通知,請確認政策的對齊週期不超過 7 小時 30 分鐘。

未收到簡訊通知訊息或驗證碼

如果沒有收到簡訊通知或驗證碼,請確認你尚未達到簡訊上限。您可能會在記錄中看到這項錯誤。查看 Denied quota token 的記錄。

請注意,簡訊並非可靠的通知管道,且在某些區域可能無法使用。請勿只透過簡訊管道傳送通知。請改為設定其他通知管道,例如電子郵件。