התבנית 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.
- צריך ליצור מפתח 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. - parallelism: המספר המקסימלי של בקשות מקבילות. ברירת המחדל היא
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 במחרוזת.
הרצת התבנית
המסוף
- עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow. כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית של Dataflow), בוחרים בתבנית Pub/Sub to Datadog (מ-Pub/Sub אל Datadog).
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- לוחצים על הפעלת העבודה.
gcloud
במעטפת או בטרמינל, מריצים את התבנית:
gcloud dataflow jobs run JOB_NAME \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/ \ --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/ { "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
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.