תבנית Pub/Sub to Splunk היא צינור להעברת נתונים בזמן אמת שקורא הודעות ממינוי Pub/Sub וכותב את המטען הייעודי (payload) של ההודעה ל-Splunk באמצעות HTTP Event Collector (HEC) של Splunk. התרחיש הנפוץ ביותר לשימוש בתבנית הזו הוא ייצוא יומנים ל-Splunk. דוגמה לתהליך העבודה הבסיסי מופיעה במאמר פריסת ייצוא יומנים שמוכנים לייצור ב-Splunk באמצעות Dataflow.
לפני הכתיבה ל-Splunk, אפשר גם להחיל פונקציה בהגדרת המשתמש (UDF) ב-JavaScript על מטען הייעודי (payload) של ההודעה. הודעות שעיבודן נכשל מועברות לנושא לא מעובד ב-Pub/Sub, כדי לפתור את הבעיה ולעבד אותן מחדש.
כדי להוסיף שכבת הגנה לאסימון HEC, אפשר גם להעביר מפתח Cloud KMS יחד עם פרמטר האסימון HEC שמקודד ב-Base64 ומוצפן באמצעות מפתח Cloud KMS. פרטים נוספים על הצפנה של פרמטר האסימון של HEC זמינים במאמר בנושא נקודת הקצה להצפנה של Cloud KMS API.
הדרישות לגבי צינורות עיבוד נתונים
- מינוי Pub/Sub של המקור צריך להתקיים לפני שמריצים את צינור הנתונים.
- הנושא שלא עבר עיבוד ב-Pub/Sub צריך להתקיים לפני שמריצים את צינור הנתונים.
- צריכה להיות גישה לנקודת הקצה של Splunk HEC מהרשת של העובדים ב-Dataflow.
- צריך ליצור את הטוקן של Splunk HEC ולוודא שהוא זמין.
פרמטרים של תבניות
פרמטרים נדרשים
- inputSubscription: מינוי Pub/Sub שממנו יתבצע קריאת הקלט. לדוגמה,
projects/your-project-id/subscriptions/your-subscription-name. - url: כתובת ה-URL של Splunk HEC. צריכה להיות אפשרות להפנות את כתובת ה-URL מ-VPC שצינור עיבוד הנתונים פועל בו. לדוגמה,
https://splunk-hec-host:8088. - outputDeadletterTopic: נושא Pub/Sub להעברת הודעות שלא ניתן למסור. לדוגמה,
projects/<PROJECT_ID>/topics/<TOPIC_NAME>.
פרמטרים אופציונליים
- token: אסימון האימות של Splunk HEC. חובה לספק את הפרמטר הזה אם הפרמטר
tokenSourceמוגדר לערךPLAINTEXTאוKMS. - batchCount: גודל האצווה לשליחת כמה אירועים ל-Splunk. ברירת המחדל היא
1(ללא אצווה). - disableCertificateValidation: השבתת אימות אישור SSL. ברירת מחדל
false(אימות מופעל). אם הערך הואtrue, האישורים לא מאומתים (כל האישורים מהימנים) והמערכת מתעלמת מהפרמטרrootCaCertificatePath. - parallelism: המספר המקסימלי של בקשות מקבילות. ברירת המחדל היא
1(ללא מקביליות). - includePubsubMessage: הכללת ההודעה המלאה של Pub/Sub במטען הייעודי (payload). ברירת המחדל היא
false(רק רכיב הנתונים נכלל במטען הייעודי). - tokenKMSEncryptionKey: מפתח Cloud KMS שמשמש לפענוח מחרוזת הטוקן של HEC. חובה לספק את הפרמטר הזה כשמגדירים את tokenSource ל-KMS. אם מספקים את מפתח Cloud KMS, צריך להעביר את מחרוזת האסימון של HEC בצורה מוצפנת. לדוגמה,
projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name. - tokenSecretId: המזהה הסודי של הטוקן ב-Secret Manager. חובה לספק את הפרמטר הזה כשמגדירים את tokenSource לערך
SECRET_MANAGER. לדוגמה,projects/your-project-id/secrets/your-secret/versions/your-secret-version. - tokenSource: המקור של הטוקן. הערכים המותרים:
PLAINTEXT,KMSו-SECRET_MANAGER. חובה לציין את הפרמטר הזה כשמשתמשים ב-Secret Manager. אם הערך שלtokenSourceהואKMS,tokenKMSEncryptionKeyוהוא מוצפן, צריך לספק את הערךtoken. אם הערך שלtokenSourceהואSECRET_MANAGER, צריך לציין אתtokenSecretId. אם הערך שלtokenSourceהואPLAINTEXT, צריך לספק את הערךtoken. - rootCaCertificatePath: כתובת ה-URL המלאה לאישור CA הבסיסי ב-Cloud Storage. האישור שמועבר ב-Cloud Storage צריך להיות בקידוד DER, ואפשר לספק אותו בקידוד בינארי או בקידוד שניתן להדפסה (Base64). אם האישור מסופק בקידוד Base64, הוא צריך להתחיל ב------BEGIN CERTIFICATE----- ולהסתיים ב------END CERTIFICATE-----. אם הפרמטר הזה מסופק, קובץ אישור ה-CA הפרטי מאוחזר ומוסף למאגר האישורים של ה-worker של Dataflow כדי לאמת את אישור ה-SSL של נקודת הקצה של Splunk HEC. אם לא מציינים את הפרמטר הזה, נעשה שימוש במאגר ברירת המחדל של אישורים מהימנים. לדוגמה,
gs://mybucket/mycerts/privateCA.crt. - enableBatchLogs: מציין אם להפעיל יומנים עבור קבוצות של נתונים שנכתבים ב-Splunk. ברירת מחדל:
true. - enableGzipHttpCompression: מציין אם בקשות HTTP שנשלחות ל-Splunk HEC צריכות להיות דחוסות (תוכן בקידוד gzip). ברירת מחדל:
true. - 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.
- unwrapHecForDeadletter: אם האפשרות הזו מופעלת, והודעה לא נכתבת ב-Splunk ונשלחת לתור deadletter, המטען הייעודי (payload) המקורי יחולץ מפורמט Splunk HEC לפני הכתיבה לנושא deadletter. כך נמנעת הוספה של אירועים בתוך אירועים אחרים כשמפעילים מחדש הודעות. ברירת מחדל:
false.
פונקציה בהגדרת המשתמש
אפשר גם להרחיב את התבנית הזו על ידי כתיבת פונקציה בהגדרת המשתמש (UDF). התבנית קוראת ל-UDF עבור כל רכיב קלט. מטענים ייעודיים של רכיבים עוברים סריאליזציה כמחרוזות JSON. למידע נוסף, ראו יצירת פונקציות מוגדרות על ידי המשתמש לתבניות Dataflow.
מפרט הפונקציה
המאפיינים של פונקציית UDF:
- קלט: שדה הנתונים של הודעת Pub/Sub, שעבר סריאליזציה כמחרוזת JSON.
- פלט: נתוני האירוע שיישלחו לנקודת הקצה (endpoint) של האירועים ב-Splunk HEC. הפלט חייב להיות מחרוזת או אובייקט JSON במחרוזת.
הרצת התבנית
המסוף
- עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow. כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית Pub/Sub to Splunk (Pub/Sub ל-Splunk).
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- אופציונלי: כדי לעבור מעיבוד של כל נתון בדיוק פעם אחת אל מצב סטרימינג של כל נתון לפחות פעם אחת, בוחרים באפשרות לפחות פעם אחת.
- לוחצים על הפעלת העבודה.
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,\ token=TOKEN,\ url=URL,\ outputDeadletterTopic=projects/PROJECT_ID/topics/DEADLETTER_TOPIC_NAME,\ javascriptTextTransformGcsPath=PATH_TO_JAVASCRIPT_UDF_FILE,\ javascriptTextTransformFunctionName=JAVASCRIPT_FUNCTION,\ batchCount=BATCH_COUNT,\ parallelism=PARALLELISM,\ disableCertificateValidation=DISABLE_VALIDATION,\ rootCaCertificatePath=ROOT_CA_CERTIFICATE_PATH
מחליפים את מה שכתוב בשדות הבאים:
-
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 -
TOKEN: אסימון Splunk Http Event Collector -
URL: נתיב כתובת ה-URL של Splunk's Http Event Collector (לדוגמה,https://splunk-hec-host:8088) -
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: גודל האצווה שמשמש לשליחת אירועים מרובים אל Splunk -
PARALLELISM: מספר הבקשות המקבילות שמשמשות לשליחת אירועים אל Splunk -
DISABLE_VALIDATION:trueאם רוצים להשבית את האימות של אישור ה-SSL -
ROOT_CA_CERTIFICATE_PATH: הנתיב לאישור CA הבסיסי ב-Cloud Storage (לדוגמה,gs://your-bucket/privateCA.crt)
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", "token": "TOKEN", "url": "URL", "outputDeadletterTopic": "projects/PROJECT_ID/topics/DEADLETTER_TOPIC_NAME", "javascriptTextTransformGcsPath": "PATH_TO_JAVASCRIPT_UDF_FILE", "javascriptTextTransformFunctionName": "JAVASCRIPT_FUNCTION", "batchCount": "BATCH_COUNT", "parallelism": "PARALLELISM", "disableCertificateValidation": "DISABLE_VALIDATION", "rootCaCertificatePath": "ROOT_CA_CERTIFICATE_PATH" } }
מחליפים את מה שכתוב בשדות הבאים:
-
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 -
TOKEN: אסימון Splunk Http Event Collector -
URL: נתיב כתובת ה-URL של Splunk's Http Event Collector (לדוגמה,https://splunk-hec-host:8088) -
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: גודל האצווה שמשמש לשליחת אירועים מרובים אל Splunk -
PARALLELISM: מספר הבקשות המקבילות שמשמשות לשליחת אירועים אל Splunk -
DISABLE_VALIDATION:trueאם רוצים להשבית את האימות של אישור ה-SSL -
ROOT_CA_CERTIFICATE_PATH: הנתיב לאישור CA הבסיסי ב-Cloud Storage (לדוגמה,gs://your-bucket/privateCA.crt)
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.