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

מה תלמדו

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

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

הגדרת סביבה בקצב אישי

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

מפעילים את Cloud Shell

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

ב-מסוף 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

לאחר מכן, יוצרים כמה מכונות וירטואליות (VM) ב-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 Monitoring לזרימות עבודה באמצעות Eventarc.
  • איך יוצרים התראה ומעקב ב-Datadog על מחיקות של מכונות וירטואליות.