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

1. 簡介

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc 可讓您輕鬆連結 Google Cloud 服務與各種來源的事件。Kubernetes 可讓您建構事件導向的架構,其中微服務的鬆耦合和分佈情形很低。它也能處理事件擷取、提交、安全性、授權和錯誤處理等工作,提升開發人員的靈活性和應用程式彈性。

Datadog 是雲端應用程式的監控與安全性平台。這項服務整合了端對端追蹤記錄、指標和記錄檔,方便您觀測應用程式、基礎架構和第三方服務。

Workflows 是全代管的自動化調度管理平台,可按照您定義 (稱為工作流程) 的順序執行服務。這些工作流程可以結合託管於 Cloud Run 或 Cloud Functions 的服務、Google Cloud 服務 (例如 Cloud Vision AI 和 BigQuery),以及任何以 HTTP 為基礎的 API。

第一個程式碼研究室中,您已瞭解如何使用 Eventarc 將 Datadog 監控快訊轉送至 Google Cloud。在第二個程式碼研究室中,您將瞭解如何使用 Workflows 回應 Datadog 監控快訊。具體來說,您將建立 2 個 Compute Engine 虛擬機器,並透過 Datadog 監控器加以監控。刪除 1 個 VM 後,您會透過 Eventarc 收到來自 Datadog 至 Workflows 的快訊。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 不使用的字元字串,您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為 PROJECT_ID),因此如果您不喜歡的話,可以再隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後
  • 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

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

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 分鐘),您應該會在 DashboardsGoogle Compute Engine 資訊主頁中,看到 Datadog 中的這些 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 供應商的事件連結至 Workflows。您將使用在第一個程式碼研究室中設定的管道和服務帳戶。

使用 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 數量,並在 VM 數量低於 2 時發出快訊。

如要在 Datadog 建立監控器,請登入 Datadog。將滑鼠遊標懸停在主選單中的 Monitors 上,然後按一下子選單中的 New Monitor。監控器有許多種,選擇 Metric 監控類型。

New Monitor 頁面中,建立包含下列項目的監控項目:

  1. 選擇偵測方法:Threshold
  2. 定義指標:從 (不限位置) sum by (不限) 的 gcp.gce.instance.is_running
  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,一個是您最初建立的 VM,另一個則是 Workflows 建立的 VM。看到 Datadog 快訊之後,

11e42028e7142690.png

10. 恭喜

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

涵蓋內容

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