תבנית 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 מהרשת של העובדים (workers) ב-Dataflow.
  • צריך ליצור מפתח Datadog API ולהפוך אותו לזמין.

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

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

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

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

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

gcloud

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

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/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-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • 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.

  • PATH_TO_JAVASCRIPT_UDF_FILE: ה-URI של Cloud Storage של קובץ .js שמגדיר את הפונקציה בהגדרת המשתמש (UDF) ב-JavaScript שרוצים להשתמש בה – לדוגמה, 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-LOCATION/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: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud
  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • VERSION: הגרסה של התבנית שבה רוצים להשתמש

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • 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.

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

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