תבנית Pub/Sub to Datadog

התבנית Pub/Sub to Datadog היא פייפליין בסטרימינג שקורא הודעות ממינוי Pub/Sub וכותב את מטען ייעודי (payload) של ההודעה ל-Datadog באמצעות נקודת קצה (endpoint) של Datadog. התרחיש הנפוץ ביותר לשימוש בתבנית הזו הוא ייצוא של קובצי יומן ל-Datadog.

לפני הכתיבה ל-Datadog, אפשר להחיל פונקציה בהגדרת המשתמש (UDF) ב-JavaScript על מטען הייעודי (payload) של ההודעה. הודעות שעיבוד שלהן נכשל מועברות לנושא לא מעובד ב-Pub/Sub, כדי לפתור את הבעיה ולעבד אותן מחדש.

כדי להוסיף שכבת הגנה למפתחות ולסודות של ה-API, אפשר גם להעביר מפתח Cloud KMS יחד עם פרמטר מפתח ה-API בקידוד Base64, שמוצפן באמצעות מפתח Cloud KMS. פרטים נוספים על הצפנת הפרמטר של מפתח ה-API זמינים במאמר בנושא נקודת הקצה להצפנה של Cloud KMS API.

הדרישות לגבי צינורות עיבוד נתונים

  • מינוי Pub/Sub של המקור צריך להתקיים לפני שמריצים את צינור הנתונים.
  • הנושא שלא עבר עיבוד ב-Pub/Sub צריך להתקיים לפני שמריצים את צינור הנתונים.
  • צריכה להיות גישה לכתובת ה-URL של Datadog מהרשת של העובדים ב-Dataflow.
  • צריך ליצור מפתח API של Datadog ולוודא שהוא זמין.

פרמטרים של תבניות

פרמטרים נדרשים

  • ‫inputSubscription: המינוי ל-Pub/Sub שממנו ייקרא הקלט. לדוגמה, projects/your-project-id/subscriptions/your-subscription-name.
  • ‫url: כתובת ה-URL של Datadog Logs API. צריך להיות אפשר לנתב את כתובת ה-URL הזו מ-VPC שבו הצינור פועל. מידע נוסף זמין במאמר בנושא שליחת יומנים (https://docs.datadoghq.com/api/latest/logs/#send-logs) במסמכי התיעוד של Datadog. לדוגמה, https://http-intake.logs.datadoghq.com.
  • ‫outputDeadletterTopic: נושא Pub/Sub להעברת הודעות שלא ניתן למסור. לדוגמה, projects/<PROJECT_ID>/topics/<TOPIC_NAME>.

פרמטרים אופציונליים

  • ‫apiKey: מפתח ה-API של Datadog. חובה לציין את הערך הזה אם המאפיין apiKeySource מוגדר לערך PLAINTEXT או KMS. מידע נוסף זמין במאמר בנושא מפתחות API ומפתחות אפליקציה (https://docs.datadoghq.com/account_management/api-app-keys/) במסמכי התיעוד של Datadog.
  • ‫batchCount: גודל הקבוצה לשליחת כמה אירועים אל Datadog. ערך ברירת המחדל הוא 100.
  • מקביליות: המספר המקסימלי של בקשות מקבילות. ברירת המחדל היא 1 (ללא מקביליות).
  • ‫includePubsubMessage: האם לכלול את ההודעה המלאה של Pub/Sub במטען הייעודי (payload). ברירת המחדל היא true (כל הרכיבים, כולל רכיב הנתונים, נכללים במטען הייעודי).
  • ‫apiKeyKMSEncryptionKey: מפתח Cloud KMS שמשמש לפענוח מפתח ה-API. חובה לציין את הפרמטר הזה אם הערך של apiKeySource הוא KMS. אם מסופק מפתח Cloud KMS, צריך להעביר מפתח API מוצפן. לדוגמה, projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name.
  • ‫apiKeySecretId: מזהה הסוד ב-Secret Manager של מפתח ה-API. חובה לציין את הפרמטר הזה אם הערך של apiKeySource הוא SECRET_MANAGER. לדוגמה, projects/your-project-id/secrets/your-secret/versions/your-secret-version.
  • ‫apiKeySource: המקור של מפתח ה-API. הערכים הנתמכים הם: PLAINTEXT,‏ KMS ו-SECRET_MANAGER. חובה לציין את הפרמטר הזה אם משתמשים ב-Secret Manager. אם הערך של apiKeySource הוא KMS, צריך לספק גם את הערכים apiKeyKMSEncryptionKey ו-API Key מוצפן. אם הערך של apiKeySource הוא SECRET_MANAGER, צריך לספק גם את apiKeySecretId. אם הערך של apiKeySource הוא PLAINTEXT, צריך לספק גם את apiKey.
  • ‫javascriptTextTransformGcsPath: ה-URI של Cloud Storage של קובץ ה-‎ .js שמגדיר את הפונקציה בהגדרת המשתמש (UDF) ב-JavaScript שבה רוצים להשתמש. לדוגמה, gs://my-bucket/my-udfs/my_file.js.
  • ‫javascriptTextTransformFunctionName: השם של פונקציית JavaScript בהגדרת המשתמש (UDF) שבה רוצים להשתמש. לדוגמה, אם קוד פונקציית ה-JavaScript הוא myTransform(inJson) { /*...do stuff...*/ }, אז שם הפונקציה הוא myTransform. דוגמאות ל-UDF ב-JavaScript זמינות במאמר UDF Examples (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples).
  • ‫javascriptTextTransformReloadIntervalMinutes: הגדרה של המרווח שבו עובדים יכולים לבדוק אם יש שינויים בפונקציות בהגדרת המשתמש (UDF) ב-JavaScript כדי לטעון מחדש את הקבצים. ברירת המחדל היא 0.

פונקציה בהגדרת המשתמש

אפשר גם להרחיב את התבנית הזו על ידי כתיבת פונקציה בהגדרת המשתמש (UDF). התבנית קוראת ל-UDF לכל רכיב קלט. מטענים ייעודיים של רכיבים עוברים סריאליזציה כמחרוזות JSON. מידע נוסף זמין במאמר בנושא יצירת פונקציות מוגדרות על ידי המשתמש לתבניות Dataflow.

מפרט הפונקציה

המאפיינים של פונקציית UDF:

  • קלט: שדה הנתונים של הודעת Pub/Sub, שעבר סריאליזציה כמחרוזת JSON.
  • פלט: נתוני האירוע שיישלחו לנקודת הקצה (endpoint) של Datadog Log. הפלט חייב להיות מחרוזת או אובייקט JSON שעבר המרה למחרוזת.

הרצת התבנית

המסוף

  1. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

    רשימה של אזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר מיקומי Dataflow.

  5. בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית Pub/Sub to Datadog (Pub/Sub ל-Datadog).
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

gcloud

במעטפת או בטרמינל, מריצים את התבנית:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates/VERSION/Cloud_PubSub_to_Datadog \
    --region REGION_NAME \
    --staging-location STAGING_LOCATION \
    --parameters \
inputSubscription=projects/PROJECT_ID/subscriptions/INPUT_SUBSCRIPTION_NAME,\
apiKey=API_KEY,\
url=URL,\
outputDeadletterTopic=projects/PROJECT_ID/topics/DEADLETTER_TOPIC_NAME,\
javascriptTextTransformGcsPath=PATH_TO_JAVASCRIPT_UDF_FILE,\
javascriptTextTransformFunctionName=JAVASCRIPT_FUNCTION,\
batchCount=BATCH_COUNT,\
parallelism=PARALLELISM

מחליפים את מה שכתוב בשדות הבאים:

  • ‫JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • ‫REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • ‫VERSION: הגרסה של התבנית שרוצים להשתמש בה

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הזו בתיקיית ההורה המתאימה עם התאריך בדלי – gs://dataflow-templates/
  • ‫STAGING_LOCATION: המיקום של קבצים מקומיים להעברה (לדוגמה, gs://your-bucket/staging)
  • ‫INPUT_SUBSCRIPTION_NAME: השם של המינוי ל-Pub/Sub
  • ‫API_KEY: מפתח ה-API של Datadog
  • ‫URL: כתובת ה-URL של נקודת הקצה של Datadog (לדוגמה, https://http-intake.logs.datadoghq.com)
  • ‫DEADLETTER_TOPIC_NAME: שם הנושא ב-Pub/Sub
  • ‫JAVASCRIPT_FUNCTION: השם של פונקציית JavaScript בהגדרת המשתמש (UDF) שרוצים להשתמש בה

    לדוגמה, אם קוד הפונקציה ב-JavaScript הוא myTransform(inJson) { /*...do stuff...*/ }, אז שם הפונקציה הוא myTransform. דוגמאות ל-UDF ב-JavaScript זמינות במאמר UDF Examples.

  • ‫PATH_TO_JAVASCRIPT_UDF_FILE: ה-URI של Cloud Storage של קובץ .js שמגדיר את פונקציית JavaScript בהגדרת המשתמש (UDF) שרוצים להשתמש בה – לדוגמה, gs://my-bucket/my-udfs/my_file.js
  • ‫BATCH_COUNT: גודל האצווה לשימוש בשליחת אירועים מרובים אל Datadog
  • ‫PARALLELISM: מספר הבקשות המקבילות לשימוש בשליחת אירועים אל Datadog

API

כדי להפעיל את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates/VERSION/Cloud_PubSub_to_Datadog
{
   "jobName": "JOB_NAME",
   "environment": {
       "ipConfiguration": "WORKER_IP_UNSPECIFIED",
       "additionalExperiments": []
   },
   "parameters": {
       "inputSubscription": "projects/PROJECT_ID/subscriptions/INPUT_SUBSCRIPTION_NAME",
       "apiKey": "API_KEY",
       "url": "URL",
       "outputDeadletterTopic": "projects/PROJECT_ID/topics/DEADLETTER_TOPIC_NAME",
       "javascriptTextTransformGcsPath": "PATH_TO_JAVASCRIPT_UDF_FILE",
       "javascriptTextTransformFunctionName": "JAVASCRIPT_FUNCTION",
       "batchCount": "BATCH_COUNT",
       "parallelism": "PARALLELISM"
   }
}

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Google Cloud Dataflow
  • ‫JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • ‫LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • ‫VERSION: הגרסה של התבנית שרוצים להשתמש בה

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הזו בתיקיית ההורה המתאימה עם התאריך בדלי – gs://dataflow-templates/
  • ‫STAGING_LOCATION: המיקום של קבצים מקומיים להעברה (לדוגמה, gs://your-bucket/staging)
  • ‫INPUT_SUBSCRIPTION_NAME: השם של המינוי ל-Pub/Sub
  • ‫API_KEY: מפתח ה-API של Datadog
  • ‫URL: כתובת ה-URL של נקודת הקצה של Datadog (לדוגמה, https://http-intake.logs.datadoghq.com)
  • ‫DEADLETTER_TOPIC_NAME: שם הנושא ב-Pub/Sub
  • ‫JAVASCRIPT_FUNCTION: השם של פונקציית JavaScript בהגדרת המשתמש (UDF) שרוצים להשתמש בה

    לדוגמה, אם קוד הפונקציה ב-JavaScript הוא myTransform(inJson) { /*...do stuff...*/ }, אז שם הפונקציה הוא myTransform. דוגמאות ל-UDF ב-JavaScript זמינות במאמר UDF Examples.

  • ‫PATH_TO_JAVASCRIPT_UDF_FILE: ה-URI של Cloud Storage של קובץ .js שמגדיר את פונקציית JavaScript בהגדרת המשתמש (UDF) שרוצים להשתמש בה – לדוגמה, gs://my-bucket/my-udfs/my_file.js
  • ‫BATCH_COUNT: גודל האצווה לשימוש בשליחת אירועים מרובים אל Datadog
  • ‫PARALLELISM: מספר הבקשות המקבילות לשימוש בשליחת אירועים אל Datadog

המאמרים הבאים