在 Cloud Monitoring 中監控 Pub/Sub

您可以使用 Google Cloud 控制台或 Cloud Monitoring API 監控 Pub/Sub。

本文說明如何使用 Monitoring,在 Google Cloud 控制台中監控 Pub/Sub 使用情形。

  • 如要查看其他 Google Cloud 資源的指標 (除了 Pub/Sub 指標),請使用 Monitoring。

  • 否則,您可以使用 Pub/Sub 提供的監控資訊主頁。請參閱「監控主題」和「監控訂閱項目」。

如需在自動調度資源中運用指標的最佳做法,請參閱將 Pub/Sub 指標做為調度訊號的最佳做法

事前準備

請在使用 Monitoring 之前,確認您已準備好下列項目:

  • Cloud Billing 帳戶

  • 已啟用計費功能的 Pub/Sub 專案

如要確認您是否兩者都擁有,請完成使用 Cloud 控制台的快速入門導覽課程

查看現有資訊主頁

您可以在同一個環境中查看及分析不同來源的資料。Google Cloud 提供預先定義和自訂資訊主頁。舉例來說,您可以查看預先定義的 Pub/Sub 資訊主頁,也可以建立自訂資訊主頁,顯示與 Pub/Sub 相關的指標資料、快訊政策和記錄項目。

如要使用 Cloud Monitoring 監控 Pub/Sub 專案,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Monitoring」頁面。

    前往「Monitoring」

  2. 如果尚未在頁面頂端選取專案名稱,請立即選取。

  3. 按一下導覽選單中的「資訊主頁」

  4. 在「資訊主頁總覽」頁面中,建立新的資訊主頁,或選取現有的「Pub/Sub」資訊主頁。

    如要搜尋現有的 Pub/Sub 資訊主頁,請在「所有資訊主頁」的篩選器中選取「名稱」屬性,然後輸入 Pub/Sub

如要進一步瞭解如何建立、編輯及管理自訂資訊主頁,請參閱「管理自訂資訊主頁」一文。

查看單一 Pub/Sub 指標

如要使用 Google Cloud 控制台查看單一 Pub/Sub 指標,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Monitoring」頁面。

    前往「Monitoring」

  2. 在導覽窗格中,選取「指標探索器」

  3. 在「設定」部分中,按一下「選取指標」

  4. 在篩選條件中輸入 Pub/Sub

  5. 在「Active resources」(有效資源) 中,選取「Pub/Sub Subscription」(Pub/Sub 訂閱) 或「Pub/Sub Topic」(Pub/Sub 主題)

  6. 向下鑽研至特定指標,然後按一下「套用」

    系統會開啟特定指標的頁面。

如要進一步瞭解監控資訊主頁,請參閱 Cloud Monitoring 說明文件。

查看 Pub/Sub 指標和資源類型

存取 PromQL 編輯器

Metrics Explorer是 Cloud Monitoring 內建的介面,專門用於探索及視覺化呈現指標資料。在 Metrics Explorer 中,您可以使用 Prometheus 查詢語言 (PromQL) 查詢及分析 Pub/Sub 指標。

如要在Metrics Explorer中存取程式碼編輯器,並使用 PromQL 查詢 Cloud Monitoring 指標,請參閱「使用程式碼編輯器進行 PromQL 查詢」。

舉例來說,您可以輸入 PromQL 查詢,監控在過去 1 小時內傳送至特定訂閱項目的訊息數量:

sum(
  increase({
    "__name__"="pubsub.googleapis.com/subscription/sent_message_count",
    "monitored_resource"="pubsub_subscription",
    "project_id"="your-project-id",
    "subscription_id"="your-subscription-id"
  }[1h])
)

監控配額用量

您可針對特定專案使用 IAM 與管理員配額資訊主頁,檢視目前的配額及用量。

您可以使用下列指標查看歷來配額使用量:

這些指標會使用受監控的consumer_quota資源類型。如需更多配額相關指標,請參閱「指標清單」。

舉例來說,下列 PromQL 查詢會建立圖表,顯示每個區域使用的發布商配額比例:

sum by (quota_metric, location) (
  rate({
    "__name__"="serviceruntime.googleapis.com/quota/rate/net_usage",
    "monitored_resource"="consumer_quota",
    "service"="pubsub.googleapis.com",
    "quota_metric"="pubsub.googleapis.com/regionalpublisher"
  }[${__interval}])
)
/
(max by (quota_metric, location) (
  max_over_time({
    "__name__"="serviceruntime.googleapis.com/quota/limit",
    "monitored_resource"="consumer_quota",
    "service"="pubsub.googleapis.com",
    "quota_metric"="pubsub.googleapis.com/regionalpublisher"
  }[${__interval}])
) / 60 )

如果您預期用量會超過預設配額限制,請為所有相關配額建立快訊政策。當用量達到限制的某個比例時,系統就會觸發這些快訊。舉例來說,如果任何 Pub/Sub 配額用量超過 80%,下列 PromQL 查詢就會觸發警告政策:

sum by (quota_metric, location) (
  increase({
    "__name__"="serviceruntime.googleapis.com/quota/rate/net_usage",
    "monitored_resource"="consumer_quota",
    "service"="pubsub.googleapis.com"
  }[1m])
)
/
max by (quota_metric, location) (
   max_over_time({
    "__name__"="serviceruntime.googleapis.com/quota/limit",
    "monitored_resource"="consumer_quota",
    "service"="pubsub.googleapis.com"
  }[1m])
)
> 0.8

如要進一步自訂配額指標的監控和快訊,請參閱使用配額指標

如要進一步瞭解配額,請參閱「配額與限制」。

維持有效的訂閱方案

如要維持訂閱項目的良好狀態,可以使用 Pub/Sub 提供的指標監控多項訂閱項目屬性。舉例來說,您可以監控未確認訊息的數量、訊息確認期限到期情形等。您也可以檢查訂閱項目是否正常運作,確保訊息傳送延遲時間較短

如要進一步瞭解特定指標,請參閱下文。

監控待處理訊息

如要確保訂閱者能跟上訊息的流動,請建立資訊主頁。資訊主頁會顯示所有訂閱項目的下列積壓工作指標,並依資源匯總:

建立警告政策,在這些值超出系統可接受的範圍時觸發。舉例來說,未確認訊息的絕對數量不一定有意義。如果訂閱的訊息量為每秒一百萬則,積壓一百萬則訊息或許可以接受,但如果訂閱的訊息量為每秒一則,就無法接受。

常見的待處理事項問題

問題 問題 解決方案
oldest_unacked_message_age_by_regionnum_unacked_messages_by_region 雙雙成長。 訂閱者跟不上訊息量
  • 新增更多訂閱者執行緒或程序。
  • 新增更多訂閱端機器或容器。
  • 檢查程式碼是否有錯誤,導致程式碼無法順利確認或及時處理訊息。請參閱監控確認期限到期時間
如果積壓工作量穩定且不大,但 oldest_unacked_message_age_by_region 持續增加,可能表示有幾則訊息無法處理。 無法傳送的訊息
  • 檢查應用程式記錄,瞭解是否有某些訊息導致程式碼異常終止。違規訊息不太可能卡在 Pub/Sub 中,而不是在用戶端。確認程式碼可順利處理每則訊息後,請提出支援案件。
  • 如果某些訊息導致程式碼當機,建議將這些訊息轉送至dead-letter 主題
oldest_unacked_message_age_by_region超過訂閱訊息保留時間 永久遺失資料
  • 設定快訊,在訊息保留時間到期前觸發。

監控傳遞延遲時間健康狀態

在 Pub/Sub 中,傳送延遲時間是指發布的訊息傳送至訂閱端所需的時間。如果訊息待處理量增加,可以使用「傳送延遲健康狀態分數」 (subscription/delivery_latency_health_score) 檢查導致延遲時間增加的因素。

這項指標會衡量單一訂閱項目在 10 分鐘的滾動時間範圍內的健康狀態。這項指標可深入瞭解下列條件,訂閱項目必須符合這些條件,才能持續保持低延遲:

  • 可忽略的搜尋要求。

  • 可忽略的負面確認訊息 (NACK) 訊息。

  • 過期訊息確認期限可忽略不計。

  • 確認延遲時間一律少於 30 秒。

  • 使用率持續偏低,表示訂閱項目有足夠容量處理新訊息。

「傳遞延遲時間健康狀態分數」指標會針對每個指定條件回報 0 或 1 分。1 分代表健康狀態良好,0 分則代表健康狀態不良。

  • 搜尋要求:如果訂閱項目在過去 10 分鐘內有任何搜尋要求,分數會設為 0。訂閱可能會導致舊訊息在首次發布後很久才重新傳送,進而增加傳送延遲。

  • 負面確認 (nack) 的訊息:如果訂閱項目在過去 10 分鐘內有任何負面確認 (nack) 要求,分數會設為 0。如果收到負面確認,系統會重新傳送訊息,但傳送延遲時間會增加。

  • 過期的確認期限:如果訂閱項目在過去 10 分鐘內有任何過期的確認期限,分數會設為 0。如果訊息的確認期限已過,系統會重新傳送訊息,但傳送延遲時間會增加。

  • 確認延遲:如果過去 10 分鐘內所有確認延遲的第 99.9 個百分位數曾大於 30 秒,分數就會設為 0。確認延遲時間過長表示訂閱端用戶端處理訊息的時間異常長。這個分數可能代表訂閱端有錯誤或資源限制。

  • 用量偏低:系統會根據各訂閱方案類型,以不同方式計算用量。

    • StreamingPull:如果開啟的串流不足,分數會設為 0。開啟更多串流,確保有足夠的容量來處理新訊息。

    • 推送:如果發送端有太多待處理的訊息,分數會設為 0。增加推送端點的容量,以便接收新訊息。