תבנית Pub/Sub ל-Splunk

תבנית 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.
  • מקביליות: המספר המקסימלי של בקשות מקבילות. ברירת המחדל היא 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 הפרטי מאוחזר ומוסף למאגר האישורים של העובד ב-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 ונשלחת לתור של הודעות שלא ניתן להעביר, המטען הייעודי (payload) המקורי יחולץ מפורמט Splunk HEC לפני הכתיבה לנושא של הודעות שלא ניתן להעביר. כך נמנעת הוספה של אירועים בתוך אירועים אחרים כשמפעילים מחדש הודעות. ברירת מחדל: false.

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

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

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

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

  • קלט: שדה הנתונים של הודעת Pub/Sub, שעבר סריאליזציה כמחרוזת JSON.
  • פלט: נתוני האירוע שיישלחו לנקודת הקצה (endpoint) של אירועים ב-Splunk HEC. הפלט חייב להיות מחרוזת או אובייקט 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 Splunk template.
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. אופציונלי: כדי לעבור מעיבוד של כל נתון בדיוק פעם אחת אל מצב סטרימינג של כל נתון לפחות פעם אחת, בוחרים באפשרות לפחות פעם אחת.
  8. לוחצים על הפעלת העבודה.

gcloud

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

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_PubSub_to_Splunk \
    --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/Cloud_PubSub_to_Splunk
{
   "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)

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