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 por lotes. 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 problemas. Por ejemplo, puedes 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 ocurre un evento importante durante la progresión de tu código.
Antes de comenzar
- Si nunca usaste Batch, consulta 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 la 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 (
Configura eventos de estado personalizados
Para configurar eventos de estado personalizados, usa una o más de las siguientes opciones cuando crees un trabajo:
Describe el estado de un elemento ejecutable definiendo su nombre visible. Puedes hacerlo cuando creas un trabajo con la CLI de gcloud o la API de Batch.
Para indicar eventos importantes del entorno de ejecución, escribe 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 secuencia de comandos y contenedor.
Describe el estado de un elemento ejecutable
Puedes configurar eventos de estado personalizados que describan el estado de un elemento ejecutable si defines su nombre visible (campo displayName
).
Los eventos de estado personalizados resultantes varían ligeramente según los diferentes tipos de elementos ejecutables:
Si defines un nombre visible para un contendor ejecutable o una secuencia de comandos ejecutable, Batch agrega automáticamente dos tipos de eventos de estado personalizados. El primer evento de estado personalizado indica cada vez que una tarea inicia esta ejecutable. El segundo evento de estado personalizado indica cada vez que una tarea finaliza esta ejecutable y el código de salida correspondiente.
Si defines un nombre visible para un elemento 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 elemento ejecutable, define el campo displayName
para uno o más elementos ejecutables con la CLI de gcloud, 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 de la tarea, 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 de la tarea, por ejemplo, script 1
, barrier 1
y
script 2
.
Go
Java
Node.js
Python
Una vez que se haya ejecutado el trabajo de ejemplo, los eventos de estado personalizados resultantes para 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
...
Indica eventos importantes del entorno de ejecución
Puedes configurar eventos de estado personalizados que indiquen cuándo ocurre un evento importante mientras se ejecuta un elemento ejecutable. Para ello, configura ese elemento ejecutable para que escriba un registro de tareas estructurado que defina una cadena para el campo de evento de estado personalizado de lote (batch/custom/event
).
Si un contenedor ejecutable o una secuencia de comandos ejecutable escriben un registro de tareas estructurado que define el campo JSON batch/custom/event
, se produce un evento de estado personalizado en ese momento. Aunque puedes 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 una tarea 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 mediante la impresión de 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 se haya ejecutado el 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 una tarea, 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.