התבנית 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 שעבר המרה למחרוזת.
הרצת התבנית
המסוף
- עוברים לדף 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/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
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.