Questa pagina descrive i log disponibili per le app App Engine e come scrivere, correlare e visualizzare le voci di log.
App Engine raccoglie due tipi di log:
Log 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 app: le voci di log emesse da un'app App Engine in base alle voci di log scritte in un framework o file supportato.
App Engine invia automaticamente sia i log delle richieste che i log dell'app all'agente Cloud Logging.
Scrittura log delle app
App Engine emette automaticamente i log per le richieste inviate all'app, quindi non è necessario scrivere log delle richieste. Questa sezione spiega come scrivere i log delle app.
Quando scrivi i log dell'app dall'app App Engine, Cloud Logging estrae automaticamente i log, a condizione che siano scritti con i seguenti metodi:
Integra con Cloud Logging
Puoi integrare la tua app App Engine con Cloud Logging. Questo approccio consente di utilizzare tutte le funzionalità offerte da Cloud Logging e richiede solo poche righe di codice specifico di Google.
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 scrivere
log strutturati solo utilizzando stdout/stderr
. Inoltre, puoi inviare stringhe di testo a
stdout
e stderr
. Per impostazione predefinita, il payload di log è una stringa di testo archiviata nel campo textPayload
della voce di log. Le stringhe
vengono visualizzate come messaggi in Esplora log, nella riga di comando e nell'API Cloud Logging e sono associate al servizio App Engine
e alla versione che le ha emesse.
Per ottenere un valore maggiore dai log, puoi filtrare queste stringhe in Esplora log in base al livello di gravità. Per filtrare queste stringhe, devi formattarle come
dati strutturati.
Per farlo, scrivi i log sotto forma di un'unica riga di JSON serializzato. App Engine rileva e analizza questa riga JSON serializzata e la inserisce nel campo jsonPayload
della voce di log anziché in textPayload
.
Nell'ambiente standard di App Engine, la scrittura di log strutturati in stdout
e stderr
non viene conteggiata nella quota al minuto 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 eliminati da jsonPayload
e scritti nel campo corrispondente nella LogEntry generata, come descritto nella documentazione relativa ai campi speciali.
Ad esempio, se JSON include una proprietà severity
, viene rimossa da jsonPayload
e viene visualizzata al suo posto come severity
della voce di log.
La proprietà message
viene utilizzata come testo visualizzato principale della voce di log, se presente.
Correlare i log delle richieste con i log delle app
Dopo aver formattato le voci come oggetto JSON e fornito metadati specifici, puoi abilitare il filtro e la correlazione con i log delle richieste. Per correlare le voci di log delle richieste con quelle dell'app, è necessario l'identificatore di traccia della richiesta. Segui le istruzioni per correlare i messaggi di log:
- Estrai l'identificatore traccia dall'intestazione della richiesta
X-Cloud-Trace-Context
. - Nella voce di log strutturato, scrivi l'ID in un campo denominato
logging.googleapis.com/trace
. Per maggiori informazioni sull'intestazioneX-Cloud-Trace-Context
, consulta Forzare 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 di Cloud Logging nella console Google Cloud.
- Utilizza Google Cloud CLI per visualizzare i log mediante gcloud.
- Leggi i log in modo programmatico utilizzando vari metodi.
Usa Esplora log
Puoi visualizzare i log delle tue app e delle richieste utilizzando Esplora log:
Vai a Esplora log nella console Google Cloud:
Seleziona un progetto Google Cloud esistente nella parte superiore della pagina.
In Tipo di risorsa, seleziona Applicazione GAE.
Puoi filtrare Esplora log in base al servizio App Engine, alla versione e ad altri criteri. Puoi anche cercare voci specifiche nei log. Per maggiori dettagli, consulta Utilizzo di Esplora log.
Se invii voci di testo semplici all'output standard, non puoi utilizzare il visualizzatore log per filtrare le voci delle app in base alla gravità, né vedere quali log delle app corrispondono a richieste specifiche. Puoi comunque utilizzare altri tipi di filtri in Esplora log, ad esempio testo e timestamp.
Visualizza le voci di log correlate in Esplora log
In Esplora log, per visualizzare le voci di log figlio correlate a una voce di log padre, espandi la voce di log.
Ad esempio, per visualizzare voce di log delle richieste di App Engine e le voci dei log dell'applicazione, segui questi passaggi:
Nel pannello di navigazione della console Google Cloud, seleziona Logging, quindi Esplora log:
In Tipo di risorsa, seleziona Applicazione GAE.
Per visualizzare e correlare i log delle richieste, in Nome log, seleziona request_log. In alternativa, per eseguire la correlazione in base ai log delle richieste, fai clic su Correla per e seleziona request_log.
Nel riquadro Risultati delle query, per espandere una voce di log, fai clic su Espandi. Al momento dell'espansione, ogni log delle richieste mostrerà i log dell'app associati.
Dopo aver creato un filtro per i log, ogni log delle richieste mostra i log dell'app corrispondenti come log figlio. Esplora log riesce a raggiungere questo obiettivo mettendo in correlazione il campo trace
nei log dell'app con un determinato log delle richieste, supponendo che l'applicazione utilizzi la libreria google-cloud-logging
.
La seguente immagine mostra i log delle app raggruppati in base al campo trace
:
Utilizzare Google Cloud CLI
Per visualizzare i log di App Engine dalla riga di comando, utilizza il 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:
- Utilizza un sink di log in Pub/Sub e uno script per il pull da Pub/Sub.
- Chiama l'API Cloud Logging tramite la libreria client per il tuo linguaggio di programmazione.
- Chiama direttamente gli endpoint REST dell'API Cloud Logging.
Prezzi, quote e criteri di conservazione dei log
Per informazioni sui prezzi applicabili ai log delle richieste e delle app, consulta i prezzi di Cloud Logging.
Per il criterio di conservazione dei log e la dimensione massima delle voci di log, consulta Quote e limiti. Se vuoi archiviare i log per un periodo più lungo, puoi esportarli in Cloud Storage. Puoi anche esportare i log in BigQuery e Pub/Sub per ulteriore elaborazione.
Gestione dell'utilizzo delle risorse di log
Puoi controllare la quantità di attività di logging nei log dell'app scrivendo più o meno voci nel codice dell'app. I log delle richieste vengono creati automaticamente, quindi per gestire il numero di voci di log delle richieste associate alla tua app, utilizza la funzionalità di esclusione dei log di Cloud Logging.
Problemi noti
Di seguito sono riportati alcuni problemi di logging nei runtime di seconda generazione:
A volte le voci del log dell'app non sono correlate al log delle richieste. Questo avviene la prima volta che l'app riceve una richiesta e ogni altra volta che App Engine scrive messaggi di stato nel log dell'app. Per saperne di più, consulta https://issuetracker.google.com/issues/138365527.
Quando esegui il routing dei log dal sink di log a Cloud Storage, la destinazione Cloud Storage contiene solo log delle richieste. App Engine scrive i log delle app in cartelle diverse.
BigQuery non è in grado di importare i log a causa del campo
@type
nei log delle richieste. Ciò interrompe il rilevamento automatico dello schema, poiché BigQuery non consente l'utilizzo di@type
nei nomi dei campi. Per risolvere il problema, devi definire manualmente lo schema e rimuovere il campo@type
dai 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 il tempo di CPU e, di conseguenza, il thread in background viene arrestato. Il tempo di elaborazione dei log è in ritardo. 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 Cloud Logging per l'utilizzo di gRPC. Con gRPC, i log vengono inviati immediatamente a Cloud Logging. Tuttavia, ciò può aumentare i limiti richiesti per la CPU.
- Invia messaggi di log a Cloud Logging utilizzando
stdout/stderr
. Questa pipeline si trova all'esterno dell'istanza di App Engine e non viene limitata.
Passaggi successivi
- Consulta Monitoraggio e latenza degli avvisi per scoprire come utilizzare Cloud Logging per visualizzare i log per il debug degli errori e come utilizzare Cloud Trace per comprendere la latenza delle app.