Présentation
Lorsqu'une requête est envoyée à votre application, un journal de requêtes est automatiquement écrit par App Engine. Pendant le traitement de la requête, votre application peut également écrire des journaux d'application. Cette page explique comment écrire des journaux d'application depuis votre application, comment consulter la journalisation dans Google Cloud Console et comment interpréter les données du journal de requêtes écrit par App Engine au moment de la requête.
Pour savoir en détail comment télécharger des données de journal, consultez la page Présentation des exportations de journaux.
Journaux d'application et journaux de requêtes
Il existe deux catégories de données de journal : les journaux de requêtes et les journaux d'application. Un journal de requête est automatiquement écrit par App Engine pour chaque requête traitée par votre application. Il contient des informations telles que l'ID de projet, la version HTTP, etc.
Écrire des journaux d'application
Vous écrivez des journaux à l'aide de l'API PHP Logs lorsque vous appelez la fonction PHP intégrée syslog()
. Exemple :
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");
}
Vous n'avez pas besoin d'appeler openlog()
ou closelog()
avant d'écrire dans syslog
. Les appels à ces fonctions sont ignorés.
Format d'URL de journal dans Google Cloud Console
Voici un exemple d'URL présentant le format d'URL de journal tel qu'il apparaît dans la console Google Cloud :
https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100
Lire des journaux dans la console
Pour afficher les journaux écrits par les applications exécutées dans l'environnement standard, utilisez l'explorateur de journaux.
Un journal classique d'App Engine contient des données au format de journal combiné Apache, ainsi que des champs App Engine spéciaux, comme le montre l'exemple de journal ci-dessous :
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=
Comprendre les champs de journal de requêtes
Le tableau suivant répertorie les champs par ordre d'occurrence et leur description :
Numéro de champ | Nom du champ | Toujours présent ? | Description |
---|---|---|---|
1 | Client address | Oui | Adresse IP du client. Exemple : 192.0.2.0 |
2 | RFC 1413 identity | Non | Identité RFC 1413 du client, presque toujours le caractère - |
3 | User | Non | Présent uniquement si l'application utilise l'API Users et que l'utilisateur est connecté. Cette valeur correspond à la partie "pseudo" du compte Google. Par exemple, si le compte Google est test@example.com , le pseudo enregistré dans ce champ est test . |
4 | Timestamp | Oui | Horodatage de la requête. Exemple : [27/Jun/2014:09:11:47 -0700] |
5 | Request querystring | Oui | Première ligne de la requête contenant la méthode, le chemin et la version HTTP. Exemple : GET / HTTP/1.1 |
6 | HTTP Status Code | Oui | Code d'état HTTP renvoyé. Exemple : 200 |
7 | Response size | Oui | Taille de réponse en octets. Exemple : 414 |
8 | Referrer path | Non | En l'absence d'URL de provenance, le journal ne contient aucun chemin, seulement le caractère - . Exemple de chemin de provenance : "http://www.example.com/index.html" . |
9 | User-agent | Oui | Identifie le navigateur et le système d'exploitation sur le serveur Web. Exemple : Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 |
10 | Hostname | Oui | Nom d'hôte utilisé par le client pour se connecter à l'application App Engine. Exemple : (1-dot-calm-sylph-602.appspot.com ) |
11 | Wallclock time | Oui | Temps total en millisecondes passé par App Engine sur la requête. Cette durée n'inclut pas le temps passé entre le client et le serveur qui exécute l'instance de votre application. Exemple : ms=195 . |
12 | CPU milliseconds | Oui | Nombre de millisecondes nécessaires au processeur pour répondre à la requête, Il s'agit du temps en millisecondes passé par le processeur à exécuter le code de votre application, pour un processeur de référence Intel x86 de 1,2 GHz. Si le processeur utilisé est plus rapide que celui de référence, cette valeur peut être supérieure au temps total réel défini précédemment. Exemple : cpu_ms=42 |
13 | Exit code | Non | Présent uniquement si l'instance a été arrêtée après réception de la requête. Au format exit_code=XXX , où XXX est un nombre à trois chiffres correspondant au motif d'arrêt de l'instance. Les codes de sortie ne sont pas documentés, car ils sont principalement destinés à aider Google à détecter et à résoudre les problèmes. |
14 | Estimated cost | Oui | OBSOLÈTE. Coût estimé de 1 000 requêtes de ce type, en USD. Exemple : cpm_usd=0.000046 |
15 | Queue name | Non | Nom de la file d'attente de tâches utilisée. Présent uniquement si la requête utilise une file d'attente de tâches. Exemple : queue_name=default |
16 | Task name | Non | Nom de la tâche exécutée dans la file d'attente de tâches de cette requête. Présent uniquement si la requête entraîne la mise en file d'attente d'une tâche. Exemple : task_name=7287390692361099748 |
17 | Pending queue | Non | Présent uniquement si une requête a passé un certain temps dans une file d'attente. Si ces requêtes sont nombreuses dans vos journaux et/ou si les valeurs sont élevées, cela peut indiquer qu'il vous faut davantage d'instances pour distribuer votre trafic. Exemple : pending_ms=195 |
18 | Loading request | Non | Présent uniquement s'il s'agit d'une requête de chargement, c'est-à-dire qu'une instance a dû être démarrée. Dans l'idéal, vos instances doivent être opérationnelles et en bon état le plus longtemps possible afin de répondre à un grand nombre de requêtes avant d'être recyclées et de devoir être redémarrées. Ces requêtes ne devraient donc pas figurer en nombre dans vos journaux. Exemple : loading_request=1 . |
19 | Instance | Oui | Identifiant unique de l'instance qui gère la requête. Exemple : instance=00c61b117cfeb66f973d7df1b7f4ae1f064d |
20 | Version | Oui | Version actuelle d'App Engine utilisée en production : |
Quotas et limites
Votre application est affectée par les quotas de journaux suivants :
- Données de journaux récupérées via l'API Logs
- Quota d'ingestion et de conservation de journaux
Quota de données récupérées
Les 100 premiers mégaoctets de données de journaux récupérées par jour via les appels de l'API Logs sont gratuits. Les volumes de données supérieurs à 100 mégaoctets entraînent des frais de 0,12 $/Go.
Attribution d'un quota d'ingestion de journaux
La journalisation des applications App Engine est fournie par Google Cloud Observability. Pour en savoir plus sur les coûts et les limites de journalisation, consultez les Tarifs de Google Cloud Observability. Pour le stockage à long terme des journaux, vous pouvez exporter les journaux de Google Cloud Observability vers Cloud Storage, BigQuery et Pub/Sub.