In diesem Dokument wird beschrieben, wie Sie Aufgabenlogs schreiben und einen Batch-Job mit Aufgabenlogs zu erstellen und auszuführen.
Wenn Logging für einen Job aktiviert ist, werden aus Meldungen Aufgabenlogs generiert. dass die Runnables des Jobs während der Laufzeit gedruckt werden. 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 Aufgabenlogs erstellen und ausführen
So erstellen Sie einen Job, für den Sie Aufgabenlogs benötigen, und führen ihn aus: wenn Sie den Job erstellen:
- Aktivieren Sie Logs für den Job. Dadurch können Sie alle Logs, die für den zu generierenden Job geschrieben wurden.
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. Bei der Ausführung des Jobs wird ein Aufgabenlog generiert, wenn ein Befehl zum Schreiben eines Aufgabenlogs ausgeführt wird.
Informationen zum Erstellen von Aufgabenprotokollen finden Sie in diesem Dokument unter Aufgabenprotokolle erstellen.
Aufgabenlogs schreiben
Es wird ein Aufgabenlog für alle Inhalte geschrieben, die von den Runnables eines Jobs im
Standardausgabestream (stdout
) oder Standardfehlerstream (stderr
)
während der Laufzeit. Zum Beispiel können Sie Aufgabenlogs mit der Methode
echo
-Befehl
Die Struktur des resultierenden Aufgabenprotokolls variiert je nachdem, wie Sie die
gedruckten Inhalten. Sie können jedes Aufgabenlog mit einem der
folgende Optionen:
Unstrukturiertes Protokoll schreiben, indem ein String ausgegeben wird Unstrukturierte Protokolle sind einfach und Sie können nur das
textPayload
-Feld des Logs definieren.Strukturierte Protokolle mit JSON schreiben Strukturierte Logs erfordern eine JSON-Formatierung, mit der Sie mehrere Felder definieren können. darunter einige Standard-Logfelder, benutzerdefinierte Felder und benutzerdefinierte Statusereignisse.
Sie können mit strukturierten Aufgabenlogs den Schweregrad, die Sie als Filter verwenden können, Logs für einen Job ansehen
Ein unstrukturiertes Protokoll durch Drucken eines Strings schreiben
Bei nicht strukturierten Logs können Sie eine Nachricht definieren. Das ist ein String, der im Feld textPayload
des Logs angezeigt wird.
Um ein unstrukturiertes Protokoll zu schreiben, geben Sie eine unformatierte Zeichenfolge aus, wie in der folgenden Abschnitten.
Beispiel für ein unstrukturiertes Protokoll
Angenommen, Sie möchten ein Aufgabenlog, das Folgendes enthält: String:
MESSAGE
Wenn Sie diesen Beispielstring drucken, wird ein Aufgabenprotokoll ähnlich dem folgenden ausgegeben:
insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...
Ersetzen Sie Folgendes:
MESSAGE
: die Nachricht, die ein String ist, der fasst den Zweck des Aufgabenlogs zusammen, 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. durch Einschließen des
folgenden echo
-Befehl in einem ausführbaren Befehl:
echo MESSAGE
Für umfassende Beispiele von Jobs, die mit dem Befehl echo
schreiben
unstrukturierte Aufgabenlogs, siehe
Einen einfachen Job erstellen und ausführen
Strukturiertes Log durch Drucken eines JSON-Objekts schreiben
Mit strukturierten Logs können Sie Folgendes definieren:
- Vom Cloud Logging-Agent unterstützte Standardfelder
- Benutzerdefinierte Felder
- Ereignisse für benutzerdefinierte Status
Wenn Sie ein strukturiertes Log schreiben möchten, geben Sie ein JSON-Objekt aus. 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
}
Das Drucken dieses JSON-Objekts führt zu einem Aufgabenlog, der 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. Der Schweregrad muss einer der folgenden sein:LogSeverity
Enums in einen String konvertiert, dessen erster Buchstabe groß geschrieben ist. Beispiel: Geben Sie für dieERROR
-EnumError
an.CUSTOM_FIELD_1
undCUSTOM_FIELD_2
: die Namen der benutzerdefinierten Felder für die Aufgabenlog, z. B.custom_field_1
undcustom_field_2
.CUSTOM_VALUE_1
undCUSTOM_VALUE_2
: die Werte benutzerdefinierter Felder für die Aufgabenprotokolls, das verschiedene Datentypen haben kann und möglicherweise Zitate erfordert – für Beispiel:"the first custom field"
und2
.PROJECT_ID
: die Projekt-ID Ihres Projekts.
JSON-Objekt drucken
Dieses Beispiel-JSON-Objekt kann mit verschiedenen Methoden ausgegeben werden. 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. Geben Sie ein äquivalentes 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 Runnable aus:
"script": {
"text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}
Dann sieht das resultierende Aufgabenlog 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
Um das Beispiel-JSON-Objekt mit Python und einem Äquivalent auszugeben -Wörterbuch hinzufügen, fügen Sie das folgende Beispiel in ein Runnable 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 Runnable 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 unter Strukturiertes Logging in der Cloud Logging-Dokumentation
- Weitere Informationen zum Schreiben strukturierter Aufgabenlogs, die benutzerdefinierte Statusereignisse enthalten
- Aufgabenlogs für einen Job ansehen
- Weitere Informationen zu Optionen für die Joberstellung