Ce document explique comment écrire des journaux de tâches, et comment créer et exécuter un job par lot qui comporte des journaux de tâches.
Lorsque la journalisation est activée pour un job, des journaux de tâches sont générés à partir des messages que les exécutables du job impriment lors de l'exécution. En configurant vos exécutables pour qu'ils écrivent des journaux de tâches, vous pouvez afficher des informations personnalisées dans Cloud Logging, ce qui peut faciliter l'analyse et le dépannage de vos jobs. Pour en savoir plus sur les journaux, consultez Analyser un job à l'aide de journaux.
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 qui écrit des journaux, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Pour créer un job :
- É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
- Éditeur de tâches Batch (
-
Pour afficher les journaux:
Lecteur de journaux (
roles/logging.viewer) sur le projet
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.
-
Pour créer un job :
Créer et exécuter un job qui comporte des journaux de tâches
Pour créer et exécuter un job qui comporte des journaux de tâches, procédez comme suit lorsque vous créez le job :
- Activez les journaux pour le job. Cela permet de générer tous les journaux écrits pour le job.
Pour chaque journal de tâches que vous souhaitez que le job comporte, ajoutez une commande qui écrit un journal de tâches dans un exécutable. Lorsque le job s'exécute, un journal de tâches est généré chaque fois qu'une commande d'écriture d'un journal de tâches est exécutée.
Pour savoir comment écrire des journaux de tâches, consultez Écrire des journaux de tâches dans ce document.
Écrire des journaux de tâches
Un journal de tâches est écrit pour tout contenu que les exécutables d'un job impriment dans le
flux de sortie standard (stdout) ou le flux d'erreur standard (stderr)
lors de l'exécution. Par exemple, vous pouvez écrire des journaux de tâches à l'aide de la
echo commande.
La structure du journal de tâches résultant varie en fonction de la mise en forme du contenu imprimé. Plus précisément, vous pouvez écrire chaque journal de tâches à l'aide de l'une des options suivantes :
Écrivez un journal non structuré en imprimant une chaîne. Les journaux non structurés sont simples et ne vous permettent de définir que le champ
textPayloaddu journal.Écrivez un journal structuré en imprimant du code JSON. Les journaux structurés nécessitent une mise en forme JSON, qui vous permet de définir plusieurs champs, y compris certains champs de journal standard, des champs personnalisés et des événements d'état personnalisés.
Par exemple, vous pouvez utiliser des journaux de tâches structurés pour définir la gravité du journal, que vous pouvez utiliser comme filtre lorsque vous affichez les journaux d'un job.
Écrire un journal non structuré en imprimant une chaîne
Les journaux non structurés vous permettent de définir un message, qui est une chaîne qui apparaît dans le champ textPayload du journal.
Pour écrire un journal non structuré, imprimez une chaîne non mise en forme, comme illustré dans les sections suivantes.
Exemple de journal non structuré
Supposons que vous souhaitiez un journal de tâches contenant la chaîne suivante :
MESSAGE
L'impression de cet exemple de chaîne génère un journal de tâches semblable à celui-ci :
insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...
Remplacez les éléments suivants :
MESSAGE: le message, qui est une chaîne résumant l'objectif du journal de tâches, par exempleThe summary for a task log..PROJECT_ID: l'ID du projet de votre projet.
Imprimer une chaîne
Vous pouvez imprimer une chaîne à l'aide de différentes méthodes, par exemple en incluant la commande echo suivante dans un exécutable :
echo MESSAGE
Pour obtenir des exemples complets de jobs qui utilisent la commande echo pour écrire
des journaux de tâches non structurés, consultez
Créer et exécuter un job de base.
Écrire un journal structuré en imprimant un objet JSON
Les journaux structurés vous permettent de définir les éléments suivants :
- Champs standards compatibles avec l'agent Cloud Logging
- Champs personnalisés
- Événements d'état personnalisés
Pour écrire un journal structuré, imprimez un objet JSON. Les sections suivantes montrent comment définir un journal avec certains champs standards et champs personnalisés. Si vous souhaitez savoir comment définir un journal avec des événements d'état personnalisés, consultez également Configurer des événements d'état personnalisés.
Exemple de journal structuré
Supposons que vous souhaitiez un journal de tâches contenant les informations de l'objet JSON suivant, qui définit un message, une gravité et deux champs personnalisés.
{
"message": "MESSAGE"
"severity": "SEVERITY"
"CUSTOM_FIELD_1": CUSTOM_VALUE_1
"CUSTOM_FIELD_2": CUSTOM_VALUE_2
}
L'impression de cet objet JSON génère un journal de tâches semblable à celui-ci :
insertId: ...
jsonPayload:
"CUSTOM_FIELD_1": CUSTOM_VALUE_1
"CUSTOM_FIELD_2": CUSTOM_VALUE_2
message: MESSAGE
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: SEVERITY
timestamp: ...
Remplacez les éléments suivants :
MESSAGE: le message, qui est une chaîne résumant l'objectif du journal de tâches, par exempleThe summary for a task log..SEVERITY: la gravité du journal, que vous pouvez utiliser comme filtre lorsque vous affichez les journaux d'un job. La gravité doit être l'une desLogSeverityénumérations converties en chaîne avec uniquement la première lettre en majuscule. Par exemple, pour l'énumérationERROR, spécifiezError.CUSTOM_FIELD_1etCUSTOM_FIELD_2: les noms des champs personnalisés du journal de tâches, par exemplecustom_field_1etcustom_field_2.CUSTOM_VALUE_1etCUSTOM_VALUE_2: les valeurs des champs personnalisés du journal de tâches, qui peuvent être de différents types de données et nécessiter des guillemets, par exemple,"the first custom field"et2.PROJECT_ID: l'ID du projet de votre projet.
Imprimer un objet JSON
Vous pouvez imprimer cet exemple d'objet JSON à l'aide de différentes méthodes. Par exemple, les exemples suivants illustrent certaines des méthodes possibles pour imprimer l'exemple d'objet JSON :
- Imprimez une chaîne équivalente à l'aide de la commande
echo.
Commande echo
Pour imprimer l'exemple d'objet JSON à l'aide de la commande echo et d'une chaîne équivalente, incluez la commande suivante dans un exécutable :
echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'
Supposons que vous créez et exécutez un job avec l'exécutable suivant :
"script": {
"text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}
Le journal de tâches résultant est alors semblable à celui-ci :
insertId: ...
jsonPayload:
custom_field_1: the first custom field
custom_field_2: 2
message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...
Python
Pour imprimer l'exemple d'objet JSON à l'aide de Python et d'un dictionnaire équivalent, incluez l'exemple suivant dans un exécutable :
#!/usr/bin/env python3
import json
entry = dict(
severity="SEVERITY",
message="MESSAGE",
CUSTOM_FIELD_1=CUSTOM_VALUE_1,
CUSTOM_FIELD_2=CUSTOM_VALUE_2,
)
print(json.dumps(entry))
Supposons que vous créez et exécutez un job avec l'exécutable suivant :
"script": {
"text": "#!/usr/bin/env python3\n\nimport json\n\nentry = dict(\nseverity=\"Error\",\nmessage=\"The summary for a structured task log with error severity.\",\ncustom_field_1=\"the first custom field\",\ncustom_field_2=2,\n)\nprint(json.dumps(entry))"
}
Le journal de tâches résultant est alors semblable à celui-ci :
insertId: ...
jsonPayload:
custom_field_1: the first custom field
custom_field_2: 2
message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...
Étape suivante
- Pour en savoir plus sur la mise en forme des journaux, consultez Journalisation structurée dans la documentation Cloud Logging.
- Découvrez comment écrire des journaux de tâches structurés qui incluent des événements d'état personnalisés.
- Découvrez comment afficher les journaux de tâches d'un job.
- Découvrez d'autres options de création de jobs.