Plantilla de Pub/Sub a Datadog

La plantilla de Pub/Sub a Datadog es un flujo de procesamiento en streaming que lee mensajes de una suscripción de Pub/Sub y escribe la carga útil de los mensajes en Datadog mediante un endpoint de Datadog. El caso práctico más habitual de esta plantilla es exportar archivos de registro a Datadog.

Antes de escribir en Datadog, puedes aplicar una función definida por el usuario de JavaScript a la carga útil del mensaje. Si surge algún problema a la hora de procesar un mensaje, se enviará ese mensaje a un tema de mensajes no procesados de Pub/Sub para ponerle solución y volver a procesar el mensaje.

Para añadir una capa de protección adicional a tus claves de API y secretos, también puedes incluir una clave de Cloud KMS junto con el parámetro de clave de API codificado en base64 y encriptado con la clave de Cloud KMS. Para obtener más información sobre cómo cifrar el parámetro de clave de API, consulta el endpoint de cifrado de la API Cloud KMS.

Requisitos del flujo de procesamiento

  • La suscripción de origen de Pub/Sub debe existir antes de ejecutar el flujo de procesamiento.
  • El tema de Pub/Sub sin procesar debe existir antes de ejecutar el flujo de procesamiento.
  • Se debe poder acceder a la URL de Datadog desde la red de los trabajadores de Dataflow.
  • Se debe haber generado y suministrado la clave de API de Datadog.

Parámetros de plantilla

Parámetros obligatorios

  • inputSubscription la suscripción de Pub/Sub de la que se leerán los datos de entrada. Por ejemplo, projects/your-project-id/subscriptions/your-subscription-name.
  • url: la URL de la API Logs de Datadog. Se debe poder enrutar esta URL desde la VPC en la que se ejecuta la canalización. Consulta el artículo sobre cómo enviar registros (https://docs.datadoghq.com/api/latest/logs/#send-logs) en la documentación de Datadog para obtener más información. Por ejemplo, https://http-intake.logs.datadoghq.com.
  • outputDeadletterTopic el tema de Pub/Sub al que se reenviarán los mensajes que no se puedan entregar. Por ejemplo, projects/<PROJECT_ID>/topics/<TOPIC_NAME>.

Parámetros opcionales

  • apiKey la clave de API de Datadog. Debes proporcionar este valor si apiKeySource tiene el valor PLAINTEXT o KMS. Para obtener más información, consulta el artículo sobre claves de API y de aplicación (https://docs.datadoghq.com/account_management/api-app-keys/) en la documentación de Datadog.
  • batchCount tamaño del lote para enviar varios eventos a Datadog. El valor predeterminado es 100.
  • Paralelismo: número máximo de solicitudes paralelas. El valor predeterminado es 1 (sin paralelismo).
  • includePubsubMessage indica si se debe incluir el mensaje completo de Pub/Sub en la carga útil. El valor predeterminado es true (todos los elementos, incluido el elemento de datos, se incluyen en la carga útil).
  • apiKeyKMSEncryptionKey la clave de Cloud KMS que se va a usar para descifrar la clave de API. Debe proporcionar este parámetro si apiKeySource tiene el valor KMS. Si se proporciona la clave de Cloud KMS, debes introducir una clave de API cifrada. Por ejemplo, projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name.
  • apiKeySecretId: ID de secreto de Secret Manager de la clave de API. Debe proporcionar este parámetro si apiKeySource tiene el valor SECRET_MANAGER. Por ejemplo, projects/your-project-id/secrets/your-secret/versions/your-secret-version.
  • apiKeySource la fuente de la clave de API. Se admiten los siguientes valores: PLAINTEXT, KMS y SECRET_MANAGER. Debe proporcionar este parámetro si usa Secret Manager. Si apiKeySource se define como KMS, también debes proporcionar apiKeyKMSEncryptionKey y API Key cifrado. Si apiKeySource tiene el valor SECRET_MANAGER, también debes proporcionar apiKeySecretId. Si apiKeySource tiene el valor PLAINTEXT, también debes proporcionar apiKey.
  • javascriptTextTransformGcsPath el URI de Cloud Storage del archivo .js que define la función de JavaScript definida por el usuario (UDF) que se va a usar. Por ejemplo, gs://my-bucket/my-udfs/my_file.js.
  • javascriptTextTransformFunctionName nombre de la función definida por el usuario (UDF) de JavaScript que se va a usar. Por ejemplo, si el código de la función de JavaScript es myTransform(inJson) { /*...do stuff...*/ }, el nombre de la función es myTransform. Para ver ejemplos de UDFs de JavaScript, consulta Ejemplos de UDFs (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples).
  • javascriptTextTransformReloadIntervalMinutes define el intervalo en el que los workers pueden comprobar si hay cambios en las UDFs de JavaScript para volver a cargar los archivos. El valor predeterminado es 0.

Función definida por el usuario

También puedes ampliar esta plantilla escribiendo una función definida por el usuario (UDF). La plantilla llama a la función definida por el usuario para cada elemento de entrada. Las cargas útiles de los elementos se serializan como cadenas JSON. Para obtener más información, consulta el artículo sobre cómo crear funciones definidas por el usuario para plantillas de Dataflow.

Especificación de la función

La función definida por el usuario tiene las siguientes especificaciones:

  • Entrada: el campo de datos del mensaje de Pub/Sub, serializado como una cadena JSON.
  • Salida: los datos de evento que se enviarán al endpoint Log de Datadog. La salida debe ser una cadena o un objeto JSON de tipo string.

Ejecutar la plantilla

Consola

  1. Ve a la página Crear tarea a partir de plantilla de Dataflow.
  2. Ir a Crear tarea a partir de plantilla
  3. En el campo Nombre de la tarea, introduce un nombre único.
  4. Opcional: En Endpoint regional, seleccione un valor en el menú desplegable. La región predeterminada es us-central1.

    Para ver una lista de las regiones en las que puedes ejecutar una tarea de Dataflow, consulta Ubicaciones de Dataflow.

  5. En el menú desplegable Plantilla de flujo de datos, seleccione the Pub/Sub to Datadog template.
  6. En los campos de parámetros proporcionados, introduzca los valores de los parámetros.
  7. Haz clic en Ejecutar trabajo.

gcloud

En tu shell o terminal, ejecuta la plantilla:

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

Haz los cambios siguientes:

  • JOB_NAME: un nombre de trabajo único que elijas
  • REGION_NAME: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • STAGING_LOCATION: la ubicación de los archivos locales de almacenamiento provisional (por ejemplo, gs://your-bucket/staging)
  • INPUT_SUBSCRIPTION_NAME: el nombre de la suscripción de Pub/Sub
  • API_KEY: clave de API de Datadog
  • URL: la URL del endpoint de Datadog (por ejemplo, https://http-intake.logs.datadoghq.com)
  • DEADLETTER_TOPIC_NAME: el nombre del tema de Pub/Sub
  • JAVASCRIPT_FUNCTION: el nombre de la función definida por el usuario (FDU) de JavaScript que quieras usar

    Por ejemplo, si el código de tu función de JavaScript es myTransform(inJson) { /*...do stuff...*/ }, el nombre de la función es myTransform. Para ver ejemplos de UDFs de JavaScript, consulta Ejemplos de UDFs.

  • PATH_TO_JAVASCRIPT_UDF_FILE: el URI de Cloud Storage del archivo .js que define la función de JavaScript definida por el usuario (UDF) que quieres usar. Por ejemplo, gs://my-bucket/my-udfs/my_file.js
  • BATCH_COUNT: el tamaño del lote que se usará para enviar varios eventos a Datadog.
  • PARALLELISM: número de solicitudes paralelas que se usarán para enviar eventos a Datadog.

API

Para ejecutar la plantilla mediante la API REST, envía una solicitud HTTP POST. Para obtener más información sobre la API y sus ámbitos de autorización, consulta 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"
   }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto Google Cloud en el que quieres ejecutar la tarea de Dataflow
  • JOB_NAME: un nombre de trabajo único que elijas
  • LOCATION: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • STAGING_LOCATION: la ubicación de los archivos locales de almacenamiento provisional (por ejemplo, gs://your-bucket/staging)
  • INPUT_SUBSCRIPTION_NAME: el nombre de la suscripción de Pub/Sub
  • API_KEY: clave de API de Datadog
  • URL: la URL del endpoint de Datadog (por ejemplo, https://http-intake.logs.datadoghq.com)
  • DEADLETTER_TOPIC_NAME: el nombre del tema de Pub/Sub
  • JAVASCRIPT_FUNCTION: el nombre de la función definida por el usuario (FDU) de JavaScript que quieras usar

    Por ejemplo, si el código de tu función de JavaScript es myTransform(inJson) { /*...do stuff...*/ }, el nombre de la función es myTransform. Para ver ejemplos de UDFs de JavaScript, consulta Ejemplos de UDFs.

  • PATH_TO_JAVASCRIPT_UDF_FILE: el URI de Cloud Storage del archivo .js que define la función de JavaScript definida por el usuario (UDF) que quieres usar. Por ejemplo, gs://my-bucket/my-udfs/my_file.js
  • BATCH_COUNT: el tamaño del lote que se usará para enviar varios eventos a Datadog.
  • PARALLELISM: número de solicitudes paralelas que se usarán para enviar eventos a Datadog.

Siguientes pasos