In diesem Dokument wird beschrieben, wie Sie Aufgabenprotokolle schreiben und einen Batchjob mit Aufgabenprotokollen erstellen und ausführen.
Wenn die Protokollierung für einen Job aktiviert ist, werden Aufgabenprotokolle aus Nachrichten generiert, die die ausführbaren Elemente des Jobs während der Laufzeit drucken. Wenn Sie Ihre ausführbaren Dateien so konfigurieren, dass Aufgabenprotokolle geschrieben werden, können Sie benutzerdefinierte Informationen in Cloud Logging aufrufen. Das erleichtert die Analyse und Fehlerbehebung von Jobs. Weitere Informationen zu Protokollen finden Sie unter Jobs anhand von Protokollen analysieren.
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, der Protokolle schreibt:
-
So erstellen Sie einen Job:
-
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
-
Batch-Job-Bearbeiter (
-
So rufen Sie Logs auf:
Loganzeige (
roles/logging.viewer
) für das Projekt
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.
-
So erstellen Sie einen Job:
Job mit Aufgabenprotokollen erstellen und ausführen
Wenn Sie einen Job erstellen und ausführen möchten, für den Aufgabenprotokolle erstellt werden sollen, gehen Sie beim Erstellen des Jobs so vor:
- Aktivieren Sie Protokolle für den Job. Dadurch können alle für den Job geschriebenen Protokolle generiert werden.
Fügen Sie für jedes Aufgabenprotokoll, das der Job haben soll, einen Befehl hinzu, mit dem ein Aufgabenprotokoll in ein ausführbares Programm geschrieben wird. Wenn der Job ausgeführt wird, wird jedes Mal, wenn ein Befehl zum Schreiben eines Aufgabenlogs ausgeführt wird, ein Aufgabenprotokoll generiert.
Informationen zum Erstellen von Aufgabenprotokollen finden Sie in diesem Dokument unter Aufgabenprotokolle erstellen.
Aufgabenlogs schreiben
Ein Aufgabenprotokoll wird für alle Inhalte geschrieben, die während der Ausführung von einem Job in den Standardausgabestream (stdout
) oder Standardfehlerstream (stderr
) gedruckt werden. Mit dem Befehl echo
können Sie beispielsweise Aufgabenprotokolle schreiben.
Die Struktur des resultierenden Aufgabenlogs hängt davon ab, wie Sie die gedruckten Inhalte formatiert haben. Sie haben folgende Möglichkeiten, um jedes Aufgabenprotokoll zu erstellen:
Unstrukturiertes Protokoll schreiben, indem ein String ausgegeben wird Unstrukturierte Protokolle sind einfach und Sie können nur das Feld
textPayload
des Protokolls definieren.Strukturierte Protokolle mit JSON schreiben Strukturierte Protokolle erfordern die JSON-Formatierung, mit der Sie mehrere Felder definieren können, darunter einige Standardprotokollfelder, benutzerdefinierte Felder und benutzerdefinierte Statusereignisse.
Mit strukturierten Aufgabenprotokollen können Sie beispielsweise die Wichtigkeit des Logs definieren, die Sie als Filter verwenden können, wenn Sie sich Protokolle für einen Job ansehen.
Unstrukturiertes Protokoll schreiben, indem ein String ausgegeben wird
Bei nicht strukturierten Logs können Sie eine Nachricht definieren. Das ist ein String, der im Feld textPayload
des Logs angezeigt wird.
Wenn Sie ein unstrukturiertes Protokoll schreiben möchten, drucken Sie einen unformatierten String aus, wie in den folgenden Abschnitten gezeigt.
Beispiel für ein unstrukturiertes Protokoll
Angenommen, Sie möchten ein Aufgabenprotokoll mit dem folgenden String erstellen:
MESSAGE
Wenn Sie diesen Beispielstring drucken, wird ein Aufgabenprotokoll ausgegeben, das in etwa so aussieht:
insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...
Ersetzen Sie Folgendes:
MESSAGE
: Die Nachricht, ein String, der den Zweck des Aufgabenlogs zusammenfasst, z. B.The summary for a task log.
.PROJECT_ID
: die Projekt-ID Ihres Projekts.
String drucken
Sie können einen String mit verschiedenen Methoden drucken, z. B. indem Sie den folgenden echo
-Befehl in ein ausführbares Programm einfügen:
echo MESSAGE
Ausführliche Beispiele für Jobs, bei denen mit dem Befehl echo
unstrukturierte Aufgabenprotokolle geschrieben werden, finden Sie unter Einen einfachen Job erstellen und ausführen.
Strukturiertes Protokoll schreiben, indem ein JSON-Objekt ausgegeben wird
Mit strukturierten Protokollen können Sie Folgendes definieren:
- Vom Cloud Logging-Agent unterstützte Standardfelder
- Benutzerdefinierte Felder
- Ereignisse für benutzerdefinierten Status
Um ein strukturiertes Protokoll zu erstellen, drucken Sie ein JSON-Objekt. In den folgenden Abschnitten wird gezeigt, wie Sie ein Protokoll mit einigen Standard- und benutzerdefinierten Feldern definieren. Informationen zum Definieren eines Protokolls mit benutzerdefinierten Statusereignissen finden Sie unter Benutzerdefinierte Statusereignisse konfigurieren.
Beispiel für ein strukturiertes Protokoll
Angenommen, Sie möchten ein Aufgabenprotokoll mit den Informationen im folgenden JSON-Objekt, das eine Nachricht, eine Wichtigkeitsstufe und zwei benutzerdefinierte Felder definiert.
{
"message": "MESSAGE"
"severity": "SEVERITY"
"CUSTOM_FIELD_1": CUSTOM_VALUE_1
"CUSTOM_FIELD_2": CUSTOM_VALUE_2
}
Wenn Sie dieses JSON-Objekt drucken, erhalten Sie ein Aufgabenprotokoll, das in etwa so aussieht:
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: ...
Ersetzen Sie Folgendes:
MESSAGE
: Die Nachricht, ein String, der den Zweck des Aufgabenlogs zusammenfasst, z. B.The summary for a task log.
.SEVERITY
: die Wichtigkeitsstufe des Logs, die Sie als Filter verwenden können, wenn Sie sich Logs für einen Job ansehen. Die Schwere muss eine derLogSeverity
-Enum-Werte sein, die in einen String umgewandelt wird, bei dem nur der erste Buchstabe großgeschrieben wird. Geben Sie beispielsweise für dasERROR
-EnumError
an.CUSTOM_FIELD_1
undCUSTOM_FIELD_2
: Namen von benutzerdefinierten Feldern für das Aufgabenprotokoll, z. B.custom_field_1
undcustom_field_2
.CUSTOM_VALUE_1
undCUSTOM_VALUE_2
: Die Werte benutzerdefinierter Felder für das Aufgabenprotokoll. Sie können verschiedene Datentypen haben und möglicherweise Anführungszeichen erfordern, z. B."the first custom field"
und2
.PROJECT_ID
: die Projekt-ID Ihres Projekts.
JSON-Objekt drucken
Dieses Beispiel-JSON-Objekt lässt sich mit verschiedenen Methoden ausdrucken. In den folgenden Beispielen werden einige der möglichen Methoden zum Drucken des Beispiel-JSON-Objekts veranschaulicht:
- Drucken Sie mit dem Befehl
echo
einen entsprechenden String aus. Drucken Sie ein entsprechendes Wörterbuch mit Python aus.
echo-Befehl
Wenn Sie das Beispiel-JSON-Objekt mit dem Befehl echo
und einem entsprechenden String drucken möchten, fügen Sie den folgenden Befehl in ein ausführbares Programm ein:
echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'
Angenommen, Sie erstellen und führen einen Job mit dem folgenden ausführbaren Element aus:
"script": {
"text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}
Das resultierende Aufgabenprotokoll sieht dann in etwa so aus:
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
Wenn Sie das Beispiel-JSON-Objekt mit Python und einem entsprechenden Dictionary ausdrucken möchten, fügen Sie das folgende Beispiel in ein ausführbares Programm ein:
#!/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))
Angenommen, Sie erstellen und führen einen Job mit dem folgenden ausführbaren Element aus:
"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))"
}
Das resultierende Aufgabenprotokoll sieht dann in etwa so aus:
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: ...
Nächste Schritte
- Weitere Informationen zum Formatieren von Protokollen finden Sie in der Cloud Logging-Dokumentation unter Strukturiertes Logging.
- Weitere Informationen zum Erstellen strukturierter Aufgabenprotokolle mit benutzerdefinierten Statusereignissen
- Weitere Informationen zum Aufrufen der Aufgabenprotokolle für einen Job
- Weitere Informationen zu Optionen zum Erstellen von Jobs