Questo documento spiega come configurare gli eventi di stato personalizzati, che descrivono i componenti eseguibili di un job, quando crei ed esegui un job batch. Per informazioni 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 dettagli aggiuntivi nella cronologia di un'attività sull'avanzamento dei relativi eseguibili, il che può contribuire a semplificare l'analisi e la risoluzione dei problemi di un job. Ad esempio, puoi configurare eventi di stato personalizzati che descrivono quando un eseguibile inizia, termina, viene raggiunto un eseguibile barriere o si verifica un evento importante durante l'avanzamento del codice.
Prima di iniziare
- Se non hai mai utilizzato Batch, rivedi Inizia a utilizzare Batch e abilita Batch, completando prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Editor job batch (
roles/batch.jobsEditor
) del progetto -
Utente account di servizio (
roles/iam.serviceAccountUser
) sull'account di servizio del job, che per impostazione predefinita è l'account di servizio Compute Engine predefinito
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Editor job batch (
Configurare gli eventi di stato personalizzati
Configura eventi di stato personalizzati utilizzando uno o più dei seguenti elementi opzioni quando crei un job:
Descrivi lo stato di un programma eseguibile definendone il nome visualizzato. Puoi farlo quando crei un job con gcloud CLI o l'API Batch.
Indicare gli eventi di runtime importanti scrivendo un log delle attività strutturato con il campo
batch/custom/event
per ogni evento. Puoi farlo quando utilizzi qualsiasi metodo per creare un job nell'ambito delle definizioni di script e eseguibili dei contenitori.
Descrivere lo stato di un eseguibile
Puoi configurare eventi di stato personalizzati che descrivono lo stato di un eseguibile definendo il nome visualizzato dell'eseguibile (campo displayName
).
Gli eventi di stato personalizzati risultanti variano leggermente a seconda dei tipi di
elementi eseguibili:
Se definisci un nome visualizzato per un container eseguibile o uno script eseguibile, e poi aggiunge automaticamente due tipi di eventi di stato personalizzati. Il primo evento di stato personalizzato indica l'avvio di un'attività eseguibili. Il secondo evento di stato personalizzato indica ogni volta che un'attività completa questo eseguibile e il corrispondente codice di uscita.
Se definisci un nome visualizzato per una barriera eseguibile, 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 un
eseguibile, definisci il campo displayName
per uno o più
eseguibili utilizzando gcloud CLI, l'API Batch
libreria.
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 programma eseguibile 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 dell'elemento eseguibile,
devono essere univoci all'interno del job, ad esempio script 1
, barrier 1
e
script 2
,
API
Usa l'API REST per
creare un job che
include il campo displayName
in una o più definizioni di runnables
nel file JSON:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Ad esempio, un job con eventi di stato personalizzati che descrivono lo stato di ogni programma eseguibile 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 dell'elemento eseguibile,
devono essere univoci 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 ciascuna 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
...
Indica eventi di runtime importanti
Puoi configurare eventi di stato personalizzati che segnalano un evento importante
accade mentre è in esecuzione un elemento eseguibile, configurandolo in modo che scriva
un log strutturato delle attività che definisce una stringa per il
campo dell'evento di stato personalizzato (batch/custom/event
).
Se un container eseguibile o uno script eseguibile scrive un log delle attività strutturato
che definisce il campo JSON batch/custom/event
, produce un
personalizzato in quel momento. Sebbene sia possibile configurare il modello
log delle attività per includere altri campi, 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
che si verifichi un evento importante, configura uno o più eseguibili
scrivi 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 che si verifica un evento importante, può avere un file di configurazione JSON simile a:
{
"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 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.