Pub/Sub 到 Datadog 範本

「Pub/Sub 到 Datadog 範本」是一種串流管道,可讀取 Pub/Sub 訂閱的訊息,並使用 Datadog 端點將訊息酬載寫入 Datadog。這個範本最常見的用途是將記錄檔匯出至 Datadog。

您可以在寫入 Datadog 前,將 JavaScript 使用者定義函式套用至訊息酬載。系統會將發生處理問題的所有訊息轉送至未處理的 Pub/Sub 主題,以便進一步執行疑難排解和重新處理。

為了增加多一層安全防護,您也可以傳遞 Cloud KMS 金鑰,以及使用 Cloud KMS 金鑰加密的 base64 編碼 API 金鑰參數。如要進一步瞭解如何加密 API 金鑰參數,請參閱 Cloud KMS API 加密端點

管道相關規定

  • 執行管道之前,來源 Pub/Sub 訂閱項目必須已經存在。
  • 執行管道之前,Pub/Sub 未處理主題必須已經存在。
  • Dataflow 工作站的網路必須能存取 Datadog 網址。
  • 必須產生並提供 Datadog API 金鑰。

範本參數

必要參數

  • inputSubscription:要讀取輸入內容的 Pub/Sub 訂閱項目。例如:projects/your-project-id/subscriptions/your-subscription-name
  • url:Datadog Logs API 網址。這個網址必須可從管道執行的 VPC 路由。詳情請參閱 Datadog 說明文件中的「傳送記錄」(https://docs.datadoghq.com/api/latest/logs/#send-logs)。例如:https://http-intake.logs.datadoghq.com
  • outputDeadletterTopic:要將無法傳送的訊息轉送至的 Pub/Sub 主題。例如:projects/<PROJECT_ID>/topics/<TOPIC_NAME>

選用參數

  • apiKey:Datadog API 金鑰。如果 apiKeySource 設為 PLAINTEXTKMS,則必須提供這個值。詳情請參閱 Datadog 說明文件中的「API and Application Keys」(API 和應用程式金鑰) (https://docs.datadoghq.com/account_management/api-app-keys/)。
  • batchCount:將多個事件傳送至 Datadog 的批次大小。預設值為 1 (不批次處理)。
  • 平行處理量:平行要求數量上限。預設值為 1 (無平行處理)。
  • includePubsubMessage:是否要在酬載中加入完整的 Pub/Sub 訊息。預設值為 true (酬載中包含所有元素,包括資料元素)。
  • apiKeyKMSEncryptionKey:用於解密 API 金鑰的 Cloud KMS 金鑰。如果 apiKeySource 設為 KMS,就必須提供這項參數。如果提供 Cloud KMS 金鑰,則必須傳入加密的 API 金鑰。例如:projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name
  • apiKeySecretId:API 金鑰的 Secret Manager 密鑰 ID。如果 apiKeySource 設為 SECRET_MANAGER,就必須提供這項參數。例如:projects/your-project-id/secrets/your-secret/versions/your-secret-version
  • apiKeySource:API 金鑰的來源。支援的值包括:PLAINTEXTKMSSECRET_MANAGER。如果您使用 Secret Manager,就必須提供這個參數。如果 apiKeySource 設為 KMS,則必須一併提供 apiKeyKMSEncryptionKey 和加密的 API Key。如果 apiKeySource 設為 SECRET_MANAGER,則必須一併提供 apiKeySecretId。如果 apiKeySource 設為 PLAINTEXT,則必須一併提供 apiKey
  • 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 字串。
  • 輸出:要傳送至 Datadog Log 端點的事件資料。輸出內容必須是字串或字串化的 JSON 物件。

執行範本

控制台

  1. 前往 Dataflow 的「Create job from template」(透過範本建立工作) 頁面。
  2. 前往「依據範本建立工作」
  3. 在「工作名稱」欄位中,輸入專屬工作名稱。
  4. 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為 us-central1

    如需可執行 Dataflow 工作的地區清單,請參閱「Dataflow 位置」。

  5. 從「Dataflow template」(Dataflow 範本) 下拉式選單中選取 the Pub/Sub to Datadog template。
  6. 在提供的參數欄位中輸入參數值。
  7. 按一下「Run Job」(執行工作)

gcloud

在殼層或終端機中執行範本:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/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: 您要使用的範本版本

    您可以使用下列值:

  • STAGING_LOCATION:用於暫存本機檔案的位置 (例如 gs://your-bucket/staging)
  • INPUT_SUBSCRIPTION_NAME:Pub/Sub 訂閱項目名稱
  • API_KEY:Datadog 的 API 金鑰
  • URL:Datadog 端點的網址 (例如 https://http-intake.logs.datadoghq.com)
  • 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:將多個事件傳送至 Datadog 時使用的批次大小
  • PARALLELISM:用於將事件傳送至 Datadog 的並行要求數量

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_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: 您要執行 Dataflow 工作的專案 ID Google Cloud
  • JOB_NAME: 您選擇的不重複工作名稱
  • LOCATION: 您要部署 Dataflow 工作的地區,例如 us-central1
  • VERSION: 您要使用的範本版本

    您可以使用下列值:

  • STAGING_LOCATION:用於暫存本機檔案的位置 (例如 gs://your-bucket/staging)
  • INPUT_SUBSCRIPTION_NAME:Pub/Sub 訂閱項目名稱
  • API_KEY:Datadog 的 API 金鑰
  • URL:Datadog 端點的網址 (例如 https://http-intake.logs.datadoghq.com)
  • 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:將多個事件傳送至 Datadog 時使用的批次大小
  • PARALLELISM:用於將事件傳送至 Datadog 的並行要求數量

後續步驟