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

1. 簡介

上次更新日期:2023 年 6 月 21 日

在提供可用性時,針對記錄錯誤發出快訊

記錄型快訊可透過監控記錄中的特定事件或模式,藉此判斷應用程式的可用性*。*您可以透過快訊瞭解服務中斷或其他使用者遇到的問題,以盡可能降低對使用者和客戶造成的影響。

雖然運作時間檢查可提供一般可用性的數據匯報,但將記錄產生的錯誤訊息視為更具體的無法使用類型,並掌握使用者遇到問題的比例,可能更為準確。

錯誤可能源自於任何原因,包括使用者錯誤、系統維護、升級,甚至是系統外部因素 (例如天氣不佳)。快訊中的重點並非預期所有可能的原因,而是挑選一些關鍵症狀做為疑難排解的起點。

以 Pub/Sub 主題做為快訊通知管道

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

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

快訊觸發時,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 主控台
  2. 按一下「建立專案」按鈕。
  3. 請輸入專案名稱。
  4. 選取專案的帳單帳戶。
  5. 按一下 [建立] 按鈕。

系統將建立您的專案,並將您帶往專案資訊主頁。完成上述設定後,您就可以開始使用 Google Cloud 服務。

以下提供每個步驟的其他詳細資料:

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

詳情請參閱「建立專案的 Google Cloud 說明文件」。

3. 部署 API 應用程式

什麼是範例應用程式或 API?

我們的應用程式是簡單的 Inventory API 應用程式,會顯示一個帶有幾項作業的 REST API 端點,以便列出庫存商品及取得特定商品庫存數量。

部署 API 並假設 API 託管於 https://<somehost> 之後,便可按照以下方式存取 API 端點:

https://<somehost>/inventory

這裡會列出含有當前庫存層級的所有產品項目。

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

這樣就會提供一筆記錄,其中包含該產品的產品 ID 和商品目錄層級。

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

注意:這個 API 應用程式僅供示範,不代表安全可靠的 API 實作項目。我們提供一個快速申請,說明本研究室的主要用途,也就是 Google Cloud 作業套件。

範例資料與 API 要求/回應

為簡化作業,應用程式並非由後端的資料庫提供技術支援。當中包含 3 個範例產品 ID 及個別商品目錄層級。

產品 ID

現場廣告空間層級

I-1

10

I-2

20

I-3

30

API 要求與回應範例如下:

API 要求

API 回應

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

複製存放區

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

在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:

bce75f34b2c53987.png

佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:

f6ef2b5f13479f3a.png

這個虛擬機器搭載您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 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]。要啟用並重試 (這需要幾分鐘的時間) 嗎?(是/否)?是
  3. 請指定區域:選擇 31 (us-west-1)
  4. 專案 [613162942481] 未啟用 API [artifactregistry.googleapis.com]。要啟用並重試 (這需要幾分鐘的時間) 嗎?(是/否)?是
  5. 如要透過來源部署,您必須具備 Artifact Registry Docker 存放區來儲存建構的容器。系統會在區域 [us-west1] 中建立名為 [cloud-run-source-deploy] 的存放區。
  6. 要繼續 (是/n) 嗎?是
  7. 允許在未經驗證的情況下叫用 [my-inventory-api] (y/N)?是

最後,這個程序會啟動 Cloud Run 服務與修訂版本,並將原始碼容器化並推送至 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. 按一下「Create Topic」按鈕。cd9d197f9023c41b.png
  4. 輸入容易辨識的主題名稱。

173f313b4a3c4934.png

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

20848252ee83df93.png

5. 為錯誤建立快訊政策

探索錯誤記錄檔

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

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

畫面上隨即會顯示記錄介面,您可以在此特別選取/取消選取各種資源 (專案、Google 雲端資源、服務名稱等),以及根據記錄層級篩選記錄訊息。

6605b68395185b89.png

請提供不是 I-1、I-2 和 I-3 的產品 ID,以模擬對商品目錄服務提出的幾項無效要求。例如:不正確的要求:

https://&lt;SERVICE_URL&gt;/inventory/I-999

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

針對錯誤建立自訂記錄快訊政策

假設我們想針對應用程式的某些部分留意特定錯誤訊息的發生。假設我們發現查詢產品 ID 的大量錯誤。這個問題造成許多潛在問題 (例如連結無效、資料庫不一致或漫遊器列舉了我們的網站)。雖然不太可能或無法想像每個可能原因,但傳送這則訊息的應用程式即使屬於我們想瞭解的重大問題。為了發出快訊,我們需要根據錯誤記錄檔中的資料建立政策。

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

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "應用程式警告:收到不正確的產品 ID 的商品目錄要求"

如下所示:

f672154cfebf0051.png

  1. 按一下「執行查詢」。這裡會顯示所有收到及有這個問題的要求。

77c190e3a2fab6bf.png

  1. 如要將上述指令轉換為快訊,請在記錄檔探索工具的右側查詢欄位下方,按一下「Create alert」(建立快訊) 按鈕:

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. 最後,「應該通知誰?」選取先前建立的 Pub/Sub 通知管道:

3593c48c29d4b76c.png

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

6. 恭喜

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