O modelo Pub/Sub para Datadog é um pipeline de streaming que lê mensagens de uma subscrição do Pub/Sub e escreve o payload da mensagem no Datadog através de um ponto final do Datadog. O exemplo de utilização mais comum para este modelo é exportar ficheiros de registo para o Datadog.
Antes de escrever no Datadog, pode aplicar uma função definida pelo utilizador em JavaScript ao payload da mensagem. Todas as mensagens que apresentem falhas de processamento são encaminhadas para um tópico não processado do Pub/Sub para resolução de problemas e reprocessamento adicionais.
Como camada adicional de proteção para as suas chaves e segredos da API, também pode transmitir uma chave do Cloud KMS juntamente com o parâmetro da chave da API encriptado com a chave do Cloud KMS codificado em base64. Para ver detalhes adicionais sobre a encriptação do parâmetro da chave da API, consulte o ponto final de encriptação da API Cloud KMS.
Requisitos do pipeline
- A subscrição do Pub/Sub de origem tem de existir antes de executar o pipeline.
- O tópico não processado do Pub/Sub tem de existir antes de executar o pipeline.
- O URL do Datadog tem de estar acessível a partir da rede dos trabalhadores do Dataflow.
- A chave da API Datadog tem de ser gerada e estar disponível.
Parâmetros de modelos
Parâmetros obrigatórios
- inputSubscription: a subscrição do Pub/Sub a partir da qual ler a entrada. Por exemplo,
projects/your-project-id/subscriptions/your-subscription-name. - url: o URL da API Datadog Logs. Este URL tem de ser encaminhável a partir da VPC na qual a pipeline é executada. Consulte Enviar registos (https://docs.datadoghq.com/api/latest/logs/#send-logs) na documentação do Datadog para mais informações. Por exemplo,
https://http-intake.logs.datadoghq.com. - outputDeadletterTopic: o tópico do Pub/Sub para o qual encaminhar mensagens não entregues. Por exemplo,
projects/<PROJECT_ID>/topics/<TOPIC_NAME>.
Parâmetros opcionais
- apiKey: a chave da API do Datadog. Tem de fornecer este valor se o
apiKeySourceestiver definido comoPLAINTEXTouKMS. Para mais informações, consulte o artigo Chaves da API e da aplicação (https://docs.datadoghq.com/account_management/api-app-keys/) na documentação do Datadog. - batchCount: o tamanho do lote para enviar vários eventos para o Datadog. A predefinição é
100. - parallelism: o número máximo de pedidos paralelos. A predefinição é
1(sem paralelismo). - includePubsubMessage: se deve incluir a mensagem completa do Pub/Sub na carga útil. A predefinição é
true(todos os elementos, incluindo o elemento de dados, estão incluídos no payload). - apiKeyKMSEncryptionKey: a chave do Cloud KMS a usar para desencriptar a chave da API. Tem de fornecer este parâmetro se o
apiKeySourceestiver definido comoKMS. Se a chave do Cloud KMS for fornecida, tem de transmitir uma chave de API encriptada. Por exemplo,projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name. - apiKeySecretId: o ID do segredo do Secret Manager para a chave da API. Tem de fornecer este parâmetro se o
apiKeySourceestiver definido comoSECRET_MANAGER. Por exemplo,projects/your-project-id/secrets/your-secret/versions/your-secret-version. - apiKeySource: a origem da chave da API. Os seguintes valores são suportados:
PLAINTEXT,KMSeSECRET_MANAGER. Tem de indicar este parâmetro se estiver a usar o Secret Manager. SeapiKeySourceestiver definido comoKMS, também tem de fornecerapiKeyKMSEncryptionKeyeAPI Keyencriptado. SeapiKeySourceestiver definido comoSECRET_MANAGER, também tem de fornecerapiKeySecretId. SeapiKeySourceestiver definido comoPLAINTEXT, também tem de fornecerapiKey. - javascriptTextTransformGcsPath: o URI do Cloud Storage do ficheiro .js que define a função definida pelo utilizador (FDU) JavaScript a usar. Por exemplo,
gs://my-bucket/my-udfs/my_file.js. - javascriptTextTransformFunctionName: o nome da função definida pelo utilizador (FDU) de JavaScript a usar. Por exemplo, se o código da função JavaScript for
myTransform(inJson) { /*...do stuff...*/ }, o nome da função émyTransform. Para ver exemplos de UDFs JavaScript, consulte Exemplos de UDFs (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples). - javascriptTextTransformReloadIntervalMinutes: define o intervalo que os trabalhadores podem verificar quanto a alterações nas FDUs JavaScript para recarregar os ficheiros. A predefinição é: 0.
Função definida pelo utilizador
Opcionalmente, pode estender este modelo escrevendo uma função definida pelo utilizador (FDU). O modelo chama a FDU para cada elemento de entrada. Os payloads dos elementos são serializados como strings JSON. Para mais informações, consulte o artigo Crie funções definidas pelo utilizador para modelos do Dataflow.
Especificação da função
A FDU tem a seguinte especificação:
- Entrada: o campo de dados da mensagem do Pub/Sub, serializado como uma string JSON.
- Output: os dados de eventos a enviar para o ponto final do Datadog Log. A saída tem de ser uma string ou um objeto JSON em forma de string.
Execute o modelo
Consola
- Aceda à página Dataflow Criar tarefa a partir de um modelo. Aceda a Criar tarefa a partir de modelo
- No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
- Opcional: para Ponto final regional, selecione um valor no menu pendente. A região
predefinida é
us-central1.Para ver uma lista das regiões onde pode executar uma tarefa do Dataflow, consulte o artigo Localizações do Dataflow.
- No menu pendente Modelo do fluxo de dados, selecione the Pub/Sub to Datadog template.
- Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
- Clique em Executar tarefa.
gcloud
Na shell ou no terminal, execute o modelo:
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
Substitua o seguinte:
JOB_NAME: um nome de tarefa exclusivo à sua escolhaREGION_NAME: a região onde quer implementar a tarefa do Dataflow, por exemplo,us-central1VERSION: a versão do modelo que quer usarPode usar os seguintes valores:
latestpara usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00, para usar uma versão específica do modelo, que pode ser encontrada aninhada na pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
STAGING_LOCATION: a localização para organizar ficheiros locais (por exemplo,gs://your-bucket/staging)INPUT_SUBSCRIPTION_NAME: o nome da subscrição do Pub/SubAPI_KEY: chave da API da DatadogURL: o URL do ponto final do Datadog (por exemplo,https://http-intake.logs.datadoghq.com)DEADLETTER_TOPIC_NAME: o nome do tópico do Pub/SubJAVASCRIPT_FUNCTION: o nome da função definida pelo utilizador (FDU) JavaScript que quer usarPor exemplo, se o código da função JavaScript for
myTransform(inJson) { /*...do stuff...*/ }, o nome da função émyTransform. Para ver exemplos de UDFs JavaScript, consulte os exemplos de UDFs.PATH_TO_JAVASCRIPT_UDF_FILE: o URI do Cloud Storage do ficheiro.jsque define a função definida pelo utilizador (FDU) JavaScript que quer usar, por exemplo,gs://my-bucket/my-udfs/my_file.jsBATCH_COUNT: o tamanho do lote a usar para enviar vários eventos para o DatadogPARALLELISM: o número de pedidos paralelos a usar para enviar eventos para o Datadog
API
Para executar o modelo através da API REST, envie um pedido HTTP POST. Para mais informações sobre a API e os respetivos âmbitos de autorização, consulte 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" } }
Substitua o seguinte:
PROJECT_ID: o ID do projeto onde quer executar a tarefa do Dataflow Google CloudJOB_NAME: um nome de tarefa exclusivo à sua escolhaLOCATION: a região onde quer implementar a tarefa do Dataflow, por exemplo,us-central1VERSION: a versão do modelo que quer usarPode usar os seguintes valores:
latestpara usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00, para usar uma versão específica do modelo, que pode ser encontrada aninhada na pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
STAGING_LOCATION: a localização para organizar ficheiros locais (por exemplo,gs://your-bucket/staging)INPUT_SUBSCRIPTION_NAME: o nome da subscrição do Pub/SubAPI_KEY: chave da API da DatadogURL: o URL do ponto final do Datadog (por exemplo,https://http-intake.logs.datadoghq.com)DEADLETTER_TOPIC_NAME: o nome do tópico do Pub/SubJAVASCRIPT_FUNCTION: o nome da função definida pelo utilizador (FDU) JavaScript que quer usarPor exemplo, se o código da função JavaScript for
myTransform(inJson) { /*...do stuff...*/ }, o nome da função émyTransform. Para ver exemplos de UDFs JavaScript, consulte os exemplos de UDFs.PATH_TO_JAVASCRIPT_UDF_FILE: o URI do Cloud Storage do ficheiro.jsque define a função definida pelo utilizador (FDU) JavaScript que quer usar, por exemplo,gs://my-bucket/my-udfs/my_file.jsBATCH_COUNT: o tamanho do lote a usar para enviar vários eventos para o DatadogPARALLELISM: o número de pedidos paralelos a usar para enviar eventos para o Datadog
O que se segue?
- Saiba mais sobre os modelos do Dataflow.
- Consulte a lista de modelos fornecidos pela Google.