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/<project-id>/subscriptions/<subscription-name>
url Datadog Logs API の URL。この URL は、パイプラインが動作する VPC からルーティング可能である必要があります。例: https://http-intake.logs.datadoghq.com詳細については、Datadog のドキュメントのログを送信するをご覧ください。
apiKeySource API キーのソース。サポートされている値は、PLAINTEXTKMSSECRET_MANAGER です。Secret Manager を使用している場合は、このパラメータを指定する必要があります。apiKeySourceKMS に設定されている場合は、apiKeyKMSEncryptionKey と暗号化された API Key も指定する必要があります。apiKeySourceSECRET_MANAGER に設定されている場合は、apiKeySecretId も指定する必要があります。apiKeySourcePLAINTEXT に設定されている場合は、apiKey も指定する必要があります。
apiKeyKMSEncryptionKey 省略可: API キーを復号するための Cloud KMS 鍵。apiKeySourceKMS に設定されている場合は、このパラメータを指定する必要があります。Cloud KMS 鍵を指定する場合は、暗号化された API キーで渡す必要があります。
apiKey 省略可: Datadog API キー。apiKeySourcePLAINTEXT または KMS に設定されている場合、この値を指定する必要があります。詳細については、Datadog ドキュメントの API とアプリケーション キーをご覧ください。
apiKeySecretId 省略可: API キーの Secret Manager シークレット ID。apiKeySourceSECRET_MANAGER に設定されている場合は、このパラメータを指定する必要があります。projects/<project-id>/secrets/<secret-name>/versions/<secret-version> の形式を使用してください
outputDeadletterTopic 配信不能メッセージを転送するための Pub/Sub トピック。例: projects/<project-id>/topics/<topic-name>
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 の例をご覧ください。
javascriptTextTransformReloadIntervalMinutes 省略可: UDF を再読み込みする頻度を分単位で指定します。値が 0 より大きい場合、Dataflow は Cloud Storage 内の UDF ファイルを定期的にチェックし、ファイルが変更された場合は UDF を再読み込みします。このパラメータを使用すると、パイプラインの実行中にジョブを再起動することなく、UDF を更新できます。値が 0 の場合、UDF の再読み込みは無効になります。デフォルト値は 0 です。
batchCount 省略可: 複数のイベントを Datadog に送信するためのバッチサイズ。デフォルトは 1(バッチ処理なし)です。
parallelism 省略可: 並行リクエストの最大数。デフォルトは 1(並列処理なし)です。
includePubsubMessage 省略可: 完全な Pub/Sub メッセージをペイロードに含めます。デフォルトは false です(データ要素のみがペイロードに含まれます)。

ユーザー定義関数

必要であれば、ユーザー定義関数(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 にイベントを送信するために使用する並列リクエストの数

次のステップ