Übersicht
Wenn eine Anfrage an Ihre Anwendung gesendet wird, erstellt App Engine automatisch ein Anfragelog. Während der Bearbeitung der Anfrage kann die Anwendung auch Anwendungslogs schreiben. Auf dieser Seite erfahren Sie, wie Sie Anwendungslogs aus Ihrer Anwendung heraus schreiben, wie Sie in der Google Cloud Console das Logging aufrufen, und was die Anfragelogdaten bedeuten, die die App Engine während der Anfrage schreibt.
Informationen zum Herunterladen von Logdaten finden Sie in der Übersicht über den Logexport.
Anfragelogs und Anwendungslogs
Es gibt zwei Kategorien von Logdaten: Anfragelogs und Anwendungslogs. Ein Anfrageprotokoll wird von App Engine automatisch für jede Anfrage generiert, die Ihre Anwendung verarbeitet, und enthält Informationen wie die Projekt-ID, die HTTP-Version und andere. Eine vollständige Liste der für Anfrageprotokolle verfügbaren Properties finden Sie unter RequestLogs. Eine Beschreibung der Felder von Anfragelogs finden Sie in der Tabelle der Anfragelogs.
Jedes Anfragelog enthält eine Liste der mit der Anfrage verknüpften Anwendungslogs (AppLogLine), die mit der RequestLogs.getAppLogLines()
-Methode zurückgegeben werden. Jedes Anwendungslog enthält die Uhrzeit, zu der das Log erstellt wurde, den Logeintrag sowie die Logebene.
Anwendungslogs schreiben
Im App Engine Java SDK können Entwickler in Logs folgende Wichtigkeitsstufen festlegen:- SEVERE
- WARNUNG
- INFO
- CONFIG
- FINE
- FINER
- FINEST
Die Protokollebenen INFO
, WARNING
, und SEVERE
werden in den Protokollen ohne spezifische Konfiguration angezeigt. Wenn Sie Ihrer Java-Anwendung weitere Logging-Ebenen hinzufügen möchten, müssen Sie in die Datei appengine-web.xml
Ihres Projekts die entsprechenden Systemattribute einfügen. Eventuell müssen Sie auch die Datei logging.properties
ändern, um die gewünschte Logebene festzulegen. Diese beiden Dateien werden generiert, wenn Sie ein neues App Engine-Java-Projekt mit Maven erstellen. Sie finden diese Dateien an den folgenden Speicherorten:
Zum Hinzufügen anderer Logebenen als INFO
, WARNING
oder SEVERE
bearbeiten Sie die Datei appengine-web.xml
und fügen Sie Folgendes in die <appengine-web-app>
-Tags ein:
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
Die standardmäßige Logebene in logging.properties
ist INFO
. Wenn Sie diese für alle Klassen in Ihrer Anwendung ändern möchten, bearbeiten Sie die Datei logging.properties
entsprechend. Sie können beispielsweise .level = INFO
in .level = WARNING
ändern.
In Ihrem Anwendungscode schreiben Sie Logeinträge mit der java.util.logging.Logger API. Im folgenden Beispiel wird ein Info-Logeintrag geschrieben:
import java.util.logging.Logger; //... public class MyClass { private static final Logger log = Logger.getLogger(MyClass.class.getName()); log.info("Your information log message."); //....
Wenn die Anwendung ausgeführt wird, erfasst App Engine die Nachrichten und stellt sie im Log-Explorer bereit.
URL-Logformat in der Google Cloud Console
Die folgende Beispiel-URL veranschaulicht das URL-Logformat in der Google Cloud Console:
https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100
Logs in der Console lesen
Zum Ansehen der Logs, die von Anwendungen in der Standardumgebung geschrieben wurden, verwenden Sie den Logs Explorer.
Ein typisches App Engine-Log enthält Daten im kombinierten Logformat von Apache sowie einige spezielle App Engine-Felder wie im folgenden Beispiellog gezeigt:
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=
Grundlegendes zu Anfragelogfeldern
In der folgenden Tabelle werden die Felder in der Reihenfolge ihres Auftretens aufgeführt und beschrieben:
Feldreihenfolge | Feldname | Immer angezeigt? | Beschreibung |
---|---|---|---|
1 | Clientadresse | Ja | IP-Adresse des Clients. Beispiel: 192.0.2.0 |
2 | RFC 1413-Identität | Nein | RFC1413-Identität des Clients. Wird fast immer durch das Zeichen - dargestellt. |
3 | Nutzer | Nein | Wird nur angezeigt, wenn die Anwendung die Users API verwendet und der Nutzer angemeldet ist. Dieser Wert ist der Aliasteil des Google-Kontos. Beispiel: Bei einem Google-Konto mit dem Namen test@example.com ist der in diesem Feld erfasste Alias test . |
4 | Zeitstempel | Ja | Zeitstempel der Anfrage. Beispiel: [27/Jun/2014:09:11:47 -0700] |
5 | Anfrage-Abfragestring | Ja | Erste Zeile der Anfrage, die Methode, Pfad und HTTP-Version enthält. Beispiel: GET / HTTP/1.1 |
6 | HTTP-Statuscode | Ja | Zurückgegebener HTTP-Statuscode. Beispiel: 200 |
7 | Größe der Antwort | Ja | Antwortgröße in Byte. Beispiel: 414 |
8 | Verweispfad | Nein | Wenn es keinen Verweis gibt, enthält das Log keinen Pfad, sondern nur - . Beispiel für einen Verweispfad: "http://www.example.com/index.html" . |
9 | User-Agent | Ja | Identifiziert den Browser und das Betriebssystem für den Webserver. Beispiel: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 |
10 | Hostname | Ja | Der Hostname, der vom Client für die Verbindung mit der App Engine-Anwendung verwendet wird. Beispiel: (1-dot-calm-sylph-602.appspot.com ). |
11 | Wanduhrzeit | Ja | Effektive Gesamtzeit in Millisekunden, in der App Engine die Anfrage verarbeitet hat. Dieser Zeitwert beinhaltet nicht die Zeit, die für die Kommunikation zwischen dem Client und dem Server benötigt wurde, auf dem die Instanz Ihrer Anwendung ausgeführt wird. Beispiel: ms=195 . |
12 | CPU-Millisekunden | Ja | CPU-Millisekunden, die zum Ausführen der Anfrage erforderlich waren. Dies ist die Anzahl der Millisekunden, die von der CPU, die den Anwendungscode tatsächlich ausführt, benötigt wurden, ausgedrückt als Vergleich mit einer als Referenz-Intel x86-CPU mit 1,2 GHz. Wenn die tatsächlich verwendete CPU schneller ist als die Referenzversion, kann die Anzahl der CPU-Millisekunden höher sein als die oben definierte tatsächliche Taktzeit. Beispiel: cpu_ms=42 |
13 | Exit-Code | Nein | Wird nur angezeigt, wenn die Instanz nach dem Abrufen der Anfrage heruntergefahren wurde. Die Anzeige erfolgt im Format exit_code=XXX , wobei XXX eine dreistellige Zahl ist, die für die Ursache des Herunterfahrens der Instanz steht. Die Exit-Codes sind nicht dokumentiert, da sie in erster Linie dazu genutzt werden, Google beim Ermitteln und Beheben von Problemen zu unterstützen. |
14 | Geschätzte Kosten | Ja | VERWORFEN. Geschätzte Kosten von 1.000 Anfragen wie dieser, in USD. Beispiel: cpm_usd=0.000046 |
15 | Name der Warteschlange | Nein | Der Name der verwendeten Aufgabenwarteschlange. Wird nur angezeigt, wenn die Anfrage eine Aufgabenwarteschlange verwendet hat. Beispiel: queue_name=default |
16 | Aufgabenname | Nein | Der Name der Aufgabe, die in der Aufgabenwarteschlange für diese Anfrage ausgeführt wurde. Nur vorhanden, wenn die Anfrage dazu geführt hat, dass die Aufgabe in eine Warteschlange aufgenommen wurde. Beispiel: task_name=7287390692361099748 |
17 | Warteschlange für ausstehende Anfragen | Nein | Wird nur angezeigt, wenn sich eine Anfrage für einige Zeit in einer Warteschlange befunden hat. Wenn viele davon in Ihren Logs vorhanden und/oder die Werte hoch sind, kann dies ein Hinweis darauf sein, dass Sie für den anfallenden Traffic mehr Instanzen benötigen. Beispiel: pending_ms=195 |
18 | Ladeanfrage | Nein | Wird nur angezeigt, wenn die Anfrage eine Ladeanfrage ist, durch die eine Instanz gestartet werden musste. Im Idealfall sollten Ihre Instanzen so lange wie möglich aktiv und funktionsfähig sein und eine möglichst große Anzahl von Anfragen verarbeiten, bevor sie anderweitig verwendet und neu gestartet werden müssen. Das bedeutet, dass Sie von diesen Einträgen nicht zu viele in Ihren Logs sehen sollten. Beispiel: loading_request=1 . |
19 | Instanz | Ja | Eindeutige Kennung für die Instanz, die die Anfrage verarbeitet. Beispiel: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d |
20 | Version | Ja | Die aktuelle App Engine-Release-Version, die in der App Engine-Produktionsumgebung verwendet wird: . |
Kontingente und Limits
Für Ihre Anwendung gelten die folgenden logspezifischen Kontingente:
- Kontingent für über die Logs API abgerufene Logdaten
- Kontingent für die Logaufnahme und -aufbewahrung
Kontingent für abgerufene Daten
Die ersten 100 Megabyte der Logdaten, die pro Tag über die Logs API abgerufen werden, sind kostenlos. Daten über 100 Megabyte führen zu einer Gebühr von 0,12 $/GB.
Kontingent für die Logaufnahme
Das Logging für App Engine-Anwendungen erfolgt durch Google Cloud Observability. Weitere Informationen zu den Logging-Kosten und -Limits finden Sie unter Google Cloud Observability – Preise. Für die langfristige Speicherung von Logs können Sie Logs aus Google Cloud Observability nach Cloud Storage, BigQuery und Pub/Sub exportieren.