En este documento se explica cómo configurar eventos de estado personalizados, que describen los elementos ejecutables de un trabajo, al crear y ejecutar un trabajo de Batch. Para obtener información sobre los eventos de estado, consulta Ver el historial de un trabajo a través de eventos de estado.
Los eventos de estado personalizados le permiten proporcionar detalles adicionales en el historial de una tarea sobre el progreso de sus elementos ejecutables, lo que puede ayudar a analizar y solucionar problemas de un trabajo más fácilmente. Por ejemplo, puede configurar eventos de estado personalizados que describan cuándo se inicia un elemento ejecutable, cuándo finaliza, cuándo se alcanza un elemento ejecutable de barrera o cuándo se produce un evento importante durante la progresión de su código.
Antes de empezar
- Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para obtener los permisos que necesitas para crear un trabajo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que de forma predeterminada es la cuenta de servicio predeterminada de Compute Engine
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Editor de trabajos por lotes (
Configurar eventos de estado personalizado
Para configurar eventos de estado personalizados, utilice una o varias de las siguientes opciones al crear un trabajo:
Describe el estado de un runnable definiendo su nombre visible. Puedes hacerlo cuando crees un trabajo con la CLI de gcloud o la API Batch.
Indica eventos importantes del tiempo de ejecución escribiendo un registro de tareas estructurado con el campo
batch/custom/event
para cada evento. Puedes hacerlo cuando utilices cualquier método para crear un trabajo como parte de las definiciones de los elementos ejecutables de secuencias de comandos y contenedores.
Describe el estado de un runnable
Puedes configurar eventos de estado personalizados que describan el estado de un elemento ejecutable definiendo el nombre visible de dicho elemento (campo displayName
).
Los eventos de estado personalizado resultantes varían ligeramente en función del tipo de elemento ejecutable:
Si defines un nombre visible para un ejecutable de contenedor o un ejecutable de secuencia de comandos, Batch añade automáticamente dos tipos de eventos de estado personalizados. El primer evento de estado personalizado indica cuándo se inicia una tarea en este ejecutable. El segundo evento de estado personalizado indica cuándo finaliza una tarea este ejecutable y el código de salida correspondiente.
Si defines un nombre visible para un ejecutable de barrera, Batch añade automáticamente un evento de estado personalizado que indica cuándo llega una tarea a esta barrera.
Para crear y ejecutar una tarea con eventos de estado personalizados que describan el estado de un elemento ejecutable, define el campo displayName
de uno o varios elementos ejecutables mediante gcloud CLI, la API de Batch o la biblioteca.
gcloud
Usa la CLI de Google Cloud para crear un trabajo que incluya el campo displayName
en una o varias definiciones de runnables
en el archivo JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por ejemplo, un trabajo con eventos de estado personalizados que describa el estado de cada elemento ejecutable puede tener un archivo de configuración JSON similar al siguiente:
{
"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"
}
}
Sustituye DISPLAY_NAME1
,
DISPLAY_NAME2
y
DISPLAY_NAME3
por el nombre del elemento ejecutable, que
debe ser único en el trabajo. Por ejemplo, script 1
, barrier 1
y
script 2
.
API
Usa la API REST para crear un trabajo que incluya el campo displayName
en una o varias definiciones de runnables
en el archivo JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por ejemplo, un trabajo con eventos de estado personalizados que describa el estado de cada elemento ejecutable puede tener un archivo de configuración JSON similar al siguiente:
{
"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"
}
}
Sustituye DISPLAY_NAME1
,
DISPLAY_NAME2
y
DISPLAY_NAME3
por el nombre del elemento ejecutable, que
debe ser único en el trabajo. Por ejemplo, script 1
, barrier 1
y
script 2
.
Go
Java
Node.js
Python
Una vez que se haya ejecutado la tarea de ejemplo, los eventos de estado personalizado resultantes de cada tarea serán similares a los siguientes:
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 del tiempo de ejecución
Puedes configurar eventos de estado personalizados que indiquen cuándo se produce un evento importante mientras se ejecuta un elemento ejecutable. Para ello, configura el elemento ejecutable para que escriba un registro de tareas estructurado que defina una cadena para el campo de evento de estado personalizado de Batch (batch/custom/event
).
Si un elemento ejecutable de contenedor o de secuencia de comandos escribe un registro de tareas estructurado que define el campo JSON batch/custom/event
, se genera un evento de estado personalizado en ese momento. Aunque puede configurar el registro de tareas estructurado para que incluya campos adicionales, el evento de estado personalizado solo incluye la cadena del campo batch/custom/event
.
Para crear y ejecutar un trabajo con eventos de estado personalizados que indiquen cuándo se produce un evento importante, configura uno o varios elementos ejecutables para escribir un registro estructurado imprimiendo JSON y define el campo batch/custom/event
como parte del registro.
...
"runnables": [
{
...
"echo '{\"batch/custom/event\":\"EVENT_DESCRIPTION\"}'"
...
}
]
...
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
...
Por ejemplo, un trabajo con eventos de estado personalizados que indican cuándo se produce un evento importante puede tener un archivo de configuración JSON similar al siguiente:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30; echo '{\"batch/custom/event\": \"EVENT_DESCRIPTION\"}'; sleep 30"
}
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Sustituye EVENT_DESCRIPTION
por una descripción del evento de estado personalizado. Por ejemplo, halfway done
.
Una vez que se haya completado la ejecución del trabajo de ejemplo, el evento de estado personalizado resultante de cada tarea será similar al siguiente:
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
Siguientes pasos
- Si tienes problemas para crear o ejecutar un trabajo, consulta la sección Solución de problemas.
- Consulte cómo ver eventos de estado.
- Consulta cómo escribir registros de tareas.
- Consulta más información sobre las opciones de creación de trabajos.