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 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 problemas. Por ejemplo, puedes configurar eventos de estado personalizados que describan cuándo comienza 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, revisa Comienza 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 de Batch (
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 a través de roles personalizados o cualquier otro rol predefinido.
- Editor de trabajos de Batch (
Configura eventos de estado personalizados
Configura eventos de estado personalizados con una o más de las siguientes opciones cuando estés creando un trabajo:
Describe el estado de un elemento 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/eventpara cada evento. Puedes hacerlo cuando usas cualquier método para crear un trabajo como parte de las definiciones de elementos 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 definiendo su nombre visible
(displayName campo).
Los eventos de estado personalizados resultantes varían ligeramente para los diferentes tipos de elementos ejecutables:
Si defines un nombre visible para un elemento ejecutable de contenedor o un elemento ejecutable de secuencia de comandos, Batch agrega automáticamente dos tipos de eventos de estado personalizados. El primer evento de estado personalizado indica cada vez que una tarea inicia este elemento ejecutable. El segundo evento de estado personalizado indica cada vez que una tarea finaliza este elemento 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 gcloud CLI, la API de Batch o la biblioteca.
gcloud
Usa Google Cloud CLI para
crear un trabajo que
incluya el displayName campo 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 describan 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 elemento 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 displayName campo 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 describan 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 elemento 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 personalizados 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
...
Indica 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 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 Batch (batch/custom/event).
Si un elemento ejecutable de contenedor o un elemento ejecutable de secuencia de comandos escribe un registro de tareas estructurado que define el campo JSON batch/custom/event, 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 para el 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 que
escriban un registro estructurado imprimiendo JSON
y define el batch/custom/event campo 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 indiquen 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 información para ver eventos de estado.
- Obtén información para escribir registros de tareas.
- Obtén información sobre más opciones de creación de trabajos.