快訊:Pub/Sub 主題的記錄檔錯誤

1. 簡介

上次更新時間:2023 年 6 月 21 日

針對可用性記錄式錯誤設定快訊

您可以透過記錄檔快訊,監控記錄檔中的特定事件或模式,判斷應用程式的可用性。收到服務中斷或其他使用者相關問題的快訊後,您就能採取行動,盡量減少對使用者和客戶的影響。

雖然正常運作時間檢查可提供可用性的一般快照,但使用從記錄檔衍生的錯誤訊息做為指標,或許能更準確地瞭解特定類型的無法使用情形,並掌握遇到問題的使用者比例。

錯誤可能由多種原因造成,包括使用者錯誤、系統維護、升級,甚至是系統外部因素 (例如惡劣天氣)。快訊的重點不是嘗試預測所有可能原因,而是挑選幾個可做為疑難排解起點的重要徵兆。

將 Pub/Sub 主題設為快訊通知管道

Pub/Sub 主題可做為 Google Cloud Monitoring 通知管道,將快訊傳送至 Pub/Sub 訂閱項目。方便您將 Cloud Monitoring 快訊與其他系統 (包括第三方通知服務) 整合。

如要將 Pub/Sub 主題做為通知管道,請先建立 Pub/Sub 主題和 Pub/Sub 訂閱項目。接著,您需要建立 Cloud Monitoring 通知管道,並將 Pub/Sub 主題做為目的地。

觸發快訊時,Cloud Monitoring 會將訊息傳送至 Pub/Sub 主題。Pub/Sub 訂閱項目的訂閱者隨後即可處理訊息,並採取適當行動。

建構項目

在本程式碼研究室中,您將部署應用程式、建立 Pub/Sub 主題,並建立記錄型快訊,檢查應用程式特定部分的錯誤,並使用 Pub/Sub 主題做為通知管道。

課程內容

  • 如何建立 Pub/Sub 主題
  • 如何建立記錄式快訊

本程式碼研究室著重於建立錯誤快訊。我們不會對與主題無關的概念和應用程式程式碼多做介紹,但會事先準備好這些程式碼區塊,屆時您只要複製及貼上即可。

軟硬體需求

  • 具備下列權限的 Google Cloud 帳戶:
  • 部署 Cloud Run 應用程式
  • 建立 Pub/Sub 主題
  • 建立快訊

2. 開始設定

選取或建立 Google Cloud 專案

如要選取現有專案,請使用下拉式選單:

b35bf95b8bf3d5d8.png

如要在 Google Cloud 中建立新專案,請按照下列步驟操作:

  1. 前往 Google Cloud Platform Console
  2. 按一下「建立專案」按鈕。
  3. 請輸入專案名稱。
  4. 選取專案的帳單帳戶。
  5. 按一下 [建立] 按鈕。

系統會建立專案,並將您帶往專案資訊主頁。然後即可開始使用 Google Cloud 服務。

以下是各步驟的詳細說明:

  • 名稱:專案名稱在機構內不得重複。
  • 帳單帳戶:你可以使用現有的帳單帳戶或建立新帳戶。
  • 建立:輸入所有必要資訊後,按一下「建立」按鈕即可建立專案。

詳情請參閱 Google Cloud 專案建立說明文件

3. 部署 API 應用程式

範例應用程式或 API 的用途為何?

我們的應用程式是簡單的 Inventory API 應用程式,會公開 REST API 端點,並提供幾項作業來列出商品目錄項目,以及取得特定項目的商品目錄數量。

部署 API 後 (假設託管於 https://<somehost>),我們就能存取 API 端點,如下所示:

https://<somehost>/inventory

系統會列出所有產品項目,以及現有庫存量。

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

系統會提供單一記錄,其中包含該產品的產品 ID 和現有庫存量。

傳回的回應資料為 JSON 格式。

注意:這個 API 應用程式僅供示範用途,不代表安全且穩固的 API 實作方式。目的是讓我們快速取得應用程式,探索實驗室的主要用途,也就是 Google Cloud Operations。

資料和 API 要求/回應範例

為簡化操作,應用程式並未在後端使用資料庫。內含 3 個範例產品 ID 和現有庫存量。

產品 ID

現有庫存量

I-1

10

I-2

20

I-3

30

API 要求和回應範例如下所示:

API 要求

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}

複製存放區

雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。

在 GCP 主控台,按一下右上角工具列的 Cloud Shell 圖示:

bce75f34b2c53987.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,您應該會看到如下的內容:

f6ef2b5f13479f3a.png

這部虛擬機器搭載您需要的所有開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。您只需要瀏覽器,就能完成本實驗室的所有工作。

設定 gcloud

在 Cloud Shell 中設定專案 ID,並儲存為 PROJECT_ID 變數。

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

現在,請執行下列指令:

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

這樣一來,這個資料夾中就會建立名為 cloud-code-sample-repository 的資料夾。

(選用) 在 Cloud Shell 上執行應用程式

如要在本機執行應用程式,請按照下列步驟操作:

  1. 在終端機中,使用下列指令前往 Python 版本的 API:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. 在終端機中提供下列指令 (撰寫本文時,Cloud Shell 已安裝 Python 3.9.x,我們將使用預設版本。如果您打算在筆電上在本機執行,可以使用 Python 3.8 以上版本:

$ python app.py

  1. 您可以執行下列指令,在本機啟動 Python 伺服器。

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

按一下「透過以下通訊埠預覽:8080」。5. 系統會開啟瀏覽器視窗。您會看到 404 錯誤,這沒關係。修改網址,將主機名稱後的內容改為僅有「/inventory」。

舉例來說,在我的電腦上,看起來會像這樣:

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

系統會顯示庫存商品清單,如先前所述:

709d57ee2f0137e4.png

  1. 現在前往終端機並按下 Ctrl-C,即可停止伺服器

部署應用程式

現在要將這個 API 應用程式部署至 Cloud Run。這個程序會使用 gcloud 指令列用戶端執行指令,將程式碼部署至 Cloud Run

在終端機中輸入下列 gcloud 指令:

$ gcloud run deploy --source .

系統會詢問多個問題,以下列出部分問題:

  1. 服務名稱 (python-flask-api):您可以沿用這個預設名稱,也可以選擇其他名稱,例如 my-inventory-api
  2. 專案 [613162942481] 未啟用 API [run.googleapis.com]。Would you like to enable and retry (this will take a few minutes)? (y/N)? 是
  3. 請指定區域:選擇 31 (us-west-1)
  4. 專案 [613162942481] 未啟用 API [artifactregistry.googleapis.com]。Would you like to enable and retry (this will take a few minutes)? (y/N)? 是
  5. 從來源部署時,需要 Artifact Registry Docker 存放區來儲存建構的容器。系統會在 [us-west1] 區域中建立名為 [cloud-run-source-deploy] 的存放區。
  6. Do you want to continue (Y/n)? 是
  7. Allow unauthenticated invocations to [my-inventory-api] (y/N)? 是

最終,這會啟動程序,將您的原始碼容器化、推送至 Artifact Registry,然後部署 Cloud Run 服務和修訂版本。請耐心等待這項程序完成 (可能需要 3 到 4 分鐘),完成後您會看到服務網址。

以下是執行範例:

87ba8dbf88e8cfa4.png

測試應用程式

應用程式部署至 Cloud Run 後,您就可以透過下列方式存取 API 應用程式:

  1. 請記下上一個步驟中的服務網址。舉例來說,在我的設定中,這項資訊會顯示為 https://my-inventory-api-bt2r5243dq-uw.a.run.app。我們將此稱為 <SERVICE_URL>
  2. 開啟瀏覽器,存取下列 3 個 API 端點的網址:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

應與我們在先前章節中提供的規格相同,並附上 API 要求和回應範例。

從 Cloud Run 取得服務詳細資料

我們已將 API 服務部署至無伺服器運算環境 Cloud Run。我們隨時可以透過 Google Cloud 控制台前往 Cloud Run 服務。

在主選單中,前往 Cloud Run。畫面上會顯示您在 Cloud Run 中執行的服務清單。您應該會看到剛部署的服務。視您選取的名稱而定,畫面應會顯示類似下列的內容:

2633965c4bc957cc.png

按一下服務名稱即可查看詳細資料。詳細資料範例如下:

33042ae64322ce07.png

請注意網址,這就是服務網址,您可以在瀏覽器中輸入這個網址,存取我們剛部署的 Inventory API。查看指標和其他詳細資料。

現在就開始使用 Google Cloud 作業套件。

4. 建立 Pub/Sub 主題來接收快訊通知

如要建立 Pub/Sub 主題,請在 Google Cloud 控制台中按照下列步驟操作:

  1. 在搜尋方塊中搜尋「Pub/Sub」,然後前往 Pub/Sub。935028bd8f6328ef.png
  2. 如果尚未進入「主題」分頁,請按一下這個分頁標籤7fd8bf91386a88fd.png
  3. 按一下「建立主題」按鈕。cd9d197f9023c41b.png
  4. 輸入可辨識的主題名稱。

173f313b4a3c4934.png

  1. 按一下「建立」按鈕。ca9a02477da21a44.png
  2. 使用複製圖示按鈕複製主題名稱。下一節會用到這項資訊。

20848252ee83df93.png

5. 建立錯誤快訊政策

探索錯誤記錄

如要查看應用程式的錯誤記錄,請按照下列步驟操作:

按一下「記錄」分頁標籤。

畫面會顯示記錄介面,您可以在其中選取/取消選取各種資源 (專案、Google Cloud 資源、服務名稱等) 和記錄層級,視需要篩選記錄訊息。

6605b68395185b89.png

提供非 I-1、I-2 和 I-3 的產品 ID,模擬對商品目錄服務發出的幾個無效要求。舉例來說,錯誤的要求如下:

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

現在,如果查詢中提供的產品 ID 不正確,我們會搜尋 API 產生的所有警告。

為錯誤建立自訂記錄式警告政策

假設我們想留意應用程式某部分是否出現特定錯誤訊息,舉例來說,如果我們發現查詢產品 ID 時發生大量錯誤,這個問題可能是許多問題的徵兆 (連結無效、資料庫不一致或機器人列舉網站)。雖然很難或不可能想像所有可能的原因,但應用程式即使只傳送一次這則訊息,也是我們想要瞭解的高層級問題。如要針對這類錯誤發出警示,我們需要根據錯誤記錄中的資料建立政策。

  1. 在查詢方塊中,插入下列查詢參數:

resource.type="cloud_run_revision"

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

如下所示:

f672154cfebf0051.png

  1. 按一下「執行查詢」。系統隨即顯示所有要求,以及有這個問題的要求。

77c190e3a2fab6bf.png

  1. 如要將上述內容轉換為快訊,請按一下查詢欄位正下方右側的「建立快訊」按鈕:

4cd3fcf142189376.png

  1. 系統會顯示表單,供您建立記錄型快訊政策。

b82446854bad87fc.png

  1. 使用初始查詢,找出要納入快訊的記錄檔:

resource.type="cloud_run_revision"

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

764227db73ec3de6.png

  1. 設定通知頻率和事件持續時間。以本範例來說,您可以針對各項使用最小值:

bb3d96448ec998a1.png

  1. 最後,在「Who should be notified?」(應通知誰?) 中,選取您先前建立的 Pub/Sub 通知管道:

3593c48c29d4b76c.png

  1. 按一下「儲存」。如要查看及管理快訊政策,請前往「Alerting」(快訊) 頁面,並查看「Policies」(政策) 下方:ca08ea380fb37c91.png

6. 恭喜

恭喜,您已成功設定運作時間檢查,可將快訊傳送至 Pub/Sub!