Neste documento, explicamos como configurar eventos de status personalizados, que descrevem os executáveis de um job, ao criar e executar um job em lote. Para saber mais sobre eventos de status, consulte Ver o histórico de um job usando eventos de status.
Com os eventos de status personalizados, você pode fornecer mais detalhes no histórico de uma tarefa sobre o progresso dos executáveis, o que pode facilitar a análise e a solução de problemas de um job. Por exemplo, é possível configurar eventos de status personalizados que descrevem quando um executável começa ou termina, quando um executável de barreira é alcançado ou quando um evento importante acontece durante a progressão do código.
Antes de começar
- Se você nunca usou o Batch, leia Começar a usar o Batch e ative o serviço concluindo os pré-requisitos para projetos e usuários.
-
Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Editor de jobs em lote (
roles/batch.jobsEditor
) no projeto -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço do job, que por padrão é a conta de serviço padrão do Compute Engine
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
-
Editor de jobs em lote (
Configurar eventos de status personalizados
Configure eventos de status personalizados usando uma ou mais das seguintes opções ao criar um job:
Descreva o estado de um executável definindo o nome de exibição. É possível fazer isso ao criar um job usando a CLI gcloud ou a API Batch.
Indique eventos importantes de tempo de execução escrevendo um registro de tarefas estruturado com o campo
batch/custom/event
para cada evento. Você pode fazer isso ao usar qualquer método para criar um job como parte das definições de script e executáveis de contêiner.
Descrever o estado de um executável
É possível configurar eventos de status personalizados que descrevem o estado de um executável definindo o nome de exibição dele (campo displayName
).
Os eventos de status personalizados resultantes variam um pouco para diferentes tipos de
executáveis:
Se você definir um nome de exibição para um executável de contêiner ou script, o Batch vai adicionar automaticamente dois tipos de eventos de status personalizados. O primeiro evento de status personalizado indica quando uma tarefa inicia esse executável. O segundo evento de status personalizado indica quando uma tarefa termina esse executável e o código de saída correspondente.
Se você definir um nome de exibição para um executável de barreira, o Batch vai adicionar automaticamente um evento de status personalizado que indica quando uma tarefa atinge essa barreira.
Para criar e executar um job com eventos de status personalizados que descrevem o estado de um
executável, defina o campo displayName
para um ou mais
executáveis usando a CLI gcloud, a API Batch ou
a biblioteca.
gcloud
Use a Google Cloud CLI para criar um job que inclua o campo displayName
em uma ou mais definições runnables
no arquivo JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por exemplo, um job com eventos de status personalizados que descrevem o estado de cada executável pode ter um arquivo de configuração JSON semelhante a este:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"displayName":"DISPLAY_NAME1",
"script": {
"text": "echo Hello world from script 1 for task ${BATCH_TASK_INDEX}"
}
},
{
"displayName":"DISPLAY_NAME2",
"barrier": {}
},
{
"displayName":"DISPLAY_NAME3",
"script": {
"text": "echo Hello world from script 2 for task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Substitua DISPLAY_NAME1
, DISPLAY_NAME2
e DISPLAY_NAME3
pelo nome do executável, que precisa ser exclusivo no job. Por exemplo, script 1
, barrier 1
e script 2
.
API
Use a API REST para criar um job que inclua o campo displayName
em uma ou mais definições runnables
no arquivo JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por exemplo, um job com eventos de status personalizados que descrevem o estado de cada executável pode ter um arquivo de configuração JSON semelhante a este:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"displayName":"DISPLAY_NAME1",
"script": {
"text": "echo Hello world from script 1 for task ${BATCH_TASK_INDEX}"
}
},
{
"displayName":"DISPLAY_NAME2",
"barrier": {}
},
{
"displayName":"DISPLAY_NAME3",
"script": {
"text": "echo Hello world from script 2 for task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Substitua DISPLAY_NAME1
, DISPLAY_NAME2
e DISPLAY_NAME3
pelo nome do executável, que precisa ser exclusivo no job. Por exemplo, script 1
, barrier 1
e script 2
.
Go
Java
Node.js
Python
Depois que o job de exemplo terminar de ser executado, os eventos de status personalizados resultantes de cada tarefa serão semelhantes a estes:
statusEvents:
...
- description: 'script at index #0 with display name [DISPLAY_NAME1] started.'
eventTime: '...'
type: RUNNABLE_EVENT
- description: 'script at index #0 with display name [DISPLAY_NAME1] finished with exit
code 0.'
eventTime: '...'
type: RUNNABLE_EVENT
- description: 'barrier at index #2 with display name [DISPLAY_NAME2] reached.'
eventTime: '...'
type: BARRIER_REACHED_EVENT
- description: 'script at index #2 with display name [DISPLAY_NAME3] started.'
eventTime: '...'
type: RUNNABLE_EVENT
- description: 'script at index #2 with display name [DISPLAY_NAME3] finished with exit
code 0.'
eventTime: '...'
type: RUNNABLE_EVENT
...
Indicar eventos importantes do ambiente de execução
É possível configurar eventos de status personalizados que indicam quando um evento importante acontece enquanto um executável está em execução. Para isso, configure o executável para gravar um registro de tarefas estruturado que define uma string para o campo de evento de status personalizado do Batch (batch/custom/event
).
Se um contêiner executável ou um script executável gravar um registro de tarefa estruturado
que define o campo JSON batch/custom/event
, ele vai produzir um
evento de status personalizado naquele momento. Embora seja possível configurar o registro de tarefas estruturadas para incluir outros campos, o evento de status personalizado inclui apenas a string do campo batch/custom/event
.
Para criar e executar um job com eventos de status personalizados que indicam quando um
evento importante acontece, configure um ou mais executáveis para
gravar um registro estruturado imprimindo JSON
e defina o campo batch/custom/event
como parte do registro.
...
"runnables": [
{
...
"echo '{\"batch/custom/event\":\"EVENT_DESCRIPTION\"}'"
...
}
]
...
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
...
Por exemplo, um job com eventos de status personalizados que indicam quando um evento importante acontece pode ter um arquivo de configuração JSON semelhante a este:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30; echo '{\"batch/custom/event\": \"EVENT_DESCRIPTION\"}'; sleep 30"
}
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Substitua EVENT_DESCRIPTION
por uma descrição do
evento de status personalizado, por exemplo, halfway done
.
Depois que o job de exemplo terminar de ser executado, o evento de status personalizado resultante para cada tarefa será semelhante a este:
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
A seguir
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Saiba como ver eventos de status.
- Saiba como gravar registros de tarefas.
- Saiba mais sobre outras opções de criação de jobs.