En este documento, se explica cómo configurar eventos de estado personalizados, que describen los elementos ejecutables de un trabajo, cuando creas y ejecutas un trabajo de Batch. Para obtener información sobre los eventos de estado, consulta Cómo ver el historial de un trabajo a través de eventos de estado.
Los eventos de estado personalizados te permiten proporcionar detalles adicionales en el historial de una tarea sobre el progreso de sus elementos ejecutables, lo que puede ayudar a que un trabajo sea más fácil de analizar y solucionar. Por ejemplo, puedes configurar eventos de estado personalizados que describan cuándo comienza un objeto ejecutable, cuándo finaliza, cuándo se alcanza un objeto ejecutable de barrera o cuándo ocurre un evento importante durante la progresión de tu código.
Antes de comenzar
- Si nunca usaste Batch, revisa Cómo comenzar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para obtener los permisos que necesitas para crear un trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
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 otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Editor de trabajos por lotes (
Cómo configurar eventos de estado personalizado
Configura eventos de estado personalizados con una o más de las siguientes opciones cuando crees un trabajo:
Describe el estado de un ejecutable definiendo su nombre visible. Puedes hacerlo cuando creas un trabajo con gcloud CLI o la API de 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 usas cualquier método para crear un trabajo como parte de las definiciones de ejecutables de secuencias de comandos y contenedores.
Describe el estado de un ejecutable
Puedes configurar eventos de estado personalizados que describan el estado de un ejecutable definiendo el nombre visible del ejecutable (campo displayName
).
Los eventos de estado personalizado resultantes varían ligeramente para los diferentes tipos de ejecutables:
Si defines un nombre visible para un ejecutable de contenedor o un ejecutable de secuencia de comandos, Batch agrega automáticamente dos tipos de eventos de estado personalizados. El primer evento de estado personalizado indica cuándo una tarea inicia 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 agrega automáticamente un evento de estado personalizado que indica cada vez que una tarea alcanza esta barrera.
Para crear y ejecutar un trabajo con eventos de estado personalizados que describan el estado de un ejecutable, define el campo displayName
para uno o más ejecutables con gcloud CLI, la API de Batch o la biblioteca.
gcloud
Usa Google Cloud CLI para crear un trabajo que incluya el campo displayName
en una o más definiciones de runnables
en el archivo JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por ejemplo, un trabajo con eventos de estado personalizados que describen 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"
}
}
Reemplaza DISPLAY_NAME1
, DISPLAY_NAME2
y DISPLAY_NAME3
por el nombre del ejecutable, que debe ser único dentro del trabajo (por ejemplo, script 1
, barrier 1
y script 2
).
API
Usa la API de REST para crear un trabajo que incluya el campo displayName
en una o más definiciones de runnables
en el archivo JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Por ejemplo, un trabajo con eventos de estado personalizados que describen 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"
}
}
Reemplaza DISPLAY_NAME1
, DISPLAY_NAME2
y DISPLAY_NAME3
por el nombre del ejecutable, que debe ser único dentro del trabajo (por ejemplo, script 1
, barrier 1
y script 2
).
Go
Java
Node.js
Python
Una vez que finaliza la ejecución del trabajo de ejemplo, los eventos de estado personalizado resultantes para cada tarea son 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 ocurre un evento importante mientras se ejecuta un ejecutable. Para ello, configura ese ejecutable de modo que escriba un registro de tareas estructurado que defina una cadena para el campo del evento de estado personalizado de Batch (batch/custom/event
).
Si un ejecutable de contenedor o un ejecutable de secuencia de comandos escribe un registro de tareas estructurado que define el campo batch/custom/event
JSON, genera un evento de estado personalizado en ese momento. Si bien puedes configurar el registro de tareas estructuradas 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 ocurre un evento importante, configura uno o más 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 ocurre 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"
}
}
Reemplaza EVENT_DESCRIPTION
por una descripción del evento de estado personalizado, por ejemplo, halfway done
.
Una vez que finaliza la ejecución del trabajo de ejemplo, el evento de estado personalizado resultante para cada tarea es similar al siguiente:
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
¿Qué sigue?
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Obtén más información para ver los eventos de estado.
- Obtén más información para escribir registros de tareas.
- Obtén más información sobre las opciones de creación de trabajos.