Este documento explica como configurar eventos de estado personalizados, que descrevem os executáveis de uma tarefa, quando cria e executa uma tarefa em lote. Para saber mais sobre os eventos de estado, consulte o artigo Veja o histórico de uma tarefa através de eventos de estado.
Os eventos de estado personalizados permitem-lhe fornecer detalhes adicionais no histórico de uma tarefa acerca do progresso dos respetivos executáveis, o que pode ajudar a tornar uma tarefa mais fácil de analisar e resolver problemas. Por exemplo, pode configurar eventos de estado personalizados que descrevem quando um executável começa, um executável termina, um executável de barreira é alcançado ou um evento importante ocorre durante a progressão do seu código.
Antes de começar
- Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
-
Para receber as autorizações de que precisa para criar uma tarefa, peça ao seu administrador para lhe conceder as seguintes funções de IAM:
-
Editor de tarefas em lote (
roles/batch.jobsEditor
) no projeto -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço da tarefa, que, por predefinição, é a conta de serviço predefinida do Compute Engine
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Editor de tarefas em lote (
Configure eventos de estado personalizado
Configure eventos de estado personalizado através de uma ou mais das seguintes opções quando criar uma tarefa:
Descreva o estado de um runnable definindo o respetivo nome a apresentar. Pode fazê-lo quando cria uma tarefa com a CLI gcloud ou a API Batch.
Indique eventos importantes de tempo de execução escrevendo um registo de tarefas estruturado com o campo
batch/custom/event
para cada evento. Pode fazê-lo quando usa qualquer método para criar uma tarefa como parte das definições dos executáveis de scripts e contentores.
Descreva o estado de um runnable
Pode configurar eventos de estado personalizados que descrevem o estado de um runnable definindo o nome a apresentar de um runnable (campo displayName
).
Os eventos de estado personalizado resultantes variam ligeiramente para diferentes tipos de
executáveis:
Se definir um nome a apresentar para um script executável ou um contentor executável, o Batch adiciona automaticamente dois tipos de eventos de estado personalizado. O primeiro evento de estado personalizado indica sempre que uma tarefa inicia este executável. O segundo evento de estado personalizado indica sempre que uma tarefa termina esta ação executável e o código de saída correspondente.
Se definir um nome a apresentar para um barrier runnable, o Batch adiciona automaticamente um evento de estado personalizado que indica sempre que uma tarefa atinge esta barreira.
Para criar e executar uma tarefa com eventos de estado personalizados que descrevam o estado de um objeto executável, defina o campo displayName
para um ou mais objetos executáveis através da CLI gcloud, da API Batch ou da biblioteca.
gcloud
Use a CLI do Google Cloud para criar uma tarefa que inclua o campo displayName
numa ou mais definições runnables
no ficheiro JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por exemplo, uma tarefa com eventos de estado personalizados que descrevem o estado de cada runnable pode ter um ficheiro de configuração JSON semelhante ao seguinte:
{
"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
tem de ser exclusivo na tarefa. Por exemplo, script 1
, barrier 1
e
script 2
.
API
Use a API REST para criar uma tarefa que inclua o campo displayName
numa ou mais definições runnables
no ficheiro JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por exemplo, uma tarefa com eventos de estado personalizados que descrevem o estado de cada runnable pode ter um ficheiro de configuração JSON semelhante ao seguinte:
{
"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
tem de ser exclusivo na tarefa. Por exemplo, script 1
, barrier 1
e
script 2
.
Ir
Java
Node.js
Python
Depois de a tarefa de exemplo ter terminado a execução, os eventos de estado personalizado resultantes para cada tarefa são semelhantes aos seguintes:
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
...
Indique eventos de tempo de execução importantes
Pode configurar eventos de estado personalizados que indicam quando ocorre um evento importante enquanto um executável está em execução. Para tal, configure o executável para escrever um registo de tarefas estruturado que defina uma string para o campo do evento de estado personalizado do lote (batch/custom/event
).
Se um script executável ou um contentor executável escrever um registo de tarefas estruturado que defina o campo JSON batch/custom/event
, produz um evento de estado personalizado nesse momento. Embora possa configurar o registo de tarefas estruturado para incluir campos adicionais, o evento de estado personalizado só inclui a string para o campo batch/custom/event
.
Para criar e executar uma tarefa com eventos de estado personalizados que indicam quando ocorre um evento importante, configure um ou mais executáveis para escrever um registo estruturado imprimindo JSON e defina o campo batch/custom/event
como parte do registo.
...
"runnables": [
{
...
"echo '{\"batch/custom/event\":\"EVENT_DESCRIPTION\"}'"
...
}
]
...
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
...
Por exemplo, uma tarefa com eventos de estado personalizados que indicam quando ocorre um evento importante pode ter um ficheiro de configuração JSON semelhante ao seguinte:
{
"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 estado personalizado, por exemplo, halfway done
.
Depois de a tarefa de exemplo ter terminado a execução, o evento de estado personalizado resultante para cada tarefa é semelhante ao seguinte:
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
O que se segue?
- Se tiver problemas ao criar ou executar uma tarefa, consulte a secção Resolução de problemas.
- Saiba como ver eventos de estado.
- Saiba como escrever registos de tarefas.
- Saiba mais sobre as opções de criação de tarefas.