In diesem Dokument wird beschrieben, wie Sie benutzerdefinierte Statusereignisse konfigurieren, die die ausführbaren Elemente eines Jobs beschreiben, wenn Sie einen Batchjob erstellen und ausführen. Weitere Informationen zu Statusereignissen finden Sie unter Verlauf eines Jobs über Statusereignisse ansehen.
Mit benutzerdefinierten Statusereignissen können Sie im Verlauf einer Aufgabe zusätzliche Details zum Fortschritt der ausführbaren Elemente angeben. Dies kann die Analyse und Fehlerbehebung eines Jobs erleichtern. Sie können beispielsweise benutzerdefinierte Statusereignisse konfigurieren, die beschreiben, wann ein ausführbarer Code gestartet oder beendet wird, eine Barriere erreicht wird oder ein wichtiges Ereignis während der Ausführung Ihres Codes auftritt.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Hilfeartikel Batch-Dateien erstellen und ausführen und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batch-Job-Bearbeiter (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) im Dienstkonto des Jobs, das standardmäßig das Compute Engine-Standarddienstkonto ist
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batch-Job-Bearbeiter (
Benutzerdefinierte Statusereignisse konfigurieren
Sie können benutzerdefinierte Statusereignisse konfigurieren, indem Sie beim Erstellen eines Jobs eine oder mehrere der folgenden Optionen verwenden:
Beschreiben Sie den Status eines ausführbaren Elements, indem Sie seinen Anzeigenamen definieren. Sie können dies tun, wenn Sie einen Job mit der gcloud CLI oder der Batch API erstellen.
Geben Sie wichtige Laufzeitereignisse an, indem Sie für jedes Ereignis ein strukturiertes Aufgabenprotokoll mit dem Feld
batch/custom/event
erstellen. Sie können dies tun, wenn Sie eine beliebige Methode zum Erstellen eines Jobs als Teil der Definitionen von Script- und Container-Ausführbaren verwenden.
Status eines ausführbaren Programms beschreiben
Sie können benutzerdefinierte Statusereignisse konfigurieren, die den Status eines ausführbaren Programms beschreiben, indem Sie den Anzeigenamen des ausführbaren Programms (Feld displayName
) definieren.
Die resultierenden benutzerdefinierten Statusereignisse variieren geringfügig für verschiedene Arten von ausführbaren Dateien:
Wenn Sie einen Anzeigenamen für einen ausführbaren Container oder ein ausführbares Script definieren, fügt Batch automatisch zwei Arten von benutzerdefinierten Statusereignissen hinzu. Das erste benutzerdefinierte Statusereignis gibt an, wann eine Aufgabe dieses ausführbare Element startet. Das zweite benutzerdefinierte Statusereignis gibt an, wann eine Aufgabe dieses ausführbare Element beendet und welchen Beendigungscode sie hat.
Wenn Sie einen Anzeigenamen für eine Barriere definieren, fügt Batch automatisch ein benutzerdefiniertes Statusereignis hinzu, das angibt, wann eine Aufgabe diese Barriere erreicht.
Wenn Sie einen Job mit benutzerdefinierten Statusereignissen erstellen und ausführen möchten, die den Status eines ausführbaren Elements beschreiben, definieren Sie das Feld displayName
für ein oder mehrere ausführbare Elemente mit der gcloud CLI, der Batch API oder der Bibliothek.
gcloud
Verwenden Sie die Google Cloud CLI, um einen Job zu erstellen, der das Feld displayName
in einer oder mehreren runnables
-Definitionen in der JSON-Datei enthält:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Ein Job mit benutzerdefinierten Statusereignissen, die den Status jedes ausführbaren Elements beschreiben, kann beispielsweise eine JSON-Konfigurationsdatei ähnlich der folgenden haben:
{
"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"
}
}
Ersetzen Sie DISPLAY_NAME1
, DISPLAY_NAME2
und DISPLAY_NAME3
durch den Namen des ausführbaren Programms, der innerhalb des Jobs eindeutig sein muss, z. B. script 1
, barrier 1
und script 2
.
API
Verwenden Sie die REST API, um einen Job zu erstellen, der das Feld displayName
in einer oder mehreren runnables
-Definitionen in der JSON-Datei enthält:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Ein Job mit benutzerdefinierten Statusereignissen, die den Status jedes ausführbaren Elements beschreiben, kann beispielsweise eine JSON-Konfigurationsdatei ähnlich der folgenden haben:
{
"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"
}
}
Ersetzen Sie DISPLAY_NAME1
, DISPLAY_NAME2
und DISPLAY_NAME3
durch den Namen des ausführbaren Programms, der innerhalb des Jobs eindeutig sein muss, z. B. script 1
, barrier 1
und script 2
.
Go
Java
Node.js
Python
Nach Abschluss des Beispieljobs sehen die resultierenden benutzerdefinierten Statusereignisse für jede Aufgabe in etwa so aus:
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
...
Wichtige Laufzeitereignisse angeben
Sie können benutzerdefinierte Statusereignisse konfigurieren, die angeben, wann ein wichtiges Ereignis auftritt, während ein ausführbares Programm ausgeführt wird. Dazu müssen Sie das ausführbare Programm so konfigurieren, dass ein strukturiertes Aufgabenprotokoll geschrieben wird, das einen String für das Feld „Batch-benutzerdefiniertes Statusereignis“ (batch/custom/event
) definiert.
Wenn ein ausführbarer Container oder ein ausführbares Script ein strukturiertes Aufgabenprotokoll schreibt, das das JSON-Feld batch/custom/event
definiert, wird zu diesem Zeitpunkt ein benutzerdefiniertes Statusereignis generiert. Sie können das strukturierte Aufgabenprotokoll zwar so konfigurieren, dass es zusätzliche Felder enthält, das benutzerdefinierte Statusereignis enthält jedoch nur den String für das Feld batch/custom/event
.
Wenn Sie einen Job mit benutzerdefinierten Statusereignissen erstellen und ausführen möchten, die angeben, wann ein wichtiges Ereignis eintritt, konfigurieren Sie ein oder mehrere ausführbare Elemente, um ein strukturiertes Protokoll zu erstellen, indem Sie JSON drucken, und definieren Sie das Feld batch/custom/event
als Teil des Logs.
...
"runnables": [
{
...
"echo '{\"batch/custom/event\":\"EVENT_DESCRIPTION\"}'"
...
}
]
...
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
...
Ein Job mit benutzerdefinierten Statusereignissen, die angeben, wann ein wichtiges Ereignis eintritt, kann beispielsweise eine JSON-Konfigurationsdatei ähnlich der folgenden haben:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30; echo '{\"batch/custom/event\": \"EVENT_DESCRIPTION\"}'; sleep 30"
}
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Ersetzen Sie EVENT_DESCRIPTION
durch eine Beschreibung für das benutzerdefinierte Statusereignis, z. B. halfway done
.
Nach Abschluss der Ausführung des Beispieljobs sieht das resultierende benutzerdefinierte Statusereignis für jede Aufgabe in etwa so aus:
statusEvents:
...
- description: EVENT_DESCRIPTION
eventTime: '...'
type: RUNNABLE_CUSTOM_EVENT
...
Nächste Schritte
- Wenn beim Erstellen oder Ausführen eines Jobs Probleme auftreten, lesen Sie den Hilfeartikel Fehlerbehebung.
- Informationen zum Ansehen von Statusereignissen
- Weitere Informationen zum Erstellen von Aufgabenprotokollen
- Weitere Informationen zu Optionen zum Erstellen von Jobs