Định tuyến cảnh báo giám sát Datadog tới Google Cloud bằng Eventarc (Phần 2)

1. Giới thiệu

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc giúp bạn dễ dàng kết nối các dịch vụ của Google Cloud với các sự kiện từ nhiều nguồn. Nền tảng này cho phép bạn xây dựng các cấu trúc hướng sự kiện, trong đó các vi dịch vụ được liên kết lỏng lẻo và phân tán. Nền tảng này cũng xử lý việc tiếp nhận, phân phối, bảo mật, uỷ quyền và xử lý lỗi cho bạn, giúp cải thiện tính linh hoạt của nhà phát triển và khả năng phục hồi của ứng dụng.

Datadog là một nền tảng giám sát và bảo mật cho các ứng dụng đám mây. Tính năng này kết hợp các dấu vết, chỉ số và nhật ký từ đầu đến cuối để giúp bạn quan sát được các ứng dụng, cơ sở hạ tầng và dịch vụ bên thứ ba.

Workflows là một nền tảng điều phối được quản lý hoàn toàn, thực thi các dịch vụ theo thứ tự mà bạn xác định, được gọi là quy trình công việc. Các quy trình này có thể kết hợp các dịch vụ được lưu trữ trên Cloud Run hoặc Cloud Functions, các dịch vụ của Google Cloud như Cloud Vision AI và BigQuery, cũng như mọi API dựa trên HTTP.

Trong lớp học lập trình đầu tiên, bạn đã tìm hiểu cách định tuyến các cảnh báo giám sát của Datadog đến Google Cloud bằng Eventarc. Trong lớp học lập trình thứ hai này, bạn sẽ tìm hiểu cách phản hồi các cảnh báo giám sát của Datadog bằng Workflows. Cụ thể hơn, bạn sẽ tạo 2 Máy ảo Compute Engine và giám sát các máy ảo đó bằng một màn hình Datadog. Sau khi xoá 1 trong các VM, bạn sẽ nhận được cảnh báo từ Datadog đến Workflows thông qua Eventarc. Đến lượt, Workflows sẽ tạo lại VM đã bị xoá để đưa số lượng VM đang chạy trở lại thành 2.

Kiến thức bạn sẽ học được

  • Cách bật chế độ tích hợp Google Cloud của Datadog.
  • Cách tạo quy trình kiểm tra và tạo VM Compute Engine.
  • Cách kết nối các cảnh báo giám sát Datadog với Workflows bằng Eventarc.
  • Cách tạo một màn hình Datadog và cảnh báo về việc xoá máy ảo.

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không dùng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, mã này sẽ "đóng băng" sau khi dự án được tạo.
  • Có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, hãy làm theo mọi hướng dẫn "dọn dẹp" ở cuối lớp học lập trình. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

55efc1aaa7a4d3ad.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

7ffe5cbb04455448.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn chỉ cần một trình duyệt là có thể thực hiện mọi thao tác trong phòng thí nghiệm này.

Thiết lập gcloud

Trong Cloud Shell, hãy đặt mã dự án và lưu mã dự án đó dưới dạng biến PROJECT_ID.

Ngoài ra, hãy đặt một biến REGION thành us-central1. Đây là khu vực mà bạn sẽ tạo tài nguyên sau này.

PROJECT_ID=[YOUR-PROJECT-ID]
REGION=us-central1
gcloud config set core/project $PROJECT_ID

Bật API

Bật tất cả các dịch vụ cần thiết:

gcloud services enable \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

3. Xác minh kênh Datadog

Đảm bảo rằng kênh Datadog mà bạn đã tạo trong lớp học lập trình đầu tiên đang hoạt động. Trong Cloud Shell, hãy chạy lệnh sau để truy xuất thông tin chi tiết về kênh:

CHANNEL_NAME=datadog-channel
gcloud eventarc channels describe $CHANNEL_NAME --location $REGION

Kết quả sẽ tương tự như kết quả sau:

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'

Bạn cũng có thể xem trạng thái kênh trong Google Cloud Console:

8399d528ccbd4c20.png

Trạng thái của kênh phải là ACTIVE. Nếu không, hãy quay lại lớp học lập trình đầu tiên và làm theo các bước để tạo và kích hoạt một kênh bằng Datadog.

4. Bật tính năng tích hợp Google Cloud của Datadog

Để sử dụng Datadog nhằm giám sát một dự án, bạn cần bật các API cần thiết cho Datadog, tạo một tài khoản dịch vụ và kết nối tài khoản dịch vụ đó với Datadog.

Bật API cho Datadog

gcloud services enable compute.googleapis.com \
  cloudasset.googleapis.com \
  monitoring.googleapis.com

Tạo một tài khoản dịch vụ

Tính năng tích hợp Google Cloud của Datadog sử dụng một tài khoản dịch vụ để gọi Cloud Logging API nhằm thu thập các chỉ số ở cấp nút từ các phiên bản Compute Engine.

Tạo tài khoản dịch vụ cho Datadog:

DATADOG_SA_NAME=datadog-service-account

gcloud iam service-accounts create $DATADOG_SA_NAME \
    --display-name "Datadog Service Account"

Cho phép tài khoản dịch vụ Datadog thu thập các chỉ số, thẻ, sự kiện và nhãn người dùng bằng cách cấp các vai trò IAM sau:

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

Tạo và tải khoá tài khoản dịch vụ xuống. Bạn cần có tệp khoá để hoàn tất quá trình tích hợp với Datadog.

Tạo một tệp khoá tài khoản dịch vụ trong thư mục chính của Cloud Shell:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account $DATADOG_SA_EMAIL

Trong Cloud Shell, hãy nhấp vào More ⁝ rồi chọn Download File. Trong trường File path, hãy nhập key.json. Để tải tệp khoá xuống, hãy nhấp vào biểu tượng Download.

Kết nối tài khoản dịch vụ với Datadog

Trong tài khoản Datadog của bạn, hãy chuyển đến mục Integrations rồi tìm ô tích hợp Google Cloud:

cf1ffa6547fba3e4.png

Di chuột qua Google Cloud Platform để chuyển đến trang Install:

31b365a31bc50cc8.png

Cài đặt chế độ tích hợp bằng cách tải khoá tài khoản dịch vụ lên phần Upload Private Key File rồi nhấp vào Install Integration:

92e475e4da7f826.png

Sau khi bạn hoàn tất quy trình tích hợp, Datadog sẽ tự động tạo một số trang tổng quan liên quan đến Google Cloud trong Dashboards:

66fdf2d26e4710d.png

5. Tạo VM Compute Engine

Tiếp theo, hãy tạo một số Máy ảo (VM) Compute Engine. Bạn sẽ giám sát các VM này bằng một màn hình Datadog và phản hồi các cảnh báo của Datadog bằng một quy trình trong Google Cloud.

Tạo 2 VM Compute Engine:

gcloud compute instances create instance-1 instance-2 --zone us-central1-a

Bạn sẽ thấy các máy ảo được tạo và chạy trong khoảng một phút trong Cloud Console. Sau một thời gian (thường là 10 phút), bạn cũng sẽ thấy những VM này trong Datadog trên trang tổng quan Google Compute Engine trong Dashboards:

78a51374c1d0c11e.png

6. Tạo quy trình công việc

Giờ đây, khi đã có 2 VM đang chạy, hãy tạo một quy trình công việc sẽ phản hồi các cảnh báo từ một màn hình Datadog. Quy trình công việc có thể phức tạp tuỳ ý bạn, nhưng trong trường hợp này, quy trình công việc sẽ kiểm tra số lượng phiên bản máy ảo đang chạy và nếu số lượng này giảm xuống dưới 2, thì quy trình sẽ tạo các phiên bản máy ảo mới để đảm bảo luôn có 2 máy ảo đang chạy.

Tạo tệp workflow-datadog2.yaml có nội dung sau:

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}

Xin lưu ý rằng quy trình công việc đang nhận một sự kiện làm tham số. Sự kiện này sẽ đến từ hoạt động giám sát Datadog thông qua Eventarc. Sau khi nhận được sự kiện, quy trình công việc sẽ kiểm tra số lượng phiên bản đang chạy và tạo các phiên bản máy ảo mới (nếu cần).

Triển khai quy trình công việc:

WORKFLOW_NAME=workflow-datadog2
gcloud workflows deploy $WORKFLOW_NAME \
  --source workflow-datadog2.yaml \
  --location $REGION

Quy trình công việc đã được triển khai nhưng chưa chạy. Hàm này sẽ được thực thi bằng một trình kích hoạt Eventarc khi nhận được cảnh báo Datadog.

7. Tạo điều kiện kích hoạt Eventarc

Bây giờ, bạn đã sẵn sàng kết nối các sự kiện từ nhà cung cấp Datadog với Workflows bằng một trình kích hoạt Eventarc. Bạn sẽ sử dụng kênh và tài khoản dịch vụ mà bạn đã thiết lập trong lớp học lập trình đầu tiên.

Tạo một điều kiện kích hoạt bằng kênh Datadog, loại sự kiện và cả đích đến của quy trình công việc:

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

Bạn có thể liệt kê các điều kiện kích hoạt để xem điều kiện kích hoạt mới tạo có đang hoạt động hay không:

gcloud eventarc triggers list --location $REGION

NAME: datadog-trigger2
TYPE: datadog.v1.alert
DESTINATION: Workflows: workflow-datadog2
ACTIVE: Yes

8. Tạo một màn hình Datadog

Bây giờ, bạn sẽ tạo một màn hình Datadog và kết nối màn hình đó với Eventarc.

Màn hình sẽ kiểm tra số lượng máy ảo Compute Engine đang chạy và cảnh báo nếu số lượng này giảm xuống dưới 2.

Để tạo một màn hình trong Datadog, hãy đăng nhập vào Datadog. Di chuột lên biểu tượng Monitors trong trình đơn chính rồi nhấp vào biểu tượng New Monitor trong trình đơn phụ. Có nhiều loại màn hình. Chọn loại màn hình Metric.

Trong trang New Monitor, hãy tạo một màn hình có các thành phần sau:

  1. Chọn phương thức phát hiện: Threshold.
  2. Xác định chỉ số: gcp.gce.instance.is_running từ (mọi nơi) sum by (mọi thứ)
  3. Đặt điều kiện cảnh báo:
  4. Kích hoạt khi chỉ số below ngưỡng at least once trong 5 minutes gần đây nhất
  5. Ngưỡng cảnh báo: < 2
  6. Thông báo cho nhóm của bạn: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Ví dụ về tên màn hình: Compute Engine instances < 2

Giờ đây, hãy nhấn vào Create ở dưới cùng để tạo màn hình.

9. Kiểm tra màn hình và điều kiện kích hoạt

Để kiểm thử màn hình Datadog, trình kích hoạt Eventarc và cuối cùng là quy trình công việc, bạn sẽ xoá một trong các VM:

gcloud compute instances delete instance-2 --zone us-central1-a

Sau vài giây, bạn sẽ thấy phiên bản bị xoá trong Google Cloud Console.

Có một chút độ trễ để thay đổi này xuất hiện trong Datadog. Sau một thời gian (thường là 10 phút), bạn sẽ thấy màn hình trong Datadog để phát hiện và cảnh báo vấn đề này trong phần Manage Monitors:

50f93d560b6c1973.png

Sau khi cảnh báo của màn hình Datadog, bạn sẽ thấy cảnh báo đó chuyển đến Workflows thông qua Eventarc. Nếu kiểm tra nhật ký của quy trình công việc, bạn sẽ thấy rằng quy trình công việc kiểm tra để tìm ra sự khác biệt giữa số lượng phiên bản hiện tại và số lượng phiên bản dự kiến:

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

Nó phản hồi cảnh báo đó bằng cách tạo một phiên bản VM mới có tiền tố datadog-instance-##.

Cuối cùng, bạn vẫn sẽ có 2 VM trong dự án của mình, một VM bạn đã tạo ban đầu và một VM do Workflows tạo sau cảnh báo Datadog!

11e42028e7142690.png

10. Xin chúc mừng

Xin chúc mừng, bạn đã hoàn tất lớp học lập trình này!

Nội dung đã đề cập

  • Cách bật chế độ tích hợp Google Cloud của Datadog.
  • Cách tạo quy trình kiểm tra và tạo VM Compute Engine.
  • Cách kết nối các cảnh báo giám sát Datadog với Workflows bằng Eventarc.
  • Cách tạo một màn hình Datadog và cảnh báo về việc xoá máy ảo.