Scrivere log delle attività

Questo documento descrive come scrivere i log delle attività e come crea ed esegui un job batch con i log delle attività.

Se il logging è abilitato per un job, i log delle attività vengono generati dai messaggi che la stampa degli elementi eseguibili del job sia in fase di esecuzione. Configurando i runnable per la scrittura dei log delle attività, puoi trovare informazioni personalizzate in Cloud Logging, che possono aiutarti a semplificare i job per l'analisi e la risoluzione dei problemi. Per scoprire di più sui log, consulta Analisi di un job utilizzando i log.

Prima di iniziare

  1. Se non hai mai utilizzato Batch, consulta la guida introduttiva all'utilizzo di Batch e attivalo completando i prerequisiti per progetti e utenti.
  2. Per ottenere le autorizzazioni necessarie per creare un job che scriva i log, chiedi all'amministratore di concederti seguenti ruoli IAM:

    Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

    Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Crea ed esegui un job contenente log delle attività

Per creare ed eseguire un job che deve avere i log delle attività, segui questi passaggi quando crei il job:

  1. Abilita i log per il job. Ciò consente eventuali log scritti per la generazione del job.
  2. Per ogni log delle attività che vuoi che il job abbia, aggiungi un comando che scriva un log delle attività in un file eseguibile. Quando il job viene eseguito, il log delle attività generate ogni volta che viene eseguito un comando per scrivere un log delle attività.

    Per scoprire come scrivere i log delle attività, consulta Scrivi i log delle attività in questo documento.

Scrittura dei log delle attività

Viene scritto un log delle attività per i contenuti stampati dagli elementi eseguibili di un job nei Stream con output standard (stdout) o stream con errore standard (stderr) durante l'esecuzione. Ad esempio, puoi scrivere i log delle attività utilizzando Comando echo. La struttura del log delle attività risultante varia in base alla formattazione contenuti stampati. In particolare, puoi scrivere ciascun log delle attività utilizzando uno dei le seguenti opzioni:

Scrivere un log non strutturato stampando una stringa

I log non strutturati consentono di definire un messaggio, ovvero una stringa visualizzata il campo textPayload del log.

Per scrivere un log non strutturato, stampa una stringa non formattata come illustrato nel le sezioni seguenti.

Esempio di log non strutturato

Ad esempio, supponiamo che tu voglia un log delle attività che contenga quanto segue stringa:

MESSAGE

La stampa di questa stringa di esempio genera un log delle attività simile al seguente:

insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...

Sostituisci quanto segue:

  • MESSAGE: il messaggio, ovvero una stringa che riassume lo scopo del log delle attività, ad esempio, The summary for a task log..
  • PROJECT_ID: il valore ID progetto del tuo progetto.

Puoi stampare una stringa utilizzando diversi metodi, ad esempio includendo seguente comando echo in una funzione eseguibile:

echo MESSAGE

Per esempi completi di job che utilizzano il comando echo per scrivere per i log delle attività non strutturati, Crea ed esegui un job di base.

Scrivere un log strutturato stampando un oggetto JSON

I log strutturati consentono di definire quanto segue:

Per scrivere un log strutturato, stampa un oggetto JSON. Le sezioni seguenti mostrano come definire un log con alcuni dei campi standard e personalizzati. Se vuoi imparare a definire un log con eventi di stato personalizzati, vedi anche Configurare gli eventi di stato personalizzati.

Esempio di log strutturato

Ad esempio, supponiamo che tu voglia un log delle attività che contenga le informazioni seguente oggetto JSON, che definisce un messaggio, la gravità e due campi personalizzati.

{
  "message": "MESSAGE"
  "severity": "SEVERITY"
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
}

La stampa di questo oggetto JSON genera un log delle attività simile al seguente:

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

Sostituisci quanto segue:

  • MESSAGE: il messaggio, ovvero una stringa che riassume lo scopo del log delle attività, ad esempio, The summary for a task log..
  • SEVERITY: la gravità del log, che puoi da utilizzare come filtro durante la visualizzazione dei log di un job. La gravità deve essere uno degli enumerati LogSeverity convertito in una stringa con solo la prima lettera in maiuscolo. Ad esempio, per l'enum ERROR, specifica Error.
  • CUSTOM_FIELD_1 e CUSTOM_FIELD_2: i nomi dei campi personalizzati per la di un log delle attività, ad esempio custom_field_1 e custom_field_2.
  • CUSTOM_VALUE_1 e CUSTOM_VALUE_2: i valori dei campi personalizzati per log delle attività, che può contenere vari tipi di dati e che potrebbe richiedere virgolette, ad esempio ad esempio "the first custom field" e 2.
  • PROJECT_ID: il valore ID progetto del tuo progetto.

Puoi stampare questo oggetto JSON di esempio utilizzando diversi metodi. Ad esempio, i seguenti esempi mostrano alcuni dei possibili metodi per stampa dell'oggetto JSON di esempio:

  • Stampa una stringa equivalente utilizzando il comando echo.
  • Stampa un dizionario equivalente utilizzando Python.

comando echo

Per stampare l'oggetto JSON di esempio utilizzando il comando echo e un stringa equivalente, includi il seguente comando in una stringa eseguibile:

echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'

Ad esempio, supponi di creare ed eseguire un job con la seguente eseguibile:

"script": {
  "text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}

Il log delle attività risultante è simile al seguente:

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

Per stampare l'oggetto JSON di esempio utilizzando Python e un oggetto equivalente. dizionario, includi il seguente esempio in un file eseguibile:

#!/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))

Ad esempio, supponi di creare ed eseguire un job con la seguente eseguibile:

"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))"
}

Il log dell'attività risultante è simile al seguente:

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

Passaggi successivi