กำหนดเส้นทางการแจ้งเตือนการตรวจสอบ 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 ทั้งหมดเข้าด้วยกัน

คุณได้เรียนรู้วิธีกำหนดเส้นทางการแจ้งเตือนการตรวจสอบของ Datadog ไปยัง Google Cloud ด้วย Eventarc ใน Codelab แรกแล้ว ใน Codelab ที่สองนี้ คุณจะได้เรียนรู้วิธีตอบสนองต่อการแจ้งเตือนการตรวจสอบของ Datadog ด้วยเวิร์กโฟลว์ กล่าวอย่างเจาะจงก็คือ คุณจะสร้างเครื่องเสมือน Compute Engine 2 เครื่องและตรวจสอบเครื่องเสมือนด้วยจอภาพ Datadog เมื่อลบ VM รายการหนึ่งแล้ว คุณจะได้รับการแจ้งเตือนจาก 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 ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

ตั้งค่า 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 ได้ด้วย โดยทำดังนี้

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 แล้ว คุณจะใช้ช่องทางและบัญชีบริการที่ตั้งค่าไว้ใน Codelab แรก

สร้างทริกเกอร์ที่มีแชแนล 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. ทดสอบตรวจสอบและทริกเกอร์

คุณจะต้องลบ VM รายการหนึ่งออกในการทดสอบจอภาพ Datadog, Eventarc ทริกเกอร์ และเวิร์กโฟลว์ในที่สุด

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

หลังจากผ่านไป 2-3 วินาที คุณจะเห็นอินสแตนซ์ที่ถูกลบใน Google Cloud Console

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

50f93d560b6c1973.png

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

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

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

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

11e42028e7142690.png

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

ยินดีด้วย คุณศึกษา Codelab จบแล้ว

สรุปประเด็นที่ได้พูดถึง

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