Pub/Sub to Datadog テンプレート

Pub/Sub to Datadog テンプレートは、Pub/Sub サブスクリプションからメッセージを読み取り、Datadog エンドポイントを使用してメッセージ ペイロードを Datadog に書き込むストリーミング パイプラインです。このテンプレートの最も一般的なユースケースは Datalog へのログファイルのエクスポートです。

Datadog に書き込む前に、JavaScript ユーザー定義関数をメッセージ ペイロードに適用できます。処理が失敗したメッセージは、トラブルシューティングと再処理のために Pub/Sub の未処理のトピックに転送されます。

API キーと Secret の保護を強化するために、Base64 エンコードされた API キーパラメータを Cloud KMS 鍵で暗号化して、この Cloud KMS 鍵とともに渡すこともできます。API キーパラメータの暗号化の詳細については、Cloud KMS API 暗号化エンドポイントをご覧ください。

パイプラインの要件

  • パイプラインの実行前にソース Pub/Sub サブスクリプションが存在している必要があります。
  • パイプラインを実行する前に、Pub/Sub に未処理のトピックが存在している必要があります。
  • Dataflow ワーカーのネットワークから Datadog URL にアクセスできる必要があります。
  • Datadog API キーが生成され、使用可能な状態である必要があります。

テンプレートのパラメータ

必須パラメータ

  • inputSubscription: 入力の読み取り元になる Pub/Sub サブスクリプション(例: projects/your-project-id/subscriptions/your-subscription-name)。
  • url: Datadog Logs API の URL。この URL は、パイプラインが動作する VPC からルーティング可能である必要があります。詳細については、Datadog ドキュメントの「Send logs」(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 キー。apiKeySourcePLAINTEXT または KMS に設定されている場合、この値を指定する必要があります。詳細については、Datadog ドキュメントの「API キーとアプリケーション キー」(https://docs.datadoghq.com/account_management/api-app-keys/)をご覧ください。
  • batchCount: 複数のイベントを Datadog に送信するためのバッチサイズ。デフォルトは 1(バッチ処理なし)です。
  • parallelism: 並行リクエストの最大数。デフォルトは 1(並列処理なし)です。
  • includePubsubMessage: ペイロードに完全な Pub/Sub メッセージを含めるかどうかを指定するフラグ。デフォルトは true(データ要素を含むすべての要素をペイロードに含める)です。
  • apiKeyKMSEncryptionKey: API キーの復号に使用する Cloud KMS 鍵。apiKeySourceKMS に設定されている場合は、このパラメータを指定する必要があります。Cloud KMS 鍵を指定する場合は、暗号化された API キーを渡す必要があります(例: projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name)。
  • apiKeySecretId: API キーの Secret Manager シークレット ID。apiKeySourceSECRET_MANAGER に設定されている場合は、このパラメータを指定する必要があります(例: projects/your-project-id/secrets/your-secret/versions/your-secret-version)。
  • apiKeySource: API キーのソース。サポートされている値は、PLAINTEXTKMSSECRET_MANAGER です。Secret Manager を使用している場合は、このパラメータを指定する必要があります。apiKeySourceKMS に設定されている場合は、apiKeyKMSEncryptionKey と暗号化された API Key も指定する必要があります。apiKeySourceSECRET_MANAGER に設定されている場合は、apiKeySecretId も指定する必要があります。apiKeySourcePLAINTEXT に設定されている場合は、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 の仕様は次のとおりです。

  • 入力: JSON 文字列としてシリアル化された Pub/Sub メッセージ データ フィールド。
  • 出力: Datadog Log エンドポイントに送信されるイベントデータ。出力は、文字列または文字列化された JSON オブジェクトである必要があります。

テンプレートを実行する

コンソール

  1. Dataflow の [テンプレートからジョブを作成] ページに移動します。
  2. [テンプレートからジョブを作成] に移動
  3. [ジョブ名] フィールドに、固有のジョブ名を入力します。
  4. (省略可)[リージョン エンドポイント] で、プルダウン メニューから値を選択します。デフォルトのリージョンは us-central1 です。

    Dataflow ジョブを実行できるリージョンのリストについては、Dataflow のロケーションをご覧ください。

  5. [Dataflow テンプレート] プルダウン メニューから、[ the Pub/Sub to Datadog template] を選択します。
  6. 表示されたパラメータ フィールドに、パラメータ値を入力します。
  7. [ジョブを実行] をクリックします。

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: 使用するテンプレートのバージョン

    使用できる値は次のとおりです。

    • 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 サブスクリプション名
  • API_KEY: Datadog の API キー
  • URL: Datadog のエンドポイントの URL(例: 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 ジョブを実行する Google Cloud プロジェクトの ID
  • 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 サブスクリプション名
  • API_KEY: Datadog の API キー
  • URL: Datadog のエンドポイントの URL(例: 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 にイベントを送信するために使用する並列リクエストの数

次のステップ