Aufgabenlogs schreiben

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

  1. 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.
  2. 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:

    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.

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:

  1. Aktivieren Sie Logs für den Job. Dadurch können Sie alle Logs, die für den zu generierenden Job geschrieben wurden.
  2. 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:

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.

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:

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 die ERROR-Enum Error an.
  • CUSTOM_FIELD_1 und CUSTOM_FIELD_2: die Namen der benutzerdefinierten Felder für die Aufgabenlog, z. B. custom_field_1 und custom_field_2.
  • CUSTOM_VALUE_1 und CUSTOM_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" und 2.
  • PROJECT_ID: die Projekt-ID Ihres Projekts.

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