Scrittura e visualizzazione dei log

Questa pagina descrive i log disponibili per le app di App Engine e scrivere, correlare e visualizzare le voci di log.

App Engine raccoglie due tipi di log:

  • Log delle richieste:log delle richieste inviate alla tua app. Per impostazione predefinita, App Engine emette automaticamente una voce di log per ogni richiesta HTTP ricevuta da un'app.

  • Log dell'app: voci di log emesse da un'app di App Engine in base alle voci di log scritte in un file o framework supportato.

App Engine invia automaticamente sia i log delle richieste sia i log delle app Agente Cloud Logging.

Scrittura dei log delle app

App Engine emette automaticamente i log per le richieste inviate alla tua app, non è necessario scrivere i log delle richieste. Questa sezione illustra come scrivere i log dell'app.

Quando scrivi log dall'app App Engine, i log vengono prelevati automaticamente da Cloud Logging, purché i log vengano scritti utilizzando seguenti metodi:

Integra con Cloud Logging

Puoi integrare la tua app App Engine con Cloud Logging. Questo approccio ti consente di utilizzare tutte le funzionalità offerte da Cloud Logging e richiede solo poche righe di codice specifico di Google.

Puoi scrivere i log in Cloud Logging da applicazioni Python utilizzando Gestore di logging Python o utilizzando direttamente la libreria client dell'API Cloud Logging per Python. Quando utilizzi il gestore di logging Python standard, devi collegare un file Cloud Logging. al gestore radice Python. Per saperne di più, consulta la sezione Configurare Cloud Logging per Python.

Scrivi log strutturati in stdout e stderr

Per impostazione predefinita, App Engine utilizza la libreria client di Cloud Logging per inviare i log. Tuttavia, questo metodo non supporta il logging strutturato. Puoi solo scrivere log strutturati utilizzando stdout/stderr. Inoltre, puoi inviare stringhe di testo stdout e stderr. Per impostazione predefinita, il payload di log stringa di testo memorizzata nel campo textPayload della voce di log. Le stringhe vengono visualizzati come messaggi in Esplora log, nella riga di comando e API Cloud Logging e sono associati al servizio App Engine e la versione da cui sono stati generati.

Per ottenere più valore dai log, puoi filtrare queste stringhe in Esplora log per livello di gravità. Per filtrare queste stringhe, devi formattare le stringhe come dati strutturati. Per farlo, scrivi i log sotto forma di singolo di codice JSON serializzato. App Engine rileva e analizza questa riga JSON serializzata, e lo inserirà nel campo jsonPayload della voce di log anziché in textPayload.

I seguenti snippet dimostrano la scrittura di questi log strutturati.

# Uncomment and populate this variable in your code:
# PROJECT = 'The project ID of your Cloud Run service';

# Build structured log messages as an object.
global_log_fields = {}

# Add log correlation to nest all log messages.
# This is only relevant in HTTP-based contexts, and is ignored elsewhere.
# (In particular, non-HTTP-based Cloud Functions.)
request_is_defined = "request" in globals() or "request" in locals()
if request_is_defined and request:
    trace_header = request.headers.get("X-Cloud-Trace-Context")

    if trace_header and PROJECT:
        trace = trace_header.split("/")
        global_log_fields[
            "logging.googleapis.com/trace"
        ] = f"projects/{PROJECT}/traces/{trace[0]}"

# Complete a structured log entry.
entry = dict(
    severity="NOTICE",
    message="This is the default display field.",
    # Log viewer accesses 'component' as jsonPayload.component'.
    component="arbitrary-property",
    **global_log_fields,
)

print(json.dumps(entry))

Nell'ambiente standard App Engine, scrivi log strutturati in stdout e stderr non vengono conteggiate ai fini della quota al minuto delle richieste di importazione dei log nell'API Cloud Logging.

Campi JSON speciali nei messaggi

Quando fornisci un log strutturato come dizionario JSON, alcuni campi speciali vengono rimosse da jsonPayload e vengono scritte nel campo corrispondente in la generazione LogEntry come descritto in la documentazione per i campi speciali.

Ad esempio, se il file JSON include una proprietà severity, viene rimossa da jsonPayload e viene visualizzato come severity della voce di log. La proprietà message viene utilizzata come testo visualizzato principale della voce di log, se presente.

Correla i log delle richieste con i log delle app

Per impostazione predefinita, i log non sono correlati ai runtime di seconda generazione. Questi richiedono l'uso delle librerie client di Cloud. Queste librerie non che supportano la nidificazione e richiedono la correlazione dei log.

Usa il modulo di logging in Python

Per aggiungere la correlazione della richiesta ai log dell'app registrati dal modulo di logging di Python, configurare la libreria client di Cloud Logging.

Quando esegui il metodo client.setup_logging() all'avvio dell'applicazione, questo metodo aggiunge il campo trace e i dettagli della richiesta HTTP ai log dell'app scritti dal modulo logging Python come logging.info() e logging.error(). Questi vengono indirizzati a logs/python.

App Engine aggiunge anche questo campo trace al log delle richieste associato, che consente di visualizzare le voci di log correlate in Esplora log.

Utilizza stdout e stderr

Dopo aver formattato le voci come oggetto JSON e aver fornito metadati specifici, puoi abilitare l'applicazione di filtri e la correlazione con i log delle richieste. Per correlare le voci di log della richiesta con quelle dell'app, è necessario il valore identificatore della traccia. Segui le istruzioni per correlare i messaggi di log:

  1. Estrai l'identificatore della traccia dall'intestazione della richiesta X-Cloud-Trace-Context.
  2. Nella voce di log strutturato, scrivi l'ID in un campo denominato logging.googleapis.com/trace. Per ulteriori informazioni sull'intestazione X-Cloud-Trace-Context, consulta Forza il tracciamento di una richiesta.

Per visualizzare i log correlati, consulta Visualizzare le voci di log correlate in Esplora log.

Visualizza i log

Puoi visualizzare i log delle app e delle richieste in diversi modi:

Utilizza Esplora log

Puoi visualizzare i log delle app e delle richieste utilizzando il Esplora log:

  1. Vai a Esplora log nella console Google Cloud:

    Vai a Esplora log

  2. Seleziona un progetto Google Cloud esistente nella parte superiore della pagina.

  3. In Tipo di risorsa, seleziona Applicazione GAE.

Puoi filtrare Esplora log per servizio, versione e altri criteri. Puoi anche cercare voci specifiche nei log. Consulta Utilizzare Esplora log per maggiori dettagli.

Se invii semplici voci di testo all'output standard, non puoi utilizzare Visualizzatore per filtrare le voci dell'app in base alla gravità, né visualizzare quali log dell'app corrispondenti a richieste specifiche. Puoi continuare a utilizzare altri tipi di filtri in Esplora log, come testo e timestamp.

Visualizza le voci di log correlate in Esplora log

In Esplora log, per visualizzare le voci di log figlio correlate a un'istanza voce di log ed espandila.

Ad esempio, per visualizzare la voce del log delle richieste di App Engine e il log dell'applicazione procedi nel seguente modo:

  1. Nel pannello di navigazione della console Google Cloud, seleziona Logging, quindi seleziona Esplora log:

    Vai a Esplora log

  2. In Tipo di risorsa, seleziona Applicazione GAE.

  3. Per visualizzare e correlare i log delle richieste, in Nome log seleziona request_log. In alternativa, Per correlare per log delle richieste, fai clic su Correla per e seleziona request_log.

    Correlazione dei log

  4. Nel riquadro Risultati delle query, per espandere una voce di log, fai clic su Espandi. All'espansione, ogni richiesta registra verranno visualizzati i log delle app associati.

Dopo aver creato un filtro per i log, ogni log delle richieste mostra i log corrispondenti i log delle app come log secondari. Esplora log raggiunge questo risultato mettendo in correlazione il campo trace nei log dell'app e un determinato log delle richieste, presupponendo che l'applicazione usa la libreria google-cloud-logging.

L'immagine seguente mostra i log delle app raggruppati in base al campo trace:

Le voci di log dell'app sono nidificate nella voce di log delle richieste.

Utilizza Google Cloud CLI

Per visualizzare i log di App Engine dalla riga di comando, utilizza seguente comando:

gcloud app logs tail

Per ulteriori informazioni, consulta gcloud app logs tail.

Lettura dei log in modo programmatico

Se vuoi leggere i log in modo programmatico, puoi utilizzare uno di questi metodi:

Prezzi, quote e criterio di conservazione dei log

Per informazioni sui prezzi applicabili sia ai log delle richieste che delle app, consulta Prezzi per Cloud Logging.

Per il criterio di conservazione dei log e la dimensione massima delle voci di log, consulta Quote e limiti. Se vuoi conservare i log più a lungo puoi esportare i log in Cloud Storage. Puoi anche esportare i log in BigQuery e Pub/Sub per per ulteriore elaborazione.

Gestione dell'utilizzo delle risorse di log

Puoi controllare la quantità di attività di logging dai log delle app scrivendo più o meno voci dal codice della tua app. Log delle richieste creati automaticamente, quindi per gestire il numero di voci di log delle richieste associate la tua app, utilizza la funzionalità di esclusione dei log da Cloud Logging.

Problemi noti

Di seguito sono riportati alcuni problemi di logging nei runtime di seconda generazione:

  • A volte le voci di log dell'app non sono correlate al log delle richieste. Questo accade la prima volta che l'app riceve una richiesta e in qualsiasi altro momento App Engine scrive messaggi di stato nel log dell'app. Per ulteriori informazioni le informazioni, vedi https://issuetracker.google.com/issues/138365527.

  • Quando esegui il routing dei log dal sink di log a Cloud Storage, contiene solo i log delle richieste. App Engine scrive i log delle app cartelle diverse.

  • BigQuery non riesce a importare i log a causa del campo @type nei log delle richieste. Questo interrompe il rilevamento automatico dello schema, poiché BigQuery non consente @type nel campo names. Per risolvere questo problema, devi definire manualmente lo schema e rimuovere Campo @type dei log delle richieste.

  • Se utilizzi le API REST di logging, un thread in background scrive i log in Cloud Logging. Se il thread principale non è attivo, l'istanza non riceve tempo di CPU, il che causa che il thread in background venga interrotto. Il tempo di elaborazione del log è in ritardo. Alle ore A un certo punto, l'istanza viene rimossa e tutti i log non inviati andranno persi. Per evitare di perdere i log, utilizza una delle seguenti opzioni:

    • Configura l'SDK di Cloud Logging per l'utilizzo di gRPC. Con gRPC, i log vengono inviati e Cloud Logging immediatamente. Tuttavia, questo può aumentare i limiti di CPU richiesti.
    • Invia messaggi di log a Cloud Logging utilizzando stdout/stderr. Questa pipeline è all'esterno dell'istanza di App Engine e non viene limitata.

Passaggi successivi

  • Vedi Monitorare la latenza degli avvisi. scoprire come utilizzare Cloud Logging per visualizzare i log per gli errori di debug e come utilizzare Cloud Trace per comprendere la latenza delle app.