1. 簡介

Eventarc 可輕鬆將 Google Cloud 服務與各種來源的事件連結。您可以在其中建構微服務鬆耦合的分散式事件導向架構。此外,這項服務還會為您處理事件擷取、傳送、安全防護、授權和錯誤處理作業,進而提升開發人員的靈活度和應用程式的復原能力。
Datadog 是雲端應用程式的監控和安全防護平台。這項服務會整合端對端追蹤記錄、指標和記錄檔,讓您觀察應用程式、基礎架構和第三方服務。
Workflows 是全代管的自動化調度管理平台,可按照您定義的順序 (稱為工作流程) 執行服務。這些工作流程可合併 Cloud Run 或 Cloud Functions 代管的服務、Cloud Vision AI 和 BigQuery 等 Google Cloud 服務,以及任何以 HTTP 為基礎的 API。
在第一個程式碼研究室中,您已瞭解如何使用 Eventarc 將 Datadog 監控快訊傳送至 Google Cloud。在本程式碼研究室的第二部分,您將瞭解如何使用 Workflows 回應 Datadog 監控快訊。具體來說,您會建立 2 部 Compute Engine 虛擬機器,並使用 Datadog 監控器監控這些機器。刪除其中一個 VM 後,您會透過 Eventarc 收到 Datadog 傳送至 Workflows 的快訊。接著,工作流程會重新建立已刪除的 VM,使執行中的 VM 數量恢復為 2。
課程內容
- 如何啟用 Datadog 的 Google Cloud 整合功能。
- 如何建立工作流程,檢查及建立 Compute Engine VM。
- 如何使用 Eventarc 將 Datadog 監控快訊連結至 Workflows。
- 如何建立 Datadog 監控器,並在 VM 遭到刪除時發出快訊。
2. 設定和需求
自修實驗室環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串,您隨時可以更新。
- 專案 ID 在所有 Google Cloud 專案中不得重複,且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為
PROJECT_ID),因此如果您不喜歡該字串,可以產生另一個隨機字串,或是嘗試使用自己的字串,看看是否可用。專案建立後,系統就會「凍結」該值。 - 還有第三個值,也就是部分 API 使用的「專案編號」。如要進一步瞭解這三種值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要停用資源,避免在本教學課程結束後繼續產生帳單費用,請按照程式碼研究室結尾的「清除」操作說明操作。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
啟動 Cloud Shell
雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。
在 Google Cloud 控制台中,點選右上工具列的 Cloud Shell 圖示:

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

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本實驗室的所有工作都可在瀏覽器上完成。
設定 gcloud
在 Cloud Shell 中設定專案 ID,並儲存為 PROJECT_ID 變數。
此外,請將 REGION 變數設為 us-central1。您稍後會在該區域中建立資源。
PROJECT_ID=[YOUR-PROJECT-ID] REGION=us-central1 gcloud config set core/project $PROJECT_ID
啟用 API
啟用所有必要服務:
gcloud services enable \ workflows.googleapis.com \ workflowexecutions.googleapis.com
3. 驗證 Datadog 管道
請確認您在第一個程式碼研究室中建立的 Datadog 管道已啟用。在 Cloud Shell 中執行下列指令,擷取管道的詳細資料:
CHANNEL_NAME=datadog-channel gcloud eventarc channels describe $CHANNEL_NAME --location $REGION
畫面會顯示如下的輸出內容:
activationToken: so5g4Kdasda7y2MSasdaGn8njB2 createTime: '2022-03-09T09:53:42.428978603Z' name: projects/project-id/locations/us-central1/channels/datadog-channel provider: projects/project-id/locations/us-central1/providers/datadog pubsubTopic: projects/project-id/topics/eventarc-channel-us-central1-datadog-channel-077 state: ACTIVE uid: 183d3323-8cas-4e95-8d72-7d8c8b27cf9e updateTime: '2022-03-09T09:53:48.290217299Z'
您也可以在 Google Cloud 控制台中查看管道狀態:

頻道狀態應為 ACTIVE。如果沒有,請返回第一個程式碼研究室,按照步驟建立並啟用 Datadog 管道。
4. 啟用 Datadog 的 Google Cloud 整合功能
如要使用 Datadog 監控專案,您必須啟用 Datadog 必要的 API、建立服務帳戶,並將服務帳戶連結至 Datadog。
為 Datadog 啟用 API
gcloud services enable compute.googleapis.com \ cloudasset.googleapis.com \ monitoring.googleapis.com
建立服務帳戶
Datadog 的 Google Cloud 整合服務會使用服務帳戶呼叫 Cloud Logging API,從 Compute Engine 執行個體收集節點層級的指標。
為 Datadog 建立服務帳戶:
DATADOG_SA_NAME=datadog-service-account
gcloud iam service-accounts create $DATADOG_SA_NAME \
--display-name "Datadog Service Account"
授予下列 IAM 角色,讓 Datadog 服務帳戶收集指標、標記、事件和使用者標籤:
DATADOG_SA_EMAIL=$DATADOG_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$DATADOG_SA_EMAIL \
--role roles/cloudasset.viewer
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$DATADOG_SA_EMAIL \
--role roles/compute.viewer
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$DATADOG_SA_EMAIL \
--role roles/monitoring.viewer
建立並下載服務帳戶金鑰。您需要金鑰檔案才能完成與 Datadog 的整合。
在 Cloud Shell 主目錄中建立服務帳戶金鑰檔案:
gcloud iam service-accounts keys create ~/key.json \ --iam-account $DATADOG_SA_EMAIL
在 Cloud Shell 中,按一下 More ⁝,然後選取 Download File。在 File path 欄位中輸入 key.json。如要下載金鑰檔案,請按一下 Download。
將服務帳戶連結至 Datadog
在 Datadog 帳戶中,前往 Integrations 部分,然後搜尋 Google Cloud 整合資訊方塊:

將滑鼠游標懸停在 Google Cloud Platform 上,前往 Install 頁面:

如要安裝整合功能,請在「Upload Private Key File」部分上傳服務帳戶金鑰,然後按一下「Install Integration」:

完成整合後,Datadog 會在 Dashboards 下自動建立多個 Google Cloud 相關資訊主頁:

5. 建立 Compute Engine VM
接著,建立一些 Compute Engine 虛擬機器 (VM)。您將使用 Datadog 監控器監控這些 VM,並在 Google Cloud 中使用工作流程回應 Datadog 快訊。
建立 2 個 Compute Engine VM:
gcloud compute instances create instance-1 instance-2 --zone us-central1-a
您應該會在 Cloud 控制台中看到建立並執行的 VM。過一段時間 (通常是 10 分鐘) 後,您應該也會在 Datadog 的 Google Compute Engine Dashboards 資訊主頁中看到這些 VM:

6. 建立工作流程
現在您有 2 個 VM 正在執行,請建立工作流程,回應 Datadog 監控項目的快訊。工作流程可以盡可能複雜,但在此情況下,工作流程會檢查執行的 VM 執行個體數量,如果低於 2 個,就會建立新的 VM 執行個體,確保隨時有 2 個 VM 執行個體在執行。
使用以下內容建立 workflow-datadog2.yaml 檔案:
main:
params: [event]
steps:
- init:
assign:
- projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
- zone: "us-central1-a"
- minInstanceCount: 2
- namePattern: "datadog-instance-##"
- listInstances:
call: googleapis.compute.v1.instances.list
args:
project: ${projectId}
zone: ${zone}
result: listResult
- getInstanceCount:
steps:
- initInstanceCount:
assign:
- instanceCount: 0
- setInstanceCount:
switch:
- condition: ${"items" in listResult}
steps:
- stepA:
assign:
- instanceCount: ${len(listResult.items)}
- findDiffInstanceCount:
steps:
- assignDiffInstanceCount:
assign:
- diffInstanceCount: ${minInstanceCount - instanceCount}
- logDiffInstanceCount:
call: sys.log
args:
data: ${"instanceCount->" + string(instanceCount) + " diffInstanceCount->" + string(diffInstanceCount)}
- endEarlyIfNeeded:
switch:
- condition: ${diffInstanceCount < 1}
next: returnResult
- bulkInsert:
call: googleapis.compute.v1.instances.bulkInsert
args:
project: ${projectId}
zone: ${zone}
body:
count: ${diffInstanceCount}
namePattern: ${namePattern}
instanceProperties:
machineType: "e2-micro"
disks:
- autoDelete: true
boot: true
initializeParams:
sourceImage: projects/debian-cloud/global/images/debian-10-buster-v20220310
networkInterfaces:
- network: "global/networks/default"
result: bulkInsertResult
- returnResult:
return: ${bulkInsertResult}
請注意,工作流程會將事件當做參數接收。這項事件會透過 Eventarc 從 Datadog 監控服務傳送。收到事件後,工作流程會檢查執行中的執行個體數量,並視需要建立新的 VM 執行個體。
部署工作流程:
WORKFLOW_NAME=workflow-datadog2 gcloud workflows deploy $WORKFLOW_NAME \ --source workflow-datadog2.yaml \ --location $REGION
工作流程已部署,但尚未執行。收到 Datadog 快訊時,系統會透過 Eventarc 觸發條件執行這項函式。
7. 建立 Eventarc 觸發條件
現在,您可以使用 Eventarc 觸發條件,將 Datadog 提供者的事件連結至工作流程。您將使用在第一個程式碼研究室中設定的管道和服務帳戶。
使用 Datadog 管道、事件類型和工作流程目的地建立觸發條件:
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') gcloud eventarc triggers create datadog-trigger2 \ --location $REGION \ --destination-workflow $WORKFLOW_NAME \ --destination-workflow-location $REGION \ --channel $CHANNEL_NAME \ --event-filters type=datadog.v1.alert \ --service-account $PROJECT_NUMBER-compute@developer.gserviceaccount.com
您可以列出觸發條件,確認新建立的觸發條件是否已啟用:
gcloud eventarc triggers list --location $REGION NAME: datadog-trigger2 TYPE: datadog.v1.alert DESTINATION: Workflows: workflow-datadog2 ACTIVE: Yes
8. 建立 Datadog 監控器
您現在要建立 Datadog 監控器,並連結至 Eventarc。
這項監控功能會檢查執行的 Compute Engine VM 數量,並在數量少於 2 時發出快訊。
如要在 Datadog 中建立監控機制,請登入 Datadog。將滑鼠游標懸停在主選單中的 Monitors 上,然後按一下子選單中的 New Monitor。螢幕類型有很多種,選擇Metric監控器類型。
在 New Monitor 頁面中,使用下列項目建立監控器:
- 選擇偵測方法:
Threshold。 - 定義指標:
gcp.gce.instance.is_running(所有位置)sum by(所有內容) - 設定快訊觸發條件:
- 過去
5 minutes內,指標below門檻at least once時觸發 - 警告門檻:
< 2 - 通知團隊:
@eventarc_<your-project-id>_<your-region>_<your-channel-name> - 監控器名稱範例:
Compute Engine instances < 2
現在,輕觸底部的 Create 即可建立監控器。
9. 測試監控器和觸發條件
如要測試 Datadog 監控器、Eventarc 觸發條件和最終工作流程,請刪除其中一個 VM:
gcloud compute instances delete instance-2 --zone us-central1-a
幾秒後,Google Cloud 控制台應該會顯示執行個體已刪除。
這項變更會延遲一段時間才會顯示在 Datadog 中。過一段時間 (通常是 10 分鐘) 後,您應該會在 Datadog 中看到監控器,偵測並提醒 Manage Monitors 部分:

Datadog 監控器發出快訊後,您應該會看到該快訊透過 Eventarc 傳送至 Workflow。如果檢查 Workflows 的記錄,您應該會看到 Workflows 檢查目前執行個體數量與預期執行個體數量之間的差異:
2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1
並建立前置字串為 datadog-instance-## 的新 VM 執行個體,以回應該快訊。
最後,專案中仍會有 2 個 VM,一個是您一開始建立的 VM,另一個是 Datadog 快訊觸發後,由 Workflows 建立的 VM!

10. 恭喜
恭喜,您已完成本程式碼研究室!
涵蓋內容
- 如何啟用 Datadog 的 Google Cloud 整合功能。
- 如何建立工作流程,檢查及建立 Compute Engine VM。
- 如何使用 Eventarc 將 Datadog 監控快訊連結至 Workflows。
- 如何建立 Datadog 監控器,並在 VM 遭到刪除時發出快訊。