O modelo do Pub/Sub para Elasticsearch é um pipeline de streaming que lê mensagens de uma assinatura do Pub/Sub, executa uma função definida pelo usuário (UDF, na sigla em inglês) e as grava no Elasticsearch como documentos. O modelo do Dataflow usa o recurso de fluxos de dados do Elasticsearch para armazenar dados de série temporal em vários índices, oferecendo um único recurso nomeado para solicitações. Esses fluxos são adequados para registros, métricas, rastros e outros dados gerados continuamente armazenados no Pub/Sub.
O modelo cria um fluxo de dados chamado logs-gcp.DATASET-NAMESPACE
, em que:
- DATASET é o valor do parâmetro de modelo
dataset
, oupubsub
se não for especificado. - NAMESPACE é o valor do parâmetro de modelo
namespace
, oudefault
se não for especificado.
Requisitos de pipeline
- A assinatura do Pub/Sub de origem precisa existir e as mensagens precisam ser codificadas em um formato JSON válido.
- Um host Elasticsearch acessível publicamente em uma instância do Google Cloud ou no Elastic Cloud com o Elasticsearch versão 7.0 ou mais recente. Consulte Integração do Google Cloud para Elastic para mais detalhes.
- Um tópico do Pub/Sub para saída de erros.
Parâmetros do modelo
Parâmetros obrigatórios
- inputSubscription: assinatura do Pub/Sub da qual consumir a entrada. Por exemplo,
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>
. - errorOutputTopic: o tópico de saída do Pub/Sub para publicar registros com falha no formato
projects/<PROJECT_ID>/topics/<TOPIC_NAME>
. - connectionUrl: o URL do Elasticsearch no formato
https://hostname:[port]
. Se estiver usando o Elastic Cloud, especifique o CloudID. Por exemplo,https://elasticsearch-host:9200
. - apiKey: a chave de API codificada em Base64 que será usada para autenticação.
Parâmetros opcionais
- dataset: o tipo de registros enviados via Pub/Sub, para os quais temos um painel pronto para uso. Os valores de tipos de registro conhecidos são
audit
,vpcflow
efirewall
. O padrão épubsub
. - namespace: um agrupamento arbitrário, como um ambiente (dev, prod ou qa), uma equipe ou uma unidade de negócios estratégica. O padrão é
default
. - elasticsearchTemplateVersion: identificador da versão do modelo do Dataflow, geralmente definido pelo Google Cloud. Padrão: 1.0.0.
- javascriptTextTransformGcsPath: o URI do Cloud Storage do arquivo .js que define a função JavaScript definida pelo usuário (UDF) a ser usada. Por exemplo,
gs://my-bucket/my-udfs/my_file.js
. - javascriptTextTransformFunctionName: o nome da função definida pelo usuário (UDF) do JavaScript a ser usada. Por exemplo, se o código de função do JavaScript for
myTransform(inJson) { /*...do stuff...*/ }
, o nome da função serámyTransform
. Para ver exemplos de UDFs em JavaScript, consulte os exemplos de UDF (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples). - javascriptTextTransformReloadIntervalMinutes: especifica a frequência de recarregamento da UDF em minutos. Se o valor for maior que 0, o Dataflow vai verificar periodicamente o arquivo da UDF no Cloud Storage e vai atualizar a UDF se o arquivo for modificado. Com esse parâmetro, é possível atualizar a UDF enquanto o pipeline está em execução, sem precisar reiniciar o job. Se o valor for
0
, o recarregamento da UDF será desativado. O valor padrão é0
. - elasticsearchUsername: o nome de usuário do Elasticsearch usado para autenticação. Se especificado, o valor de
apiKey
será ignorado. - elasticsearchPassword: a senha do Elasticsearch para autenticação. Se especificado, o valor de
apiKey
será ignorado. - batchSize: o tamanho do lote em número de documentos. O padrão é
1000
. - batchSizeBytes: o tamanho do lote em número de bytes. O padrão é
5242880
(5 MB). - maxRetryAttempts: o número máximo de novas tentativas. Precisa ser maior que zero. O padrão é
no retries
. - maxRetryDuration: a duração máxima da nova tentativa em milissegundos. Precisa ser maior que zero. O padrão é
no retries
. - propertyAsIndex: uma propriedade no documento que está sendo indexada com um valor que especifica os metadados
_index
a serem incluídos com o documento em solicitações em massa. Tem precedência sobre uma UDF_index
. O padrão énone
. - javaScriptIndexFnGcsPath: o caminho do Cloud Storage para a origem da UDF em JavaScript de uma função que especifica os metadados
_index
a serem incluídos no documento em solicitações em massa. O padrão énone
. - javaScriptIndexFnName: o nome da função JavaScript da UDF que especifica os metadados
_index
a serem incluídos no documento em solicitações em massa. O padrão énone
. - propertyAsId: uma propriedade no documento que está sendo indexada com um valor que especifica metadados
_id
a serem incluídos com o documento em solicitações em massa. Tem precedência sobre uma UDF_id
. O padrão énone
. - javaScriptIdFnGcsPath: o caminho do Cloud Storage para a origem da UDF em JavaScript da função que especifica os metadados
_id
a serem incluídos no documento em solicitações em massa. O padrão énone
. - javaScriptIdFnName: o nome da função JavaScript da UDF que especifica os metadados
_id
a serem incluídos com o documento em solicitações em massa. O padrão énone
. - javaScriptTypeFnGcsPath: o caminho do Cloud Storage para a origem da UDF em JavaScript de uma função que especifica os metadados
_type
a serem incluídos com documentos em solicitações em massa. O padrão énone
. - javaScriptTypeFnName: o nome da função JavaScript da UDF que especifica os metadados
_type
a serem incluídos com o documento em solicitações em massa. O padrão énone
. - javaScriptIsDeleteFnGcsPath: o caminho do Cloud Storage para a origem da UDF em JavaScript da função que determina se o documento precisa ser excluído em vez de inserido ou atualizado. A função retorna um valor de string de
true
oufalse
. O padrão énone
. - javaScriptIsDeleteFnName: o nome da função JavaScript da UDF que determina se é necessário excluir o documento em vez de inserir ou atualizar. A função retorna um valor de string de
true
oufalse
. O padrão énone
. - usePartialUpdate: indica se as atualizações parciais vão ser usadas (atualizar em vez de criar ou indexar, permitindo documentos parciais) com solicitações Elasticsearch. O padrão é
false
. - bulkInsertMethod: indica se é necessário usar
INDEX
(índice, permite ajustes) ouCREATE
(criar, erros em _id duplicados) com solicitações em massa do Elasticsearch. O padrão éCREATE
. - trustSelfSignedCerts: se é possível ou não confiar em um certificado autoassinado. Uma instância do Elasticsearch instalada pode ter um certificado autoassinado. Ative essa opção como "True" para ignorar a validação no certificado SSL. O padrão é
false
. - disableCertificateValidation: se for
true
, confie no certificado SSL autoassinado. Uma instância do Elasticsearch pode ter um certificado autoassinado. Para ignorar a validação do certificado, defina esse parâmetro comotrue
. O padrão éfalse
. - apiKeyKMSEncryptionKey: a chave do Cloud KMS para descriptografar a chave de API. Este parâmetro será obrigatório se
apiKeySource
for definido comoKMS
. Se esse parâmetro for fornecido, transmita uma stringapiKey
criptografada. Criptografe parâmetros usando o endpoint de criptografia da API KMS. Para a chave, use o formatoprojects/<PROJECT_ID>/locations/<KEY_REGION>/keyRings/<KEY_RING>/cryptoKeys/<KMS_KEY_NAME>
. Consulte: https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt Por exemplo,projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name
. - apiKeySecretId: o ID do secret do Secret Manager para a chave de API. Se
apiKeySource
estiver definido comoSECRET_MANAGER
, forneça esse parâmetro. Use o formatoprojects/<PROJECT_ID>/secrets/<SECRET_ID>/versions/<SECRET_VERSION>. For example,
projects/your-project-id/secrets/your-secret/versions/your-secret-version`. - apiKeySource: a origem da chave de API. Os valores permitidos são
PLAINTEXT
,KMS
eSECRET_MANAGER
. Esse parâmetro é obrigatório quando você usa o Secret Manager ou o KMS. SeapiKeySource
estiver definido comoKMS
,apiKeyKMSEncryptionKey
e a chave apiKey criptografada precisar ser fornecida. SeapiKeySource
estiver definido comoSECRET_MANAGER
,apiKeySecretId
precisará ser fornecido. SeapiKeySource
estiver definido comoPLAINTEXT
,apiKey
precisará ser fornecido. O padrão é: PLAINTEXT. - socketTimeout: se definido, substitui o tempo limite máximo de novas tentativas e o tempo limite de soquete padrão (30000ms) no RestClient do Elastic.
Funções definidas pelo usuário
Esse modelo é compatível com funções definidas pelo usuário (UDFs) em vários pontos do pipeline, descritas abaixo. Para mais informações, consulte Criar funções definidas pelo usuário para modelos do Dataflow.
Função de transformação de texto
Transforma a mensagem do Pub/Sub em um documento do Elasticsearch.
Parâmetros do modelo:
javascriptTextTransformGcsPath
: o URI do Cloud Storage do arquivo JavaScript.javascriptTextTransformFunctionName
: o nome da função JavaScript.
Especificação da função:
- Entrada: o campo de dados da mensagem do Pub/Sub, serializado como uma string JSON.
- Saída: um documento JSON em formato de string para inserir no Elasticsearch.
Função de índice
Retorna o índice ao qual o documento pertence.
Parâmetros do modelo:
javaScriptIndexFnGcsPath
: o URI do Cloud Storage do arquivo JavaScript.javaScriptIndexFnName
: o nome da função JavaScript.
Especificação da função:
- Entrada: o documento do Elasticsearch, serializado como uma string JSON.
- Saída: o valor do campo de metadados
_index
do documento.
Função ID do documento
Retorna o ID do documento.
Parâmetros do modelo:
javaScriptIdFnGcsPath
: o URI do Cloud Storage do arquivo JavaScript.javaScriptIdFnName
: o nome da função JavaScript.
Especificação da função:
- Entrada: o documento do Elasticsearch, serializado como uma string JSON.
- Saída: o valor do campo de metadados
_id
do documento.
Função de exclusão de documentos
Especifica se um documento deve ser excluído. Para usar essa função, defina o modo de inserção em massa como INDEX
e forneça uma função de ID do documento.
Parâmetros do modelo:
javaScriptIsDeleteFnGcsPath
: o URI do Cloud Storage do arquivo JavaScript.javaScriptIsDeleteFnName
: o nome da função JavaScript.
Especificação da função:
- Entrada: o documento do Elasticsearch, serializado como uma string JSON.
- Saída: retorna a string
"true"
para excluir o documento ou"false"
para manter o documento.
Função do tipo de mapeamento
Retorna o tipo de mapeamento do documento.
Parâmetros do modelo:
javaScriptTypeFnGcsPath
: o URI do Cloud Storage do arquivo JavaScript.javaScriptTypeFnName
: o nome da função JavaScript.
Especificação da função:
- Entrada: o documento do Elasticsearch, serializado como uma string JSON.
- Saída: o valor do campo de metadados
_type
do documento.
Executar o modelo
Console
- Acesse a página Criar job usando um modelo do Dataflow. Acesse Criar job usando um modelo
- No campo Nome do job, insira um nome exclusivo.
- Opcional: em Endpoint regional, selecione um valor no menu suspenso. A região padrão é
us-central1
.Para ver uma lista de regiões em que é possível executar um job do Dataflow, consulte Locais do Dataflow.
- No menu suspenso Modelo do Dataflow, selecione the Pub/Sub to Elasticsearch template.
- Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
- Cliquem em Executar job.
gcloud
No shell ou no terminal, execute o modelo:
gcloud dataflow flex-template run JOB_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/PubSub_to_Elasticsearch_Flex \ --parameters \ inputSubscription=SUBSCRIPTION_NAME,\ connectionUrl=CONNECTION_URL,\ dataset=DATASET,\ namespace=NAMESPACE,\ apiKey=APIKEY,\ errorOutputTopic=ERROR_OUTPUT_TOPIC
Substitua:
PROJECT_ID
: o ID do projeto do Google Cloud em que você quer executar o job do DataflowJOB_NAME
: um nome de job de sua escolhaREGION_NAME
: a região onde você quer implantar o job do Dataflow, por exemplo,us-central1
VERSION
: a versão do modelo que você quer usarUse estes valores:
latest
para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: 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 respectiva pasta mãe datada no bucket: gs://dataflow-templates-REGION_NAME/
ERROR_OUTPUT_TOPIC
: o tópico do Pub/Sub para saída de errosSUBSCRIPTION_NAME
: o nome da sua assinatura de Pub/SubCONNECTION_URL
: seu URL do ElasticsearchDATASET
: seu tipo de registroNAMESPACE
: seu namespace para conjunto de dadosAPIKEY
: sua chave de API codificada em base64 para autenticação
API
Para executar o modelo usando a API REST, envie uma solicitação HTTP POST. Para mais informações sobre a
API e os respectivos escopos de autorização, consulte
projects.templates.launch
.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "parameters": { "inputSubscription": "SUBSCRIPTION_NAME", "connectionUrl": "CONNECTION_URL", "dataset": "DATASET", "namespace": "NAMESPACE", "apiKey": "APIKEY", "errorOutputTopic": "ERROR_OUTPUT_TOPIC" }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/PubSub_to_Elasticsearch_Flex", } }
Substitua:
PROJECT_ID
: o ID do projeto do Google Cloud em que você quer executar o job do DataflowJOB_NAME
: um nome de job de sua escolhaLOCATION
: a região onde você quer implantar o job do Dataflow, por exemplo,us-central1
VERSION
: a versão do modelo que você quer usarUse estes valores:
latest
para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: 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 respectiva pasta mãe datada no bucket: gs://dataflow-templates-REGION_NAME/
ERROR_OUTPUT_TOPIC
: o tópico do Pub/Sub para saída de errosSUBSCRIPTION_NAME
: o nome da sua assinatura de Pub/SubCONNECTION_URL
: seu URL do ElasticsearchDATASET
: seu tipo de registroNAMESPACE
: seu namespace para conjunto de dadosAPIKEY
: sua chave de API codificada em base64 para autenticação
A seguir
- Saiba mais sobre os modelos do Dataflow.
- Confira a lista de modelos fornecidos pelo Google.