透過 Eventarc 將 Datadog 監控快訊轉送至 Google Cloud (第 2 部分)

1. 簡介

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

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 遭到刪除後,Datadog 會透過 Eventarc 向 Workflows 發出快訊。接著,工作流程會重新建立已刪除的 VM,使執行中的 VM 數量恢復為 2。

課程內容

  • 如何啟用 Datadog 的 Google Cloud 整合功能。
  • 如何建立工作流程,檢查及建立 Compute Engine VM。
  • 如何使用 Eventarc 將 Datadog 監控快訊連結至 Workflows。
  • 如何建立 Datadog 監控器,並在 VM 遭到刪除時發出快訊。

2. 設定和需求條件

自修實驗室環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

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

啟動 Cloud Shell

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

在 Google Cloud 控制台中,點選右上角工具列的 Cloud Shell 圖示:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

這部虛擬機器已預先安裝所有必要的開發工具,並提供永久的 5 GB 主目錄,而且可在 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 控制台中查看管道狀態:

8399d528ccbd4c20.png

頻道狀態應為 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 整合資訊方塊:

cf1ffa6547fba3e4.png

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

31b365a31bc50cc8.png

上傳 Upload Private Key File 部分的服務帳戶金鑰,然後按一下 Install Integration,即可安裝整合功能:

92e475e4da7f826.png

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

66fdf2d26e4710d.png

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 資訊主頁中看到這些 VM,位置在 Dashboards 下方:

78a51374c1d0c11e.png

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 頁面中,使用下列項目建立監控器:

  1. 選擇偵測方法:Threshold。
  2. 定義指標:gcp.gce.instance.is_running (所有位置) sum by (所有內容)
  3. 設定快訊觸發條件:
  4. 過去 5 minutes 內,指標below門檻at least once時觸發
  5. 快訊門檻:< 2
  6. 通知團隊:@eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. 監控器名稱範例: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部分下方偵測及發出這項警報:

50f93d560b6c1973.png

Datadog 監控快訊發出後,您應該會看到該快訊透過 Eventarc 傳送至 Workflows。如果檢查 Workflows 的記錄,您應該會看到 Workflows 檢查目前執行個體計數與預期執行個體計數之間的差異:

2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1

並建立前置字串為 datadog-instance-## 的新 VM 執行個體,以回應該快訊。

最後,專案中仍會有 2 部 VM,一部是您一開始建立的,另一部則是 Datadog 快訊觸發後,由 Workflows 建立的!

11e42028e7142690.png

10. 恭喜

恭喜,您已完成本程式碼研究室!

涵蓋內容

  • 如何啟用 Datadog 的 Google Cloud 整合功能。
  • 如何建立工作流程,檢查及建立 Compute Engine VM。
  • 如何使用 Eventarc 將 Datadog 監控快訊連結至 Workflows。
  • 如何建立 Datadog 監控器,並在 VM 遭到刪除時發出快訊。