Plantilla de Pub/Sub a Splunk

La plantilla de Pub/Sub a Splunk es una canalización de streaming que lee mensajes de una suscripción de Pub/Sub y escribe la carga útil de los mensajes en Splunk mediante la función Http Event Collector (HEC) de dicha plataforma. El caso práctico más habitual de esta plantilla es exportar registros a Splunk. Para ver un ejemplo del flujo de trabajo subyacente, consulta el artículo sobre cómo desplegar exportaciones de registros listas para producción en Splunk mediante Dataflow.

Antes de escribir en Splunk, también 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 tu token HEC, también puedes incluir una clave de Cloud KMS junto con el parámetro del token HEC codificado en base64 y cifrado con la clave de Cloud KMS. Consulta más información sobre cómo cifrar el parámetro de token de HEC en 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 al punto de conexión de Splunk HEC desde la red de los trabajadores de Dataflow.
  • Se debe haber generado y suministrado el token de Splunk HEC.

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 HEC de Splunk. La URL debe poder enrutarse desde la VPC en la que se ejecuta la canalización. Por ejemplo, https://splunk-hec-host:8088.
  • 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

  • token: el token de autenticación de HEC de Splunk. Debe proporcionarse si el parámetro tokenSource se define como PLAINTEXT o KMS.
  • batchCount tamaño del lote para enviar varios eventos a Splunk. El valor predeterminado es 1 (sin procesamiento por lotes).
  • disableCertificateValidation inhabilita la validación de certificados SSL. Valor predeterminado false (validación habilitada). Si true, los certificados no se validan (todos los certificados son de confianza) y se ignora el parámetro rootCaCertificatePath.
  • Paralelismo: número máximo de solicitudes paralelas. El valor predeterminado es 1 (sin paralelismo).
  • includePubsubMessage incluye el mensaje completo de Pub/Sub en la carga útil. Predeterminado false (solo se incluye el elemento de datos en la carga útil).
  • tokenKMSEncryptionKey la clave de Cloud KMS que se va a usar para descifrar la cadena del token de HEC. Este parámetro debe proporcionarse cuando tokenSource se defina como KMS. Si se proporciona la clave de Cloud KMS, la cadena del token de HEC debe enviarse cifrada. Por ejemplo, projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name.
  • tokenSecretId: ID de secreto de Secret Manager del token. Este parámetro debe proporcionarse cuando tokenSource tenga el valor SECRET_MANAGER. Por ejemplo, projects/your-project-id/secrets/your-secret/versions/your-secret-version.
  • tokenSource la fuente del token. Se permiten los siguientes valores: PLAINTEXT, KMS y SECRET_MANAGER. Debe proporcionar este parámetro cuando se utilice Secret Manager. Si tokenSource se define como KMS, tokenKMSEncryptionKey y cifrado, se debe proporcionar token. Si tokenSource se define como SECRET_MANAGER, se debe proporcionar tokenSecretId. Si tokenSource se define como PLAINTEXT, se debe proporcionar token.
  • rootCaCertificatePath: URL completa del certificado de AC raíz en Cloud Storage. El certificado proporcionado en Cloud Storage debe estar codificado en DER y se puede proporcionar en formato binario o imprimible (Base64). Si el certificado se proporciona en codificación Base64, debe estar delimitado al principio por -----BEGIN CERTIFICATE----- y al final por -----END CERTIFICATE-----. Si se proporciona este parámetro, se obtiene este archivo de certificado de CA privada y se añade al almacén de confianza del trabajador de Dataflow para verificar el certificado SSL del endpoint HEC de Splunk. Si no se proporciona este parámetro, se usará el almacén de confianza predeterminado. Por ejemplo, gs://mybucket/mycerts/privateCA.crt.
  • enableBatchLogs especifica si se deben habilitar los registros de los lotes escritos en Splunk. Valor predeterminado: true.
  • enableGzipHttpCompression especifica si las solicitudes HTTP enviadas a Splunk HEC deben comprimirse (contenido codificado en gzip). Valor predeterminado: true.
  • 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 de eventos de Splunk HEC. 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 Splunk template.
  6. En los campos de parámetros proporcionados, introduzca los valores de los parámetros.
  7. Opcional: Para cambiar del procesamiento una sola vez al modo de streaming al menos una vez, selecciona Al menos una vez.
  8. 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_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

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
  • TOKEN: token de Splunk Http Event Collector
  • URL: la ruta de la URL del recopilador de eventos HTTP de Splunk (por ejemplo, https://splunk-hec-host:8088)
  • 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 Splunk.
  • PARALLELISM: número de solicitudes paralelas que se usarán para enviar eventos a Splunk.
  • DISABLE_VALIDATION: true si quieres inhabilitar la validación de certificados SSL
  • ROOT_CA_CERTIFICATE_PATH: la ruta al certificado de CA raíz en Cloud Storage (por ejemplo, gs://your-bucket/privateCA.crt)

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_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"
   }
}

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
  • TOKEN: token de Splunk Http Event Collector
  • URL: la ruta de la URL del recopilador de eventos HTTP de Splunk (por ejemplo, https://splunk-hec-host:8088)
  • 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 Splunk.
  • PARALLELISM: número de solicitudes paralelas que se usarán para enviar eventos a Splunk.
  • DISABLE_VALIDATION: true si quieres inhabilitar la validación de certificados SSL
  • ROOT_CA_CERTIFICATE_PATH: la ruta al certificado de CA raíz en Cloud Storage (por ejemplo, gs://your-bucket/privateCA.crt)

Siguientes pasos