Pub/Sub ๅˆฐ Splunk ็ฏ„ๆœฌ

ใ€Œๅฐ‡ Pub/Sub ็š„ๅ…งๅฎนๅ‚ณ่ผธๅˆฐ Splunk ็ฏ„ๆœฌใ€ๆ˜ฏไธ€็จฎไธฒๆต็ฎก้“๏ผŒๅฏ่ฎ€ๅ– Pub/Sub ่จ‚้–ฑ็š„่จŠๆฏ๏ผŒไธฆ้€้Ž Splunk ็š„ HTTP Event Collector (HEC) ๅฐ‡่จŠๆฏ้…ฌ่ผ‰ๅฏซๅ…ฅ Splunkใ€‚้€™ๅ€‹็ฏ„ๆœฌๆœ€ๅธธ่ฆ‹็š„็”จ้€”ๆ˜ฏๅฐ‡่จ˜้Œ„ๅŒฏๅ‡บ่‡ณ Splunkใ€‚ๅฆ‚่ฆๆŸฅ็œ‹ๅŸบ็คŽๅทฅไฝœๆต็จ‹็š„็ฏ„ไพ‹๏ผŒ่ซ‹ๅƒ้–ฑใ€Œไฝฟ็”จ Dataflow ๅฐ‡ๅฏ็”จๆ–ผๅฏฆ้š›ๅทฅไฝœ็š„่จ˜้Œ„ๆช”ๅŒฏๅ‡บไฝœๆฅญ้ƒจ็ฝฒ่‡ณ Splunkใ€ใ€‚

ๆ‚จไนŸๅฏไปฅๅœจๅฏซๅ…ฅ Splunk ๅ‰๏ผŒๅฐ‡ JavaScript ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผๅฅ—็”จ่‡ณ่จŠๆฏ้…ฌ่ผ‰ใ€‚็ณป็ตฑๆœƒๅฐ‡็™ผ็”Ÿ่™•็†ๅ•้กŒ็š„ๆ‰€ๆœ‰่จŠๆฏ่ฝ‰้€่‡ณๆœช่™•็†็š„ Pub/Sub ไธป้กŒ๏ผŒไปฅไพฟ้€ฒไธ€ๆญฅๅŸท่กŒ็–‘้›ฃๆŽ’่งฃๅ’Œ้‡ๆ–ฐ่™•็†ใ€‚

็‚บไบ†ๅขžๅŠ ๅคšไธ€ๅฑคๅฎ‰ๅ…จ้˜ฒ่ญท๏ผŒๆ‚จไนŸๅฏไปฅๅ‚ณ้ž Cloud KMS ้‡‘้‘ฐ๏ผŒไปฅๅŠไฝฟ็”จ Cloud KMS ้‡‘้‘ฐๅŠ ๅฏ†็š„ Base64 ็ทจ็ขผ HEC ๆฌŠๆ–ๅƒๆ•ธใ€‚ๅฆ‚่ฆ้€ฒไธ€ๆญฅ็žญ่งฃๅฆ‚ไฝ•ๅŠ ๅฏ† 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๏ผšSplunk HEC ็ถฒๅ€ใ€‚็ถฒๅ€ๅฟ…้ ˆๅฏๅพž็ฎก้“ๅŸท่กŒ็š„่™›ๆ“ฌ็งๆœ‰้›ฒ (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 ่จŠๆฏใ€‚้ ่จญ false (้…ฌ่ผ‰ไธญๅชๆœƒๅŒ…ๅซ่ณ‡ๆ–™ๅ…ƒ็ด )ใ€‚
  • tokenKMSEncryptionKey๏ผš็”จไพ†่งฃๅฏ† HEC ๆฌŠๆ–ๅญ—ไธฒ็š„ Cloud KMS ้‡‘้‘ฐใ€‚ๅฆ‚ๆžœ tokenSource ่จญ็‚บ KMS๏ผŒๅฐฑๅฟ…้ ˆๆไพ›้€™้ …ๅƒๆ•ธใ€‚ๅฆ‚ๆžœๆไพ› Cloud KMS ้‡‘้‘ฐ๏ผŒๅ‰‡ๅฟ…้ ˆไปฅๅŠ ๅฏ†ๆ–นๅผๅ‚ณ้€ HEC ๆฌŠๆ–ๅญ—ไธฒใ€‚ไพ‹ๅฆ‚๏ผšprojects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-nameใ€‚
  • tokenSecretId๏ผšๆฌŠๆ–็š„ Secret Manager ๅฏ†้‘ฐ IDใ€‚ๅฆ‚ๆžœ 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๏ผšCloud Storage ไธญๆ น CA ๆ†‘่ญ‰็š„ๅฎŒๆ•ด็ถฒๅ€ใ€‚Cloud Storage ไธญๆไพ›็š„ๆ†‘่ญ‰ๅฟ…้ ˆๆŽก็”จ DER ็ทจ็ขผ๏ผŒไธ”ๅฏๆŽก็”จไบŒ้€ฒไฝๆˆ–ๅฏๅˆ—ๅฐ (Base64) ็ทจ็ขผใ€‚ๅฆ‚ๆžœๆ†‘่ญ‰ๆ˜ฏไปฅ Base64 ็ทจ็ขผๆไพ›๏ผŒ้–‹้ ญๅฟ…้ ˆ็‚บใ€Œ-----BEGIN CERTIFICATE-----ใ€๏ผŒ็ตๅฐพๅฟ…้ ˆ็‚บใ€Œ-----END CERTIFICATE-----ใ€ใ€‚ๅฆ‚ๆžœๆไพ›้€™ๅ€‹ๅƒๆ•ธ๏ผŒ็ณป็ตฑๆœƒๆ“ทๅ–้€™ๅ€‹็งๆœ‰ CA ๆ†‘่ญ‰ๆช”ๆกˆ๏ผŒไธฆๆ–ฐๅขž่‡ณ Dataflow ๅทฅไฝœไบบๅ“ก็š„ไฟกไปปๅญ˜ๆ”พๅ€๏ผŒไปฅไพฟ้ฉ—่ญ‰ Splunk HEC ็ซฏ้ปž็š„ SSL ๆ†‘่ญ‰ใ€‚ๅฆ‚ๆœชๆไพ›้€™ๅ€‹ๅƒๆ•ธ๏ผŒ็ณป็ตฑๆœƒไฝฟ็”จ้ ่จญ็š„ไฟกไปปๅ„ฒๅญ˜ๅ€ใ€‚ไพ‹ๅฆ‚๏ผšgs://mybucket/mycerts/privateCA.crtใ€‚
  • enableBatchLogs๏ผšๆŒ‡ๅฎšๆ˜ฏๅฆๆ‡‰็‚บๅฏซๅ…ฅ Splunk ็š„ๆ‰นๆฌกๅ•Ÿ็”จ่จ˜้Œ„ใ€‚้ ่จญๅ€ผ๏ผštrueใ€‚
  • enableGzipHttpCompression๏ผšๆŒ‡ๅฎšๅ‚ณ้€่‡ณ Splunk HEC ็š„ HTTP ่ฆๆฑ‚ๆ˜ฏๅฆๆ‡‰ๅฃ“็ธฎ (gzip ๅ…งๅฎน็ทจ็ขผ)ใ€‚้ ่จญๅ€ผ๏ผštrueใ€‚
  • javascriptTextTransformGcsPath๏ผšๅฎš็พฉ่ฆไฝฟ็”จ็š„ JavaScript ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ (UDF) ็š„ .js ๆช”ๆกˆ Cloud Storage URIใ€‚ไพ‹ๅฆ‚๏ผšgs://my-bucket/my-udfs/my_file.jsใ€‚
  • javascriptTextTransformFunctionName๏ผš่ฆไฝฟ็”จ็š„ JavaScript ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ (UDF) ๅ็จฑใ€‚่ˆ‰ไพ‹ไพ†่ชช๏ผŒๅฆ‚ๆžœๆ‚จ็š„ JavaScript ๅ‡ฝๅผ็จ‹ๅผ็ขผๆ˜ฏ myTransform(inJson) { /*...do stuff...*/ }๏ผŒๅ‰‡ๅ‡ฝๅผๅ็จฑๅฐฑๆ˜ฏ myTransformใ€‚ๅฆ‚้œ€ JavaScript UDF ็ฏ„ไพ‹๏ผŒ่ซ‹ๅƒ้–ฑ UDF ็ฏ„ไพ‹ (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples)ใ€‚
  • javascriptTextTransformReloadIntervalMinutes๏ผšๅฎš็พฉๅทฅไฝœไบบๅ“กๆชขๆŸฅ JavaScript UDF ่ฎŠๆ›ดไปฅ้‡ๆ–ฐ่ผ‰ๅ…ฅๆช”ๆกˆ็š„้–“้š”ใ€‚้ ่จญๅ€ผ็‚บ 0ใ€‚

ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ

ๆ‚จๅฏไปฅ่ฆ–้œ€่ฆๆ’ฐๅฏซไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ (UDF) ไพ†ๆ“ดๅ……้€™ๅ€‹็ฏ„ๆœฌใ€‚็ฏ„ๆœฌๆœƒ้‡ๅฐๆฏๅ€‹่ผธๅ…ฅๅ…ƒ็ด ๅ‘ผๅซ UDFใ€‚ๅ…ƒ็ด ้…ฌ่ผ‰ๆœƒๅบๅˆ—ๅŒ–็‚บ JSON ๅญ—ไธฒใ€‚่ฉณๆƒ…่ซ‹ๅƒ้–ฑใ€Œ็‚บ Dataflow ็ฏ„ๆœฌๅปบ็ซ‹ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผใ€ใ€‚

ๅ‡ฝๅผ่ฆๆ ผ

UDF ็š„่ฆๆ ผๅฆ‚ไธ‹๏ผš

  • ่ผธๅ…ฅ๏ผšPub/Sub ่จŠๆฏ่ณ‡ๆ–™ๆฌ„ไฝ๏ผŒ ๅบๅˆ—ๅŒ–็‚บ JSON ๅญ—ไธฒใ€‚
  • ่ผธๅ‡บ๏ผš่ฆๅ‚ณ้€่‡ณ Splunk HEC ไบ‹ไปถ็ซฏ้ปž็š„ไบ‹ไปถ่ณ‡ๆ–™ใ€‚่ผธๅ‡บๅ…งๅฎนๅฟ…้ ˆๆ˜ฏๅญ—ไธฒๆˆ–ๅญ—ไธฒๅŒ–็š„ JSON ็‰ฉไปถใ€‚

ๅŸท่กŒ็ฏ„ๆœฌ

ๆŽงๅˆถๅฐ

  1. ๅ‰ๅพ€ Dataflow ็š„ใ€ŒCreate job from templateใ€(้€้Ž็ฏ„ๆœฌๅปบ็ซ‹ๅทฅไฝœ) ้ ้ขใ€‚
  2. ๅ‰ๅพ€ใ€Œไพๆ“š็ฏ„ๆœฌๅปบ็ซ‹ๅทฅไฝœใ€
  3. ๅœจใ€Œๅทฅไฝœๅ็จฑใ€ๆฌ„ไฝไธญ๏ผŒ่ผธๅ…ฅๅฐˆๅฑฌๅทฅไฝœๅ็จฑใ€‚
  4. ้ธ็”จ๏ผšๅฆ‚่ฆไฝฟ็”จๅ€ๅŸŸ็ซฏ้ปž๏ผŒ่ซ‹ๅพžไธ‹ๆ‹‰ๅผ้ธๅ–ฎไธญ้ธๅ–ๅ€ผใ€‚้ ่จญๅ€ๅŸŸ็‚บ us-central1ใ€‚

    ๅฆ‚้œ€ๅฏๅŸท่กŒ Dataflow ๅทฅไฝœ็š„ๅœฐๅ€ๆธ…ๅ–ฎ๏ผŒ่ซ‹ๅƒ้–ฑใ€ŒDataflow ไฝ็ฝฎใ€ใ€‚

  5. ๅพžใ€ŒDataflow templateใ€(Dataflow ็ฏ„ๆœฌ) ไธ‹ๆ‹‰ๅผ้ธๅ–ฎไธญ้ธๅ– the Pub/Sub to Splunk templateใ€‚
  6. ๅœจๆไพ›็š„ๅƒๆ•ธๆฌ„ไฝไธญ่ผธๅ…ฅๅƒๆ•ธๅ€ผใ€‚
  7. ้ธ็”จ๏ผšๅฆ‚่ฆๅพžใ€Œๅƒ…้œ€่™•็†ไธ€ๆฌกใ€ๅˆ‡ๆ›่‡ณใ€Œ่‡ณๅฐ‘ไธ€ๆฌกใ€ไธฒๆตๆจกๅผ๏ผŒ่ซ‹้ธๅ–ใ€Œ่‡ณๅฐ‘ไธ€ๆฌกใ€ใ€‚
  8. ๆŒ‰ไธ€ไธ‹ใ€ŒRun Jobใ€(ๅŸท่กŒๅทฅไฝœ)ใ€‚

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 ไบ‹ไปถๆ”ถ้›†ๅ™จๆฌŠๆ–
  • URL๏ผšSplunk HTTP ไบ‹ไปถๆ”ถ้›†ๅ™จ็š„็ถฒๅ€่ทฏๅพ‘ (ไพ‹ๅฆ‚ https://splunk-hec-host:8088)
  • DEADLETTER_TOPIC_NAME๏ผšPub/Sub ไธป้กŒๅ็จฑ
  • JAVASCRIPT_FUNCTION๏ผš ๆ‚จ่ฆไฝฟ็”จ็š„ JavaScript ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ (UDF) ๅ็จฑ

    ่ˆ‰ไพ‹ไพ†่ชช๏ผŒๅฆ‚ๆžœๆ‚จ็š„ JavaScript ๅ‡ฝๅผ็จ‹ๅผ็ขผๆ˜ฏ myTransform(inJson) { /*...do stuff...*/ }๏ผŒๅ‰‡ๅ‡ฝๅผๅ็จฑๅฐฑๆ˜ฏ myTransformใ€‚ๅฆ‚้œ€ JavaScript UDF ็ฏ„ไพ‹๏ผŒ่ซ‹ๅƒ้–ฑใ€ŒUDF ็ฏ„ไพ‹ใ€ใ€‚

  • PATH_TO_JAVASCRIPT_UDF_FILE๏ผš ๅฎš็พฉ่ฆไฝฟ็”จ็š„ JavaScript ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ (UDF) ็š„ .js ๆช”ๆกˆ Cloud Storage URI๏ผŒไพ‹ๅฆ‚ gs://my-bucket/my-udfs/my_file.js
  • BATCH_COUNT๏ผšๅฐ‡ๅคšๅ€‹ไบ‹ไปถๅ‚ณ้€่‡ณ Splunk ๆ™‚ไฝฟ็”จ็š„ๆ‰นๆฌกๅคงๅฐ
  • PARALLELISM๏ผš็”จๆ–ผๅฐ‡ไบ‹ไปถๅ‚ณ้€่‡ณ Splunk ็š„ๅนณ่กŒ่ฆๆฑ‚ๆ•ธ้‡
  • DISABLE_VALIDATION๏ผštrue ๅฆ‚ๆžœ่ฆๅœ็”จ SSL ๆ†‘่ญ‰้ฉ—่ญ‰
  • ROOT_CA_CERTIFICATE_PATH๏ผšCloud Storage ไธญๆ น CA ๆ†‘่ญ‰็š„่ทฏๅพ‘ (ไพ‹ๅฆ‚ gs://your-bucket/privateCA.crt)

API

ๅฆ‚่ฆไฝฟ็”จ REST API ๅŸท่กŒ็ฏ„ๆœฌ๏ผŒ่ซ‹ๅ‚ณ้€ 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 ๅทฅไฝœ็š„ๅฐˆๆกˆ ID 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 ไบ‹ไปถๆ”ถ้›†ๅ™จๆฌŠๆ–
  • URL๏ผšSplunk HTTP ไบ‹ไปถๆ”ถ้›†ๅ™จ็š„็ถฒๅ€่ทฏๅพ‘ (ไพ‹ๅฆ‚ https://splunk-hec-host:8088)
  • DEADLETTER_TOPIC_NAME๏ผšPub/Sub ไธป้กŒๅ็จฑ
  • JAVASCRIPT_FUNCTION๏ผš ๆ‚จ่ฆไฝฟ็”จ็š„ JavaScript ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ (UDF) ๅ็จฑ

    ่ˆ‰ไพ‹ไพ†่ชช๏ผŒๅฆ‚ๆžœๆ‚จ็š„ JavaScript ๅ‡ฝๅผ็จ‹ๅผ็ขผๆ˜ฏ myTransform(inJson) { /*...do stuff...*/ }๏ผŒๅ‰‡ๅ‡ฝๅผๅ็จฑๅฐฑๆ˜ฏ myTransformใ€‚ๅฆ‚้œ€ JavaScript UDF ็ฏ„ไพ‹๏ผŒ่ซ‹ๅƒ้–ฑใ€ŒUDF ็ฏ„ไพ‹ใ€ใ€‚

  • PATH_TO_JAVASCRIPT_UDF_FILE๏ผš ๅฎš็พฉ่ฆไฝฟ็”จ็š„ JavaScript ไฝฟ็”จ่€…ๅฎš็พฉๅ‡ฝๅผ (UDF) ็š„ .js ๆช”ๆกˆ Cloud Storage URI๏ผŒไพ‹ๅฆ‚ gs://my-bucket/my-udfs/my_file.js
  • BATCH_COUNT๏ผšๅฐ‡ๅคšๅ€‹ไบ‹ไปถๅ‚ณ้€่‡ณ Splunk ๆ™‚ไฝฟ็”จ็š„ๆ‰นๆฌกๅคงๅฐ
  • PARALLELISM๏ผš็”จๆ–ผๅฐ‡ไบ‹ไปถๅ‚ณ้€่‡ณ Splunk ็š„ๅนณ่กŒ่ฆๆฑ‚ๆ•ธ้‡
  • DISABLE_VALIDATION๏ผštrue ๅฆ‚ๆžœ่ฆๅœ็”จ SSL ๆ†‘่ญ‰้ฉ—่ญ‰
  • ROOT_CA_CERTIFICATE_PATH๏ผšCloud Storage ไธญๆ น CA ๆ†‘่ญ‰็š„่ทฏๅพ‘ (ไพ‹ๅฆ‚ gs://your-bucket/privateCA.crt)

ๅพŒ็บŒๆญฅ้ฉŸ