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. Informationen zu Statusereignissen finden Sie unter Auftragsverlauf über Statusereignisse ansehen
Mit benutzerdefinierten Statusereignissen können Sie zusätzliche Details im Aufgabenverlauf angeben über den Fortschritt seiner Runnables, was dazu beitragen kann, einfacher analysieren und Fehler beheben können. Sie können z. B. benutzerdefinierte Statusereignisse die beschreiben, wann ein Runable startet, ein Runable endet, eine Hürde ausgeführt wird oder ein wichtiges Ereignis im Verlauf Ihren Code.
Hinweise
- Wenn Sie Batch zum ersten Mal verwenden, lesen Sie Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie den Voraussetzungen für Projekte und Nutzer.
-
Um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen, bitten Sie Ihren Administrator, Ihnen folgenden IAM-Rollen:
-
Batch-Job-Bearbeiter (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für das 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:
Status eines Runnables beschreiben indem Sie seinen Anzeigenamen festlegen. Das ist möglich, wenn Sie einen über die gcloud CLI oder Batch API.
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 sich daraus ergebenden benutzerdefinierten Statusereignisse variieren je nach
Runnables:
Wenn Sie einen Anzeigenamen für einen container runnable oder ein script runnable definieren, gilt Folgendes: fügt Batch automatisch zwei Arten von benutzerdefinierten Statusereignissen hinzu. Das erste benutzerdefinierte Statusereignis gibt an, wann eine Aufgabe dieses ausführbar sind. Das zweite benutzerdefinierte Statusereignis gibt an, wann eine Aufgabe abgeschlossen ist. dieses Runnable und die entsprechende Exit-Code.
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 wie die folgende 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 Runnables, das
müssen innerhalb des Jobs eindeutig sein, z. B. script 1
, barrier 1
und
script 2
API
Verwenden Sie die REST API für
einen Job erstellen, der
enthält das Feld displayName
in einer oder mehreren runnables
-Definitionen
in der JSON-Datei:
...
"runnables": [
{
"displayName":DISPLAY_NAME,
...
}
]
...
Ein Job mit benutzerdefinierten Statusereignissen, die den Status jedes ausführbaren Elements beschreiben, kann beispielsweise eine JSON-Konfigurationsdatei wie die folgende 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,
während ein Runnable ausgeführt wird, indem es
dieses Runnable so konfiguriert, dass es ein
strukturiertes Aufgabenlog, das einen String für den Batch definiert
Benutzerdefiniertes Statusereignis-Feld (batch/custom/event
).
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 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 Aufrufen von Statusereignissen
- Weitere Informationen zum Erstellen von Aufgabenprotokollen
- Weitere Informationen zu Optionen für die Joberstellung