ניתוב התראות של Datadog ל-Google Cloud באמצעות Eventarc (חלק 2)

1. מבוא

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

בעזרת Eventarc קל לקשר בין שירותי Google Cloud לאירועים ממגוון מקורות. הוא מאפשר לפתח ארכיטקטורות מבוססות-אירועים שבהן מיקרו-שירותים (microservices) בצימוד חלש ומפוזרים. הוא גם מטפל בהטמעת נתונים של אירועים, מסירה, אבטחה, הרשאות וטיפול בשגיאות, כדי לשפר את הגמישות של המפתחים ואת עמידות האפליקציות.

Datadog היא פלטפורמת אבטחה וניטור לאפליקציות בענן. המערכת משלבת דוחות, מדדים ויומנים מקצה לקצה כדי שתהיה לכם אפשרות לעקוב אחר האפליקציות, התשתית והשירותים שלכם של צד שלישי.

Workflows היא פלטפורמת תזמור מנוהלת שמפעילה שירותים לפי סדר שהגדרתם, שנקרא 'תהליך עבודה'. תהליכי העבודה האלה יכולים לשלב שירותים שמתארחים ב-Cloud Run או ב-Cloud Functions, בשירותי Google Cloud כמו Cloud Vision AI ו-BigQuery, וכל API מבוסס-HTTP.

ב-Codelab הראשון, למדתם איך לנתב התראות של Datadog ל-Google Cloud באמצעות Eventarc. בשיעור ה-Codelab השני הזה תלמדו איך להגיב להתראות של מעקב ב-Datadog באמצעות Workflows. באופן ספציפי יותר, תוכלו ליצור 2 מכונות וירטואליות של Compute Engine ולעקוב אחריהן באמצעות מוניטור של Datadog. אחרי שאחת מהמכונות הווירטואליות תימחק, תקבלו התראה מ-Datadog ל-Workflows דרך Eventarc. לאחר מכן, Workflows ייצור מחדש את המכונה הווירטואלית שנמחקה כדי להחזיר את מספר המכונות הווירטואליות ל-2.

מה תלמדו

  • איך מפעילים את השילוב של Datadog עם Google Cloud.
  • איך ליצור תהליך עבודה כדי לבדוק וליצור מכונות וירטואליות של Compute Engine.
  • איך לקשר התראות של מעקב ב-Datadog ל-Workflows עם Eventarc.
  • איך ליצור מעקב של Datadog והתראות לגבי מחיקות VM.

2. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט.
  • יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות לניקוי בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

במסוף Google Cloud, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:

55efc1aaa7a4d3ad.png

נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:

7ffe5cbb04455448.png

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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. הפעלת השילוב של Datadog עם Google Cloud

כדי להשתמש ב-Datadog למעקב אחר פרויקט, צריך להפעיל את ממשקי ה-API הנדרשים ל-Datadog, ליצור חשבון שירות ולחבר את חשבון השירות ל-Datadog.

הפעלת ממשקי API ל-Datadog

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"

כדי לאפשר לחשבון השירות של 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. בשדה 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 יוצר באופן אוטומטי כמה מרכזי בקרה שקשורים ל-Google Cloud בקטע Dashboards:

66fdf2d26e4710d.png

5. יצירת מכונות וירטואליות של Compute Engine

בשלב הבא, יוצרים מכונות וירטואליות (VMs) של Compute Engine. תוכלו לנטר את המכונות הווירטואליות האלה באמצעות מוניטור של Datadog ולהגיב להתראות של Datadog באמצעות תהליך עבודה ב-Google Cloud.

יצירת 2 מכונות וירטואליות של Compute Engine:

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

המכונות הווירטואליות שנוצרו פועלות תוך דקה בערך במסוף Cloud. אחרי זמן מה (בדרך כלל 10 דקות), המכונות הווירטואליות האלה אמורות להופיע ב-Datadog בלוח הבקרה של Google Compute Engine בקטע Dashboards:

78a51374c1d0c11e.png

6. יצירת תהליך עבודה

עכשיו, אחרי שהפעלתם 2 מכונות וירטואליות, אתם יכולים ליצור תהליך עבודה שמגיב להתראות מצג של Datadog. תהליך העבודה יכול להיות מתוחכם ככל האפשר, אבל במקרה הזה, תהליך העבודה יבדוק את מספר המכונות הווירטואליות שפועלות. אם הוא ירד מתחת ל-2, הוא ייצור מכונות וירטואליות חדשות כדי לוודא ש-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. אחרי שהאירוע מתקבל, תהליך העבודה בודק את מספר המכונות הפעילות ויוצר מכונות וירטואליות חדשות לפי הצורך.

פורסים את תהליך העבודה:

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

תהליך העבודה נפרס אבל עדיין לא פועל. הוא יופעל על ידי טריגר של Eventarc כשמתקבלת התראה של Datadog.

7. יצירת טריגר של Eventarc

עכשיו אתם מוכנים לקשר אירועים מספק ה-Datadog אל Workflows באמצעות טריגר 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.

המעקב יבדוק את מספר המכונות הווירטואליות של Compute Engine שפועלות, והתראה אם הוא יהיה נמוך מ-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 ולבסוף את תהליך העבודה, מוחקים אחת מהמכונות הווירטואליות:

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

אחרי כמה שניות אתם אמורים לראות שהמכונה נמחקה במסוף Google Cloud.

יש זמן אחזור קצר עד שהשינוי הזה יופיע ב-Datadog. לאחר זמן מה (בדרך כלל 10 דקות), המכשיר אמור להופיע ב-Datadog כדי לזהות ולהתריע בקטע Manage Monitors:

50f93d560b6c1973.png

אחרי שתקבלו את ההתראות ממעקב של Datadog, אתם אמורים לראות שההתראה מועברת אל Workflows דרך Eventarc. אם תבדקו את היומנים של Workflows, תראו ש-Workflows בודק את ההבדל בין ספירת המכונות הנוכחית לבין ספירת המכונות הצפויה:

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

כדי להגיב להתראה הזו, המערכת יוצרת מכונה וירטואלית חדשה עם הקידומת datadog-instance-##.

בסוף יהיו לכם 2 מכונות וירטואליות בפרויקט: אחת שיצרתם בהתחלה והשנייה שנוצרה על ידי Workflows אחרי ההתראה של Datadog!

11e42028e7142690.png

10. מזל טוב

כל הכבוד, סיימת את ה-Codelab!

הנושאים שטיפלנו בהם

  • איך מפעילים את השילוב של Datadog עם Google Cloud.
  • איך ליצור תהליך עבודה כדי לבדוק וליצור מכונות וירטואליות של Compute Engine.
  • איך לקשר התראות של מעקב ב-Datadog ל-Workflows עם Eventarc.
  • איך ליצור מעקב של Datadog והתראות לגבי מחיקות VM.