กำหนดเส้นทางการแจ้งเตือนการตรวจสอบ Datadog ไปยัง Google Cloud ด้วย Eventarc (ส่วนที่ 2)

1. บทนำ

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc ช่วยให้เชื่อมต่อบริการของ Google Cloud กับเหตุการณ์จากแหล่งที่มาต่างๆ ได้ง่าย ซึ่งช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่ง Microservice มีการเชื่อมต่อแบบหลวมๆ และกระจายอยู่ นอกจากนี้ยังจัดการการส่งผ่านข้อมูลเหตุการณ์ การนำส่ง ความปลอดภัย การให้สิทธิ์ และการจัดการข้อผิดพลาดให้คุณ ซึ่งจะช่วยเพิ่มความคล่องตัวของนักพัฒนาแอปและความยืดหยุ่นของแอปพลิเคชัน

Datadog เป็นแพลตฟอร์มการตรวจสอบและความปลอดภัยสำหรับแอปพลิเคชันระบบคลาวด์ โดยจะรวบรวมการติดตาม เมตริก และบันทึกแบบครบวงจรเพื่อให้แอปพลิเคชัน โครงสร้างพื้นฐาน และบริการของบุคคลที่สามสามารถสังเกตได้

เวิร์กโฟลว์คือแพลตฟอร์มการจัดกลุ่มที่มีการจัดการครบวงจรซึ่งเรียกใช้บริการตามลำดับที่คุณกำหนดที่เรียกว่าเวิร์กโฟลว์ เวิร์กโฟลว์เหล่านี้สามารถรวมบริการที่โฮสต์ใน Cloud Run หรือ Cloud Functions, บริการของ Google Cloud เช่น Cloud Vision AI และ BigQuery รวมถึง API ที่อิงตาม HTTP

ใน Codelab แรก คุณได้เรียนรู้วิธีกำหนดเส้นทางการแจ้งเตือนการตรวจสอบ Datadog ไปยัง Google Cloud ด้วย Eventarc ในโค้ดแล็บที่ 2 นี้ คุณจะได้เรียนรู้วิธีตอบสนองต่อการแจ้งเตือนการตรวจสอบ Datadog ด้วยเวิร์กโฟลว์ กล่าวโดยละเอียดคือ คุณจะสร้างเครื่องเสมือน Compute Engine 2 เครื่องและตรวจสอบด้วยมอนิเตอร์ Datadog เมื่อลบ VM 1 รายการแล้ว คุณจะได้รับการแจ้งเตือนจาก Datadog ไปยังเวิร์กโฟลว์ผ่าน Eventarc จากนั้นเวิร์กโฟลว์จะสร้าง VM ที่ลบไปแล้วขึ้นมาใหม่เพื่อให้จำนวน VM ที่ทำงานกลับมาเป็น 2

สิ่งที่คุณจะได้เรียนรู้

  • วิธีเปิดใช้การผสานรวม Google Cloud ของ Datadog
  • วิธีสร้างเวิร์กโฟลว์เพื่อตรวจสอบและสร้าง VM ของ Compute Engine
  • วิธีเชื่อมต่อการแจ้งเตือนการตรวจสอบ Datadog กับเวิร์กโฟลว์ด้วย Eventarc
  • วิธีสร้างการตรวจสอบ Datadog และการแจ้งเตือนเมื่อมีการลบ VM

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ โดยเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ และคุณสามารถอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (และโดยทั่วไปจะระบุเป็น PROJECT_ID) ดังนั้นหากไม่ชอบรหัสที่สร้างขึ้น ให้สร้างรหัสแบบสุ่มอีกรหัส หรือจะลองใช้รหัสของคุณเองและดูว่ามีรหัสนั้นหรือไม่ก็ได้ จากนั้นจะ "หยุด" หลังจากสร้างโปรเจ็กต์แล้ว
  • นอกจากนี้ยังมีค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดในห้องทดลองนี้ได้โดยใช้เพียงเบราว์เซอร์

ตั้งค่า gcloud

ใน Cloud Shell ให้ตั้งค่ารหัสโปรเจ็กต์และบันทึกเป็นตัวแปร 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 ที่คุณสร้างใน Codelab แรกใช้งานอยู่ ใน 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 Console ได้ด้วย โดยทำดังนี้

8399d528ccbd4c20.png

สถานะของช่องควรเป็น ACTIVE หากยังไม่ได้สร้าง ให้กลับไปที่ Codelab แรกและทำตามขั้นตอนเพื่อสร้างและเปิดใช้งานช่องกับ Datadog

4. เปิดใช้การผสานรวม Google Cloud ของ Datadog

หากต้องการใช้ Datadog เพื่อตรวจสอบโปรเจ็กต์ คุณต้องเปิดใช้ API ที่จำเป็นสำหรับ Datadog สร้างบัญชีบริการ และเชื่อมต่อบัญชีบริการกับ Datadog

เปิดใช้ API สำหรับ Datadog

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

สร้างบัญชีบริการ

การผสานรวม Google Cloud ของ Datadog ใช้บัญชีบริการเพื่อทำการเรียกไปยัง 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"

เปิดใช้บัญชีบริการ Datadog เพื่อรวบรวมเมตริก แท็ก เหตุการณ์ และป้ายกำกับผู้ใช้โดยให้บทบาท IAM ต่อไปนี้

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 ป้อน key.json ในช่อง File path หากต้องการดาวน์โหลดไฟล์คีย์ ให้คลิก Download

เชื่อมต่อบัญชีบริการกับ Datadog

ในบัญชี Datadog ให้ไปที่ส่วน Integrations แล้วค้นหากระเบื้องการผสานรวม Google Cloud

cf1ffa6547fba3e4.png

วางเมาส์เหนือ Google Cloud Platform เพื่อไปที่หน้า Install

31b365a31bc50cc8.png

ติดตั้งการผสานรวมโดยอัปโหลดคีย์บัญชีบริการในส่วน Upload Private Key File แล้วคลิก Install Integration

92e475e4da7f826.png

หลังจากทำการผสานรวมเสร็จแล้ว Datadog จะสร้างแดชบอร์ดที่เกี่ยวข้องกับ Google Cloud จำนวนหนึ่งโดยอัตโนมัติในส่วน Dashboards:

66fdf2d26e4710d.png

5. สร้าง VM ของ Compute Engine

จากนั้นสร้างเครื่องเสมือน (VM) ของ Compute Engine คุณจะตรวจสอบ VM เหล่านี้ด้วยการตรวจสอบ Datadog และตอบกลับการแจ้งเตือน Datadog ด้วยเวิร์กโฟลว์ใน Google Cloud

สร้าง VM ของ Compute Engine 2 รายการโดยทำดังนี้

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

คุณควรเห็น VM ที่สร้างและทำงานใน Cloud Console ภายใน 1 นาที หลังจากผ่านไประยะหนึ่ง (โดยปกติคือ 10 นาที) คุณควรเห็น VM เหล่านี้ใน Datadog ในGoogle Compute Engineแดชบอร์ดในส่วนDashboardsด้วย

78a51374c1d0c11e.png

6. สร้างเวิร์กโฟลว์

ตอนนี้คุณมี VM 2 รายการที่ทำงานอยู่แล้ว ให้สร้างเวิร์กโฟลว์ที่จะตอบสนองต่อการแจ้งเตือนจากมอนิเตอร์ Datadog เวิร์กโฟลว์มีความซับซ้อนได้ตามต้องการ แต่ในกรณีนี้ เวิร์กโฟลว์จะตรวจสอบจำนวนอินสแตนซ์ VM ที่กำลังทำงาน และหากจำนวนอินสแตนซ์ต่ำกว่า 2 เวิร์กโฟลว์จะสร้างอินสแตนซ์ VM ใหม่เพื่อให้แน่ใจว่ามี VM 2 รายการที่ทำงานอยู่ตลอดเวลา

สร้างไฟล์ 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}

โปรดทราบว่าเวิร์กโฟลว์ได้รับเหตุการณ์เป็นพารามิเตอร์ เหตุการณ์นี้จะมาจากการตรวจสอบ Datadog ผ่าน Eventarc เมื่อได้รับเหตุการณ์แล้ว เวิร์กโฟลว์จะตรวจสอบจำนวนอินสแตนซ์ที่ทำงานอยู่และสร้างอินสแตนซ์ VM ใหม่หากจำเป็น

ทําให้เวิร์กโฟลว์ใช้งานได้

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

เวิร์กโฟลว์ได้รับการติดตั้งใช้งานแล้ว แต่ยังไม่ได้ทำงาน โดยจะเรียกใช้โดยทริกเกอร์ Eventarc เมื่อได้รับข้อความแจ้ง Datadog

7. สร้างทริกเกอร์ Eventarc

ตอนนี้คุณพร้อมที่จะเชื่อมต่อเหตุการณ์จากผู้ให้บริการ Datadog กับเวิร์กโฟลว์ด้วยทริกเกอร์ Eventarc แล้ว คุณจะใช้ช่องและบัญชีบริการที่สร้างไว้ในโค้ดแล็บแรก

สร้างทริกเกอร์ด้วยแชแนล 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

โดยมอนิเตอร์จะตรวจสอบจำนวน VM ของ Compute Engine ที่ทำงานอยู่และแจ้งเตือนหากจำนวน VM ต่ำกว่า 2

หากต้องการสร้างการตรวจสอบใน Datadog ให้เข้าสู่ระบบ Datadog วางเมาส์เหนือ Monitors ในเมนูหลัก แล้วคลิก New Monitor ในเมนูย่อย จอภาพมีหลายประเภท เลือกMetricประเภทการตรวจสอบ

ในหน้า New Monitor ให้สร้างการตรวจสอบด้วยข้อมูลต่อไปนี้

  1. เลือกวิธีการตรวจหา Threshold
  2. กำหนดเมตริก: gcp.gce.instance.is_running จาก (ทุกที่) sum by (ทุกอย่าง)
  3. ตั้งค่าเงื่อนไขการแจ้งเตือน
  4. ทริกเกอร์เมื่อเมตริกbelowเกณฑ์at least onceในช่วง5 minutesที่ผ่านมา
  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 Console

การเปลี่ยนแปลงนี้อาจใช้เวลาสักครู่จึงจะแสดงใน Datadog หลังจากผ่านไประยะหนึ่ง (โดยปกติ 10 นาที) คุณควรเห็นการตรวจสอบใน Datadog เพื่อตรวจหาและแจ้งเตือนสิ่งนี้ในส่วน Manage Monitors

50f93d560b6c1973.png

เมื่อการตรวจสอบ Datadog แจ้งเตือน คุณควรเห็นการแจ้งเตือนนั้นไปที่เวิร์กโฟลว์ผ่าน Eventarc หากตรวจสอบบันทึกของเวิร์กโฟลว์ คุณจะเห็นว่าเวิร์กโฟลว์จะตรวจสอบเพื่อดูความแตกต่างระหว่างจำนวนอินสแตนซ์ปัจจุบันกับจำนวนอินสแตนซ์ที่คาดไว้

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

โดยจะตอบสนองต่อการแจ้งเตือนนั้นด้วยการสร้างอินสแตนซ์ VM ใหม่ที่มีคำนำหน้า datadog-instance-##

สุดท้ายแล้ว คุณจะยังมี VM 2 รายการในโปรเจ็กต์ ซึ่งก็คือ VM ที่คุณสร้างขึ้นในตอนแรกและ VM ที่เวิร์กโฟลว์สร้างขึ้นหลังจากที่ได้รับการแจ้งเตือนจาก Datadog

11e42028e7142690.png

10. ขอแสดงความยินดี

ยินดีด้วย คุณทำ Codelab เสร็จแล้ว

สิ่งที่เราได้พูดถึงไปแล้ว

  • วิธีเปิดใช้การผสานรวม Google Cloud ของ Datadog
  • วิธีสร้างเวิร์กโฟลว์เพื่อตรวจสอบและสร้าง VM ของ Compute Engine
  • วิธีเชื่อมต่อการแจ้งเตือนการตรวจสอบ Datadog กับเวิร์กโฟลว์ด้วย Eventarc
  • วิธีสร้างการตรวจสอบ Datadog และการแจ้งเตือนเมื่อมีการลบ VM