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

課程內容

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

2. 設定和需求

自修實驗室環境設定

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 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 控制台中查看管道狀態:

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 Dashboards 資訊主頁中看到這些 VM:

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 傳送至 Workflow。如果檢查 Workflows 的記錄,您應該會看到 Workflows 檢查目前執行個體數量與預期執行個體數量之間的差異:

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

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

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

11e42028e7142690.png

10. 恭喜

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

涵蓋內容

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