Auf dieser Seite werden die Logs beschrieben, die bei der Verwendung von Knative-Bereitstellung verfügbar sind, und wie Sie Logs aufrufen und schreiben können.
Knative Serving bietet zwei Arten von Logs:
- Anfragelogs: Logs von Anfragen, die an Knative Serving-Dienste gesendet werden. Diese Logs werden automatisch erstellt.
- Containerlogs: Logs, die von den Containerinstanzen ausgegeben werden, üblicherweise aus Ihrem eigenen Code, und in unterstützte Speicherorte geschrieben werden, wie unter Containerlogs schreiben erläutert.
Logs aktivieren
Für Google Cloud-Logs werden automatisch an Cloud Logging gesendet. Für Google Distributed Cloud müssen Sie zuerst Logs aktivieren.
Logs ansehen
Sie können Logs für Ihren Dienst auf verschiedene Weise aufrufen:
- Die Seite „Knative-Bereitstellung“ in der Google Cloud Console verwenden
- Verwenden Sie den Cloud Logging-Log-Explorer in der Google Cloud Console.
Beide Anzeigemethoden untersuchen dieselben Logs, die in Cloud Logging gespeichert sind. Der Log-Explorer von Cloud Logging bietet jedoch weitere Details und Filterfunktionen.
Logs in Knative Serving ansehen
So rufen Sie Logs auf der Seite „Knative Serving“ auf:
Klicken Sie in der angezeigten Liste auf den gewünschten Dienst.
Klicken Sie auf den Tab LOGS, um die Anfrage- und Containerlogs für alle Überarbeitungen des Dienstes abzurufen. Sie können nach Logschweregrad filtern.
Logs in Cloud Logging ansehen
So rufen Sie Ihre Knative Serving-Logs im Log-Explorer von Cloud Logging auf:
Rufen Sie in der Google Cloud Console den Log-Explorer auf.
Wählen Sie oben auf der Seite ein vorhandenes Google Cloud-Projekt aus oder erstellen Sie ein neues Projekt.
Wählen Sie in den Drop-down-Menüs die Ressource Kubernetes-Container aus.
Weitere Informationen finden Sie unter Log-Explorer verwenden.
Logs in Cloud Code ansehen
Informationen zum Aufrufen Ihrer Logs in Cloud Code finden Sie in den Leitfäden zu IntelliJ und Visual Studio Code.
Logs programmatisch lesen
Wenn Sie die Logs programmatisch lesen möchten, können Sie eine der folgenden Methoden verwenden:
- Verwenden Sie eine Logsenke für Pub/Sub und ein Skript zum Abrufen aus Pub/Sub.
- Rufen Sie die Logging API über die Clientbibliotheken für Ihre Programmiersprache auf.
- Rufen Sie die REST-Endpunkte der Logging API direkt auf.
Containerlogs schreiben
Wenn Sie Logs von Ihrem Dienst aus schreiben, werden sie von Cloud Logging automatisch erfasst, sofern die Logs an einen der folgenden Speicherorte geschrieben werden:
- Standardausgabe- (
stdout
) oder Standardfehlerstreams (stderr
) - syslog (
/dev/log
) - Mit Cloud Logging-Clientbibliotheken erstellte Logs, die für viele gängige Sprachen verfügbar sind
Die meisten Entwickler schreiben Logs über Standardausgabe und Standardfehler.
Die Containerlogs, die in diese unterstützten Speicherorte geschrieben werden, werden automatisch dem Knative Serving-Dienst, der Überarbeitung und dem Speicherort zugeordnet.
Einfachen Text im Vergleich zu strukturiertem JSON in Logs verwenden
Wenn Sie Logs schreiben, können Sie einen einfachen Textstring oder eine einzelne Zeile mit serialisiertem JSON (auch als "strukturierte" Daten bezeichnet) senden. Diese wird von Cloud Logging erfasst und geparst und in jsonPayload
eingefügt. Die einfache Textnachricht wird dagegen in textPayload
eingefügt.
Strukturierte Logs schreiben
Das folgende Snippet zeigt, wie strukturierte Logeinträge geschrieben werden. Außerdem wird gezeigt, wie Lognachrichten mit dem entsprechenden Anfragelog in Beziehung gesetzt werden.
Node.js
Python
Go
Die Struktur für jeden Logeintrag wird vom Typ Entry
bereitgestellt:
Wenn eine Eintragsstruktur protokolliert wird, wird die Methode String
aufgerufen, um sie in das von Cloud Logging erwartete JSON-Format zu überführen:
Java
Aktivieren Sie das JSON-Logging mit Logback und SLF4J, indem Sie den Logstash-JSON-Encoder in Ihrer logback.xml
-Konfiguration aktivieren.
Spezielle JSON-Felder in Nachrichten
Wenn Sie ein strukturiertes Log als JSON-Wörterbuch erstellen, werden bestimmte Felder aus jsonPayload
entfernt und in das entsprechende Feld im erstellten LogEntry geschrieben, wie in der Dokumentation für spezielle Felder erläutert.
Wenn Ihre JSON-Datei beispielsweise das Attribut severity
enthält, wird es aus jsonPayload
entfernt und stattdessen als severity
des Logeintrags angezeigt.
Das Attribut message
wird als Hauptanzeigentext des Logeintrags verwendet, sofern vorhanden.
Weitere Informationen zu speziellen Attributen erhalten Sie unten im Abschnitt Logging-Ressource.
Containerlogs mit einem Anfragelog korrelieren
Im Log-Explorer werden Logs, die mit demselben trace
verknüpft sind, im hierarchischen Format angezeigt. Wenn Sie auf das Dreiecksymbol links neben dem Anfragelogeintrag klicken, werden die mit dieser Anfrage verbundenen Containerlogs unter dem Anfragelog verschachtelt angezeigt.
Containerlogs werden nicht automatisch mit Anfragelogs korreliert, es sei denn, Sie verwenden eine Cloud Logging-Clientbibliothek.
Um Containerlogs mit Anforderungslogs zu korrelieren, ohne eine Clientbibliothek zu verwenden, können Sie eine strukturierte JSON-Logzeile verwenden, die ein logging.googleapis.com/trace
-Feld mit der aus dem X-Cloud-Trace-Context
-Header extrahierten Trace-ID enthält, wie im obigen Beispiel für strukturiertes Logging gezeigt.
Nutzung der Anfragelogressource steuern
Anfragelogs werden automatisch erstellt. Auch wenn Sie die Menge der Anforderungslogs nicht direkt über Knative Serving steuern können, können Sie das Feature Logausschlüsse von Cloud Logging verwenden.
Ein Hinweis zu Logging-Agents
Wenn Sie Cloud Logging mit bestimmten Google Cloud-Produkten wie Compute Engine verwendet haben, haben Sie möglicherweise Logging-Agents von Cloud Logging verwendet. Knative Serving verwendet keine Logging-Agents, da es integrierte Unterstützung für die Logerfassung bietet.
Logging-Ressource
Wenn Sie im Log-Explorer auf einen Logeintrag klicken, wird ein Logeintrag im JSON-Format geöffnet, in dem Sie die gewünschten Details aufrufen können.
Alle Felder in einem Logeintrag, wie Zeitstempel, Schweregrad und httpRequest
, sind Standardfelder und werden in der Dokumentation für einen Logeintrag beschrieben.
Es gibt jedoch einige spezifische Labels oder Ressourcenlabels für Knative Serving. Diese sind hier mit Beispielinhalten aufgeführt:
{
httpRequest: {…}
insertId: "5c82b3d1000ece0000000000"
labels: {
instanceId: "00bf4bf00000fb59c906a00000c9e29c2c4e06dce91500000000056008d2b6460f163c0057b97b2345f2725fb2423ee5f0bafd36df887fdb1122371563cf1ff453717282afe000001"
}
logName: "projects/my-project/logs/kubernetes-engine/enterprise/knative-serving/.googleapis.com%2Frequests"
receiveTimestamp: "2019-03-08T18:26:25.981686167Z"
resource: {
labels: {
configuration_name: "myservice"
location: "us-central1"
project_id: "my-project"
revision_name: "myservice-00002"
service_name: "myservice"
}
type: "cloud_run_revision"
}
severity: "INFO"
timestamp: "2019-03-08T18:26:25.970397Z"
}
Feld | Werte und Hinweise |
---|---|
instanceId |
Die Containerinstanz, die die Anfrage verarbeitet hat. |
logName |
Gibt das Log an, z. B. Anfragelog, Standardfehler, Standardausgabe usw. |
configuration_name |
Die Konfigurationsressource, die die Überarbeitung erstellt hat, mit der die Anfrage bereitgestellt wurde. |
location |
Der GCP-Speicherort des Dienstes. |
project_id |
Das Projekt, in dem der Dienst bereitgestellt wird. |
revision_name |
Die Überarbeitung, die die Anfrage bereitgestellt hat. |
service_name |
Der Dienst, der die Anfrage bereitgestellt hat. |
type |
cloud_run_revision : Der Knative Serving-Ressourcentyp. |