Migrazione a Cloud Logging

Il logging dei runtime di seconda generazione è diverso da quello dei runtime di prima generazione runtime. Una delle principali modifiche quando esegui l'upgrade a runtime più recenti è che il logging preintegrato con App Engine non è supportato nella seconda generazione e i log non sono correlati automaticamente. Se stai eseguendo la migrazione ai runtime di seconda generazione, devi utilizzare lo libreria client di Cloud Logging.

Questa guida descrive come aggiornare l'app per utilizzare Cloud Logging e ottengono quasi le stesse funzionalità di filtro e correlazione dei log che erano disponibili con l'integrazione di logging in App Engine.

Cloud Logging è un sistema di gestione dei log in tempo reale che consente di eseguire l'analisi e il monitoraggio. Cloud Logging raccoglie automaticamente i log dalle risorse Google Cloud. Puoi anche raccogliere i log dalle tue applicazioni, risorse on-premise e risorse di altri cloud provider.

Differenze principali

La tabella seguente illustra le differenze nel logging tra il primo e il primo runtime di seconda generazione:

Runtime di prima generazione Runtime di seconda generazione
Log delle richieste e delle app (chiamati anche log delle applicazioni) App Engine incorpora tutti i log delle app all'interno del log delle richieste. Accedi a i runtime di prima generazione usano l'protoPayload.line.logMessage del log delle richieste per incorporare i log dell'app. App Engine non incorpora all'interno del log delle richieste associato. App Engine omette l'attributo protoPayload.line nella richiesta log. I log delle app vengono indirizzati in base al tuo metodo di logging:
  • stdout e stderr: log delle route come print() a logs/stdout o logs/stderr.
  • del modulo di logging in Python Configurazione del client Cloud Logging: route tutti i log scritti dal modulo di root logging di Python, ad esempio logging.info() e logging.error() per logs/python.
    Se la libreria client di Cloud Logging per Python non è configura la correlazione, il metodo il modulo di root logging viene instradato verso logs/stderr per impostazione predefinita.
Visualizzazione dei log in Esplora log I runtime di prima generazione contengono un solo tipo di log, appengine.googleapis.com/request_log. Quando espandi un log delle richieste, puoi: e vedere i log delle app nidificati. I runtime di seconda generazione includono log di più tipi di log, ad esempio: log delle richieste in appengine.googleapis.com/request_log, stdout, stderr, logs/python e molti altri, a seconda di come la tua app emette log. I log interni di Google sono disponibili anche in /var/log/google_init.log.

Poiché i log delle app non sono correlati automaticamente ai log delle richieste, sono necessari passaggi aggiuntivi per mostrare la visualizzazione nidificata della richiesta e i log delle app in Esplora log. Per ulteriori informazioni, vedi Correlare i log delle richieste con i log delle app e Visualizza i log correlati in Esplora log.
Integrazione di Cloud Trace Integrazione automatica con Cloud Trace per la raccolta dei dati di latenza. Per raccogliere i dati, devi integrare manualmente la tua app con Cloud Trace per la latenza da App Engine. Per ulteriori informazioni, vedi Strumento per Cloud Trace.
Correlazione a livello di errore Registra l'errore generato nei log delle richieste di App Engine con un errore il livello di gravità. Error Reporting mette automaticamente in correlazione questi dettagli nella dashboard di Error Reporting. Per impostazione predefinita, App Engine non integra Error Reporting in per i runtime di seconda generazione. Per configurare l'integrazione del logging con Error Reporting, consulta: Instrumenta le app utilizzando librerie client .
Livello di gravità Esplora log assegna un livello di gravità ai log delle richieste e il livello di gravità riflette la massima gravità di qualsiasi voce di log dell'app che è è correlato alla voce di log della richiesta. Ad esempio, se una richiesta genera nella tua app emettendo una voce di log di avviso, Esplora log mostrerà un'icona di avviso. accanto alla voce di log delle richieste. Quando espandi la voce della richiesta, vedrai voce di log degli avvisi nidificata all'interno della voce della richiesta. Per impostazione predefinita, tutti i log delle richieste hanno una gravità pari a DEFAULT o INFO. Anche se i log delle richieste sono correlati ai log dell'app, Esplora log è configurato per visualizzare i log correlati, I log delle richieste non riflettono la gravità dei log delle app associati.
API Logservice L'API Logservice fa parte dell'SDK dei servizi in bundle. L'API Logservice è stata rimossa dall'SDK dei servizi in bundle. Per ulteriori informazioni, vedi il elenco delle API disponibili.

Prima di avviare la migrazione

  1. Abilita l'API Cloud Logging nel progetto che contiene la tua app.

    Abilitare l'API

  2. Assicurati che la tua app abbia l'autorizzazione per scrivere log.

    Per impostazione predefinita, account di servizio predefinito dispone dell'autorizzazione per scrivere i log.

    Se la tua app utilizza un account di servizio diverso: oppure, se hai modificato le autorizzazioni per l'account di servizio predefinito, assicurati che l'account che utilizzi disponga di logging.logEntries.create l'autorizzazione a scrivere i log.

  3. Acquisisci familiarità con i diversi tipi di log. in App Engine.

Panoramica del processo di migrazione

Per eseguire la migrazione della tua app in modo da utilizzare Cloud Logging:

  1. Installa le librerie client di Cloud per Cloud Logging
  2. Scrivi i log con Cloud Logging
  3. Correlare i log delle richieste con i log delle app
  4. Visualizza i log
  5. Testare l'app

Installazione delle librerie client di Cloud per Cloud Logging

Per installare e aggiornare i file di configurazione, aggiungi le librerie client di Cloud per Cloud Logging al tuo elenco di dipendenze in requirements.txt come il seguente:

google-cloud-logging

Scrivi i log con il modulo di logging Python standard

In ogni file che scrive le voci di log:

  1. Importa la libreria client di Cloud Logging.
  2. Crea un'istanza per il client Cloud Logging.
  3. Esegui il metodo setup_logging() del client Cloud Logging, che collega il suo listener predefinito come gestore di logging per il logger root Python.

Ad esempio:

# Imports the Cloud Logging client library
import google.cloud.logging

# Instantiates a client
client = google.cloud.logging.Client()

# Retrieves a Cloud Logging handler based on the environment
# you're running in and integrates the handler with the
# Python logging module. By default this captures all logs
# at INFO level and higher
client.setup_logging()

Dopo aver collegato il gestore, tutti i log a livello di INFO o superiore emessi nella tua applicazione verranno inviati a Logging per impostazione predefinita:

# Imports Python standard library logging
import logging

# The data to log
text = "Hello, world!"

# Emits the data using the standard logging module
logging.warning(text)

Correla i log delle richieste con i log delle app

Alcune funzionalità disponibili nei runtime di prima generazione, ad esempio: correlazione automatica dei log delle richieste con i log delle app, non sono disponibili nei runtime di seconda generazione.

Le app che utilizzano runtime di seconda generazione possono ottenere un comportamento di logging nidificato simile a quello dei runtime di prima generazione tramite:

  • Configurazione del client Cloud Logging nell'applicazione e relativi log.
  • Viene utilizzato un identificatore trace con stdout e stderr.

Il comportamento di logging nei modelli di prima generazione e i runtime di seconda generazione si differenziano per i seguenti aspetti:

  • Nei runtime di prima generazione, App Engine incorpora tutti i log delle app emessi mentre gestisce una richiesta nel campo protoPayload.line.logMessage del log delle richieste. Questi log sono visibili in Esplora log tramite appengine.googleapis.com/request_log.

    L'immagine seguente mostra i log correlati di richieste e app nei runtime di prima generazione:

    Logging dei runtime di prima generazione

  • Nei runtime di seconda generazione, App Engine omette l'attributo protoPayload.line nel log delle richieste. I contenuti dei log dell'app non sono presenti in i log delle richieste JSON in Esplora log. Viene visualizzato ogni log dell'app separatamente in base al nome log in Esplora log.

    L'immagine seguente mostra log separati per richieste e app nei runtime di seconda generazione:

    Logging dei runtime di seconda generazione

Le sezioni seguenti spiegano come utilizzare il client Cloud Logging o logging strutturato con stdout e stderr per la correlazione dei log.

Usa il modulo di logging in Python

Per aggiungere la correlazione delle richieste ai log dell'app registrati dal modulo di logging di Python, configura il 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, ad esempio 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

Se utilizzi stdout e stderr per scrivere voci di log, queste voci vengono visualizzate in Esplora log. Tuttavia, per abilitare il filtro e la correlazione con i log delle richieste, devi formattare le voci come oggetto JSON e fornire metadati specifici. Per Per saperne di più su questo approccio, consulta Scrivere log strutturati in stdout e stderr. Questo approccio aggiunge l'identificatore di traccia della richiesta nei log dell'applicazione tramite:

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

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:

Testa la tua app

La migrazione va a buon fine se riesci a eseguire il deployment dell'app senza errori. A verifica che Cloud Logging funzioni, segui questi passaggi:

  1. Vai a Esplora log ed espandi una voce di log delle richieste.

    Vai a Esplora log

  2. Assicurati che i log generati dalla tua app durante l'elaborazione di una richiesta sono nidificate all'interno del log delle richieste.

  3. Se tutti gli endpoint dell'app funzionano come previsto, utilizzare la suddivisione del traffico per rallentare aumentare il traffico per la tua app aggiornata. Monitora attentamente l'app per individuare eventuali problemi prima di indirizzare una maggiore quantità di traffico all'app aggiornata.