Questo documento spiega come configurare gli eventi di stato personalizzati, che descrivono i runnable di un job, quando crei ed esegui un job Batch. Per scoprire di più sugli eventi di stato, consulta Visualizzare la cronologia di un job tramite gli eventi di stato.
Gli eventi di stato personalizzati ti consentono di fornire ulteriori dettagli nella cronologia di un'attività sullo stato di avanzamento dei relativi runnable, il che può semplificare l'analisi e la risoluzione dei problemi di un job. Ad esempio, puoi configurare eventi di stato personalizzati che descrivono quando un runnable inizia, quando termina, quando viene raggiunto un runnable di barriera o quando si verifica un evento importante durante l'avanzamento del codice.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la pagina Inizia a utilizzare Batch e abilita Batch completando i prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Editor di job batch (
roles/batch.jobsEditor) sul progetto - Utente del service account (
roles/iam.serviceAccountUser) sul service account del job, che per impostazione predefinita è il service account predefinito di Compute Engine
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
- Editor di job batch (
Configurare gli eventi di stato personalizzati
Configura gli eventi di stato personalizzati utilizzando una o più delle seguenti opzioni quando stai creando un job:
Descrivi lo stato di un runnable definendone il nome visualizzato. Puoi farlo quando crei un job utilizzando gcloud CLI o l'API Batch.
Indica gli eventi di runtime importanti scrivendo un log delle attività strutturato con il campo
batch/custom/eventper ogni evento. Puoi farlo quando utilizzi qualsiasi metodo per creare un job nell'ambito delle definizioni dei runnable di script e container.
Descrivere lo stato di un runnable
Puoi configurare eventi di stato personalizzati che descrivono lo stato di un runnable definendo il nome visualizzato del runnable
(displayName campo).
Gli eventi di stato personalizzati risultanti variano leggermente a seconda del tipo di runnable:
Se definisci un nome visualizzato per un runnable di container o di script, Batch aggiunge automaticamente due tipi di eventi di stato personalizzati. Il primo evento di stato personalizzato indica ogni volta che un'attività avvia questo runnable. Il secondo evento di stato personalizzato indica ogni volta che un'attività termina questo runnable e il codice di uscita corrispondente.
Se definisci un nome visualizzato per un runnable di barriera, Batch aggiunge automaticamente un evento di stato personalizzato che indica ogni volta che un'attività raggiunge questa barriera.
Per creare ed eseguire un job con eventi di stato personalizzati che descrivono lo stato di un runnable, definisci il campo displayName per uno o più runnable utilizzando gcloud CLI, l'API o la libreria Batch.
gcloud
Utilizza Google Cloud CLI per
creare un job che
includa il campo displayName in una o più definizioni runnables
nel file JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Ad esempio, un job con eventi di stato personalizzati che descrivono lo stato di ogni runnable può avere un file di configurazione JSON simile al seguente:
{
"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"
}
}
Sostituisci DISPLAY_NAME1, DISPLAY_NAME2 e DISPLAY_NAME3 con il nome del runnable, che deve essere univoco all'interno del job, ad esempio script 1, barrier 1 e script 2.
API
Utilizza l'API REST per
creare un job che
includa il displayName campo in una o più runnables definizioni
nel file JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Ad esempio, un job con eventi di stato personalizzati che descrivono lo stato di ogni runnable può avere un file di configurazione JSON simile al seguente:
{
"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"
}
}
Sostituisci DISPLAY_NAME1, DISPLAY_NAME2 e DISPLAY_NAME3 con il nome del runnable, che deve essere univoco all'interno del job, ad esempio script 1, barrier 1 e script 2.
Vai
Java
Node.js
Python
Al termine dell'esecuzione del job di esempio, gli eventi di stato personalizzati risultanti per ogni attività sono simili ai seguenti:
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
...
Indicare eventi di runtime importanti
Puoi configurare eventi di stato personalizzati che indicano quando si verifica un evento importante durante l'esecuzione di un runnable configurando il runnable in modo che scriva un log delle attività strutturato che definisce una stringa per il campo dell'evento di stato personalizzato di Batch (batch/custom/event).
Se un runnable di container o di script scrive un log delle attività strutturato che definisce il campo JSON batch/custom/event, genera un evento di stato personalizzato in quel momento. Anche se puoi configurare il log delle attività strutturato in modo che includa campi aggiuntivi, l'evento di stato personalizzato include solo la stringa per il campo batch/custom/event.
Per creare ed eseguire un job con eventi di stato personalizzati che indicano quando si verifica un
evento importante, configura uno o più runnable in modo che
scrivano un log strutturato stampando JSON
e definisci il campo batch/custom/event come parte del log.
...
"runnables": [
{
...
"echo '{\"batch/custom/event\":\"EVENT_DESCRIPTION\"}'"
...
}
]
...
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
...
Ad esempio, un job con eventi di stato personalizzati che indicano quando si verifica un evento importante può avere un file di configurazione JSON simile al seguente:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30; echo '{\"batch/custom/event\": \"EVENT_DESCRIPTION\"}'; sleep 30"
}
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Sostituisci EVENT_DESCRIPTION con una descrizione per l'evento di stato personalizzato, ad esempio halfway done.
Al termine dell'esecuzione del job di esempio, l'evento di stato personalizzato risultante per ogni attività è simile al seguente:
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Scopri come visualizzare gli eventi di stato.
- Scopri come scrivere i log delle attività.
- Scopri di più sulle opzioni di creazione dei job.