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 via 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, ce qui 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 démarrage d'un exécutable, la fin d'un exécutable, l'atteinte d'un exécutable de barrière ou un événement important qui 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 prérequis 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 Batch (
roles/batch.jobsEditor) sur le projet - Utilisateur du compte de service (
roles/iam.serviceAccountUser) sur le compte de service du job, qui est par défaut 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 Batch (
Configurer des événements d'état personnalisés
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 de tâches structuré avec le champ
batch/custom/eventpour chaque événement. Vous pouvez le faire lorsque vous utilisez n'importe quelle 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 le nom à afficher de l'exécutable
(displayName champ).
Les événements d'état personnalisés obtenus varient légèrement en fonction des types d'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 chaque fois qu'une tâche démarre cet exécutable. Le deuxième événement d'état personnalisé indique chaque fois qu'une tâche termine cet exécutable et le code de sortie correspondant exit code.
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 qui décrivent l'état d'un exécutable, définissez le champ displayName pour un ou plusieurs exécutables à l'aide de gcloud CLI, de l'API Batch ou d'une 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, un job avec des événements d'état personnalisés qui décrivent l'état de chaque exécutable peut avoir un fichier de configuration JSON semblable à celui-ci :
{
"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 displayName champ dans une ou plusieurs runnables définitions
du fichier JSON :
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Par exemple, un job avec des événements d'état personnalisés qui décrivent l'état de chaque exécutable peut avoir un fichier de configuration JSON semblable à celui-ci :
{
"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és obtenus pour chaque tâche sont semblables à ceux-ci :
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 en configurant cet exécutable pour qu'il écrive un journal de tâches structuré qui définit une chaîne pour le champ d'événement d'état personnalisé Batch (batch/custom/event).
Si un exécutable de conteneur ou un exécutable de script é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 de tâches structuré 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 qu'ils
écrivent un journal structuré en imprimant du code JSON
et définissez le batch/custom/event champ 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 à celui-ci :
{
"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 l'exemple de job exécuté, l'événement d'état personnalisé obtenu pour chaque tâche est semblable à celui-ci :
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
Étape suivante
- Si vous rencontrez des problèmes lors de la création ou de l'exécution d'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 jobs.