Ce document explique comment configurer des événements d'état personnalisés, qui décrivent les exécutables d'un job, lorsque vous créez et exécutez un job Batch. Pour en savoir plus sur les événements d'état, consultez Afficher l'historique d'un job à l'aide des événements d'état.
Les événements d'état personnalisés vous permettent de fournir des informations supplémentaires dans l'historique d'une tâche sur la progression de ses exécutables. Cela peut faciliter l'analyse et le dépannage d'un job. Par exemple, vous pouvez configurer des événements d'état personnalisés qui décrivent le moment où un exécutable démarre, se termine, atteint un exécutable de barrière ou lorsqu'un événement important se produit pendant la progression de votre code.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez Premiers pas avec Batch et activez Batch en remplissant les conditions préalables pour les projets et les utilisateurs.
-
Pour obtenir les autorisations nécessaires pour créer un job, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Éditeur de tâches par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service du job, qui par défaut est le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
-
Éditeur de tâches par lot (
Configurer des événements d'état personnalisés
Configurez des événements d'état personnalisés en utilisant une ou plusieurs des options suivantes lorsque vous créez un job :
Décrivez l'état d'un exécutable en définissant son nom à afficher. Vous pouvez le faire lorsque vous créez un job à l'aide de gcloud CLI ou de l'API Batch.
Indiquez les événements d'exécution importants en écrivant un journal des tâches structuré avec le champ
batch/custom/event
pour chaque événement. Vous pouvez le faire lorsque vous utilisez une méthode pour créer un job dans le cadre des définitions des exécutables de script et de conteneur.
Décrire l'état d'un exécutable
Vous pouvez configurer des événements d'état personnalisés qui décrivent l'état d'un exécutable en définissant son nom à afficher (champ displayName
).
Les événements d'état personnalisé qui en résultent varient légèrement selon les types d'éléments exécutables :
Si vous définissez un nom à afficher pour un exécutable de conteneur ou un exécutable de script, Batch ajoute automatiquement deux types d'événements d'état personnalisés. Le premier événement d'état personnalisé indique quand une tâche démarre ce runnable. Le deuxième événement d'état personnalisé indique quand une tâche termine cette exécutable et le code de sortie correspondant.
Si vous définissez un nom à afficher pour un exécutable de barrière, Batch ajoute automatiquement un événement d'état personnalisé qui indique chaque fois qu'une tâche atteint cette barrière.
Pour créer et exécuter un job avec des événements d'état personnalisés décrivant l'état d'un exécutable, définissez le champ displayName
pour un ou plusieurs exécutables à l'aide de la gcloud CLI, de l'API Batch ou de la bibliothèque.
gcloud
Utilisez Google Cloud CLI pour créer un job qui inclut le champ displayName
dans une ou plusieurs définitions runnables
du fichier JSON :
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Par exemple, une tâche avec des événements d'état personnalisés décrivant l'état de chaque exécutable peut avoir un fichier de configuration JSON semblable à ce qui suit :
{
"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"
}
}
Remplacez DISPLAY_NAME1
, DISPLAY_NAME2
et DISPLAY_NAME3
par le nom de l'exécutable, qui doit être unique dans le job (par exemple, script 1
, barrier 1
et script 2
).
API
Utilisez l'API REST pour créer un job qui inclut le champ displayName
dans une ou plusieurs définitions runnables
du fichier JSON :
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Par exemple, une tâche avec des événements d'état personnalisés décrivant l'état de chaque exécutable peut avoir un fichier de configuration JSON semblable à ce qui suit :
{
"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"
}
}
Remplacez DISPLAY_NAME1
, DISPLAY_NAME2
et DISPLAY_NAME3
par le nom de l'exécutable, qui doit être unique dans le job (par exemple, script 1
, barrier 1
et script 2
).
Go
Java
Node.js
Python
Une fois l'exemple de job exécuté, les événements d'état personnalisé générés pour chaque tâche ressemblent à ce qui suit :
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
...
Indiquer les événements d'exécution importants
Vous pouvez configurer des événements d'état personnalisés qui indiquent quand un événement important se produit lors de l'exécution d'un exécutable. Pour ce faire, configurez cet exécutable afin qu'il écrive un journal des tâches structuré qui définit une chaîne pour le champ d'événement d'état personnalisé Batch (batch/custom/event
).
Si un conteneur exécutable ou un script exécutable écrit un journal de tâches structuré qui définit le champ JSON batch/custom/event
, il génère un événement d'état personnalisé à ce moment-là. Bien que vous puissiez configurer le journal des tâches structurées pour inclure des champs supplémentaires, l'événement d'état personnalisé n'inclut que la chaîne du champ batch/custom/event
.
Pour créer et exécuter un job avec des événements d'état personnalisés qui indiquent quand un événement important se produit, configurez un ou plusieurs exécutables pour écrire un journal structuré en imprimant du code JSON et définissez le champ batch/custom/event
dans le journal.
...
"runnables": [
{
...
"echo '{\"batch/custom/event\":\"EVENT_DESCRIPTION\"}'"
...
}
]
...
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
...
Par exemple, un job avec des événements d'état personnalisés qui indiquent quand un événement important se produit peut avoir un fichier de configuration JSON semblable à ce qui suit :
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30; echo '{\"batch/custom/event\": \"EVENT_DESCRIPTION\"}'; sleep 30"
}
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Remplacez EVENT_DESCRIPTION
par une description de l'événement d'état personnalisé, par exemple halfway done
.
Une fois le job exemple exécuté, l'événement d'état personnalisé résultant pour chaque tâche ressemble à ce qui suit :
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
Étapes suivantes
- Si vous rencontrez des problèmes pour créer ou exécuter un job, consultez la section Dépannage.
- Découvrez comment afficher les événements d'état.
- Découvrez comment écrire des journaux de tâches.
- Découvrez d'autres options de création de tâches.