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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ มิ.ย. 9, 2022
account_circleเขียนโดย Mete Atamel

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