Lettura e scrittura dei log delle applicazioni

Panoramica

Quando viene inviata una richiesta alla tua app, viene automaticamente scritto un log delle richieste in App Engine. Durante la gestione della richiesta, l'app può anche scrivere log delle applicazioni. In questa pagina imparerai a scrivere i log delle applicazioni dalla tua applicazione, come visualizza logging nel console Google Cloud e come comprendere i dati dei log delle richieste che App Engine scrive durante la richiesta.

Per informazioni sul download dei dati di log, consulta Panoramica delle esportazioni dei log.

Log delle richieste e log delle applicazioni

Esistono due categorie di dati di log: log delle richieste e log delle applicazioni. Un log delle richieste viene scritto automaticamente da App Engine per ogni richiesta gestita dalla tua app e contiene informazioni come l'ID progetto, la versione HTTP e così via.

Scrittura dei log delle applicazioni

Scrivi i log utilizzando l'API PHP Logs quando chiami la funzione PHP integrata syslog() Ad esempio:

if (authorizedUser()) {
  echo '<p>Welcome authorized user</p>';
  syslog(LOG_INFO, 'Authorized access');
} else {
  echo 'Go away unauthorized user<p />';
  syslog(LOG_WARNING, "Unauthorized access");
}

Non è necessario chiamare openlog() o closelog() prima di scrivere a syslog. Le chiamate a queste funzioni verranno ignorate.

Formato dell'URL del log nella console Google Cloud

Consulta il seguente URL di esempio per un esempio del formato dell'URL del log nella console Google Cloud:

https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100

Lettura dei log nella console

Per visualizzare i log scritti dalle app in esecuzione nell'ambiente standard, utilizza Esplora log.

Un tipico log di App Engine contiene dati nell' formato di log combinato Apache, insieme ad alcuni campi speciali di App Engine, come mostrato nel seguente log di esempio:

192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=

Informazioni sui campi del log delle richieste

Nella tabella seguente sono elencati i campi in ordine di occorrenza insieme a una descrizione:

Ordine sul campo Nome campo Sempre presente? Descrizione
1 Indirizzo client Indirizzo IP client. Esempio: 192.0.2.0
2 Identità RFC 1413 No Identità RFC 1413 del client. Si tratta quasi sempre del carattere -
3 Utente No Presente solo se l'app utilizza l'API Users e l'utente ha eseguito l'accesso. Questo valore è il "nickname" parte dell'Account Google, ad esempio, se l'Account Google è test@example.com, il nickname registrato in questo campo è test.
4 Timestamp Timestamp della richiesta. Esempio: [27/Jun/2014:09:11:47 -0700]
5 Stringa di query richiesta Prima riga della richiesta, contenente metodo, percorso e versione HTTP. Esempio: GET / HTTP/1.1
6 Codice di stato HTTP Codice di stato HTTP restituito. Esempio: 200
7 Dimensione della risposta Dimensioni della risposta in byte. Esempio: 414
8 Percorso referrer No Se non è presente alcun referrer, il log non contiene alcun percorso, ma solo -. Esempio di percorso del referrer: "http://www.example.com/index.html".
9 User-agent Identifica il browser e il sistema operativo con il server web. Esempio: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
10 Nome host Il nome host utilizzato dal client per connettersi all'applicazione App Engine. Esempio : (1-dot-calm-sylph-602.appspot.com)
11 Tempo reale Tempo di clock totale in millisecondi impiegato da App Engine per soddisfare la richiesta. Questa durata non include il tempo trascorso tra il client e il server che esegue l'istanza della tua applicazione. Esempio: ms=195.
12 Millisecondi CPU Millisecondi CPU necessari per soddisfare la richiesta. Si tratta del numero di millisecondi spesi dalla CPU che esegue effettivamente il codice dell'applicazione, espresso in termini di CPU Intel x86 di base da 1,2 GHz. Se la CPU effettivamente utilizzata è più veloce della base di riferimento, i millisecondi di CPU possono essere maggiori del tempo di clock effettivo definito sopra. Esempio: cpu_ms=42
13 Codice di uscita No Presente solo se l'istanza si arresta dopo aver ricevuto la richiesta. Nel formato exit_code=XXX, dove XXX è un numero di 3 cifre corrispondente al motivo per cui l'istanza è stata arrestata. I codici di uscita non sono documentati, poiché il loro scopo principale è aiutare Google a individuare e risolvere i problemi.
14 Costo stimato OBSOLETO. Costo stimato di 1000 richieste come questa, in $. Esempio: cpm_usd=0.000046
15 Nome coda No Il nome della coda di attività utilizzata. Presente solo se la richiesta ha utilizzato una coda di attività. Esempio: queue_name=default
16 Nome attività No Il nome dell'attività eseguita nella coda di attività per questa richiesta. Presente solo se la richiesta ha comportato l'accodamento di un'attività. Esempio: task_name=7287390692361099748
17 Coda in attesa No Presente solo se una richiesta è rimasta in attesa per un po' di tempo in una coda in attesa. Se nei log sono presenti molte istanze di questo tipo e/o i valori sono alti, potrebbe significare che sono necessarie più istanze per gestire il traffico. Esempio: pending_ms=195
18 Caricamento della richiesta in corso... No Presente solo se la richiesta è una richiesta di caricamento. Ciò significa che è stato necessario avviare un'istanza. Idealmente, le tue istanze dovrebbero essere attive e in stato integro il più a lungo possibile, gestire un numero elevato di richieste prima di essere riciclate e dover essere riavviate. Ciò significa che non dovresti vederne troppi nei tuoi log. Esempio: loading_request=1.
19 Istanza Identificatore univoco per l'istanza che gestisce la richiesta. Esempio: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d
20 Versione L'attuale versione di release di App Engine utilizzata nell'ambiente di produzione di App Engine:

Quote e limiti

La tua applicazione è interessata dai seguenti problemi quote relative ai log:

  • Dati di log recuperati tramite l'API Logs.
  • Allocazione e conservazione per l'importazione dei log.

Quota per i dati recuperati

I primi 100 megabyte di dati di log recuperati al giorno tramite le chiamate API Logs sono gratuiti. I dati che superano i 100 MB comportano addebiti di 0,12 $/GB.

Allocazione per l'immissione dei log

Il logging per le app di App Engine è fornito da Google Cloud Observability. Consulta i prezzi di Google Cloud Observability per ulteriori informazioni su costi e limiti di logging. Per l'archiviazione a lungo termine dei log, può esportare i log da Google Cloud Observability in Cloud Storage, BigQuery e Pub/Sub.