GKE-Logs


Auf dieser Seite erhalten Sie eine Übersicht über die in Google Kubernetes Engine (GKE) verfügbaren Logging-Optionen.

Übersicht

An Cloud Logging gesendete GKE-Logs werden in einem dedizierten, nichtflüchtigen Datenspeicher gespeichert. In GKE werden zwar eigene Logs gespeichert, die Speicherung dieser Logs ist aber nicht dauerhaft. Beispielsweise werden GKE-Containerlogs werden entfernt, wenn der jeweilige Host-Pod entfernt wird, wenn auf dem Laufwerk, auf dem sie gespeichert sind, nicht mehr genügend Speicherplatz vorhanden ist oder wenn sie durch neuere Logs ersetzt werden. Systemlogs werden regelmäßig gelöscht, um Platz für neue Logs zu schaffen. Clusterereignisse werden nach einer Stunde entfernt.

GKE-Logging-Agent

GKE bietet standardmäßig einen knotenspezifischen Logging-Agent, der Containerlogs liest, nützliche Metadaten hinzufügt und die Logs anschließend in Cloud Logging speichert. Der GKE-Logging-Agent sucht in den folgenden Quellen nach Containerlogs:

  • Standardausgabe- und Standardfehlerlogs aus containerisierten Prozessen

  • Kubelet- und Containerlaufzeitlogs

  • Logs für Systemkomponenten wie VM-Startskripts

Für Ereignisse nutzt GKE ein Deployment im Namespace kube-system, das Ereignisse automatisch erfasst und an Logging sendet.

Welche Logs erfasst werden

Standardmäßig erfasst GKE verschiedene Arten von Logs aus Ihrem Cluster und speichert diese in Cloud Logging:

  • Audit-Logs: Dazu gehören Administratoraktivitätslogs, Datenzugriffslogs und Ereignislogs. Ausführliche Informationen zu den Audit-Logs für GKE finden Sie in der Dokumentation zu Audit-Logs für GKE. Audit-Logs für GKE können nicht deaktiviert werden.

  • Systemprotokolle, einschließlich der Protokolle, die in den verfügbaren Protokollen aufgeführt sind.

  • Anwendungslogs: Alle Logs, die von Nicht-System-Containern generiert wurden, die auf Nutzerknoten ausgeführt werden.

Optional kann GKE zusätzliche Arten von Logs aus bestimmten Komponenten der Kubernetes-Steuerungsebene erfassen und in Cloud Logging speichern:

  • API-Serverlogs: Alle vom Kubernetes API-Server generierten Logs (kube-apiserver).

  • Scheduler-Logs: Alle Logs, die vom Kubernetes-Planer (kube-scheduler) generiert werden.

  • Controller Manager-Logs: Alle Logs, die vom Kubernetes Controller Manager (kube-controller-manager) generiert werden.

Weitere Informationen zu den einzelnen Komponenten der Steuerungsebene finden Sie unter GKE-Clusterarchitektur.

Logs erfassen

Wenn Sie einen neuen GKE-Cluster erstellen, ist die Einbindung in Cloud Logging standardmäßig aktiviert.

System- und Anwendungslogs werden an den Logs Router in Cloud Logging gesendet.

Von dort können Logs in Cloud Logging aufgenommen, ausgeschlossen oder nach BigQuery, Pub/Sub oder Cloud Storage exportiert werden.

Sie können einen Standardcluster auch so konfigurieren, dass nur Systemprotokolle und keine Anwendungsprotokolle erfasst werden. Sowohl für Autopilot- als auch für Standardcluster können Sie mit Ausschlussfiltern das Volumen der an Cloud Logging gesendeten Logs reduzieren.

Logging-Durchsatz

Wenn das System-Logging aktiviert ist, wird automatisch ein dedizierter Cloud Logging-Agent bereitgestellt und verwaltet. Dieser Agent wird auf allen GKE-Knoten in einem Cluster ausgeführt, um Logs zu erfassen, hilfreiche Metadaten zu Container, Pod und Cluster hinzuzufügen und die Logs dann mit einem fluentbit-basierten Agent an Cloud Logging zu senden.

Wenn ein GKE-Knoten mehr als den Standard-Logdurchsatz benötigt und Ihr GKE-Standardcluster eine Steuerungsebene der Version 1.23.13-gke.1000 oder höher verwendet, können Sie GKE so konfigurieren, dass eine alternative Konfiguration des Logging-Agent bereitgestellt wird, der den Logging-Durchsatz maximieren soll.

Weitere Informationen finden Sie unter Logdurchsatz anpassen.

Logerfassung mit benutzerdefinierter fluentd oder fluentbit

Der Standard-Logging-Agent von GKE bietet eine verwaltete Lösung zum Bereitstellen und Verwalten von Agents, die Logs für Ihre Cluster an Cloud Logging senden. Logs werden mit einem fluentbit-basierten Agent erfasst.

Linux-auditd-Logs für GKE-Knoten erfassen

Sie können ausführliche Audit-Logs für Betriebssysteme auf GKE-Knoten aktivieren, auf denen Container-Optimized OS ausgeführt wird. Betriebssystemlogs auf den Knoten liefern wertvolle Informationen über den Status Ihres Clusters und der Arbeitslasten, z. B. Fehlermeldungen, Anmeldeversuche und binäre Ausführungen. Sie können diese Informationen verwenden, um Probleme zu beheben oder Sicherheitsvorfälle zu untersuchen.

Weitere Informationen finden Sie unter Linux-Audit-Logs für GKE-Knoten aktivieren.

GKE-Audit-Logs

Ausführliche Informationen zu Logeinträgen für die Ressourcentypen Kubernetes-Cluster und GKE-Clustervorgänge finden Sie unter Audit-Logging.

Zugriffssteuerung für Logging

Es gibt zwei Bereiche der Zugriffssteuerung für Anwendungen: Anwendungszugriff und Nutzerzugriff. Cloud Logging bietet IAM-Rollen (Identity and Access Management), mit denen Sie den entsprechenden Zugriff gewähren können.

Anwendungszugriff

Anwendungen benötigen Berechtigungen zum Schreiben von Logs in Cloud Logging. Dazu wird dem Dienstkonto, das mit dem zugrunde liegenden Knotenpool verknüpft ist, die IAM-Rolle roles/logging.logWriter zugewiesen.

Lesezugriff für Nutzer

Zur Anzeige von Logs in Ihrem Projekt benötigen Sie die Rolle roles/logging.viewer. Für den Zugriff auf die Datenzugriffslogs ist die IAM-Berechtigung logging.privateLogViewer erforderlich.

Weitere Informationen zu Berechtigungen und Rollen finden Sie im Leitfaden zur Zugriffssteuerung. Außerdem empfehlen wir die Best Practices für Cloud-Audit-Logs, die auch allgemein für Cloud Logging gelten.

Administratorzugriff für Nutzer

Die IAM-Rollen roles/logging.configWriter und roles/logging.admin stellen die administrativen Funktionen bereit. Die IAM-Rolle roles/logging.configWriter ist erforderlich, um eine Logging-Senke zu erstellen, die in der Regel zum Weiterleiten Ihrer Logs an ein bestimmtes oder zentrales Projekt verwendet wird. Sie können beispielsweise eine Logging-Senke zusammen mit einem Logging-Filter verwenden, um alle Logs für einen Namespace an einen zentralen Logging-Bucket weiterzuleiten.

Weitere Informationen finden Sie im Leitfaden zur Zugriffssteuerung für Cloud Logging.

Best Practices

  • Strukturiertes Logging: Der in GKE integrierte Logging-Agent liest JSON-Dokumente, die in einzeilige Strings serialisiert und in die Standardausgabe oder den Standardfehler geschrieben wurden, und sendet sie in Google Cloud Observability als strukturierte Logeinträge.
    • Weitere Informationen zur Arbeit mit einem integrierten Logging-Agent finden Sie unter Strukturiertes Logging.
    • Sie können Erweiterte Logfilter verwenden, um Logs anhand der Felder des JSON-Dokuments zu filtern.
    • Bei mit glog generierten Logs werden die üblichen Felder geparst, z. B. severity, pid, source_file, source_line. Die eigentliche Nachrichtennutzlast wird jedoch nicht geparst und erscheint unverändert in der daraus resultierenden Lognachricht in Google Cloud Observability.
  • Schweregrad: In die Standardausgabe geschriebene Logs befinden sich auf der Ebene INFO und in den Standardfehlerkanal geschriebene Logs befinden sich auf der Ebene ERROR. Strukturierte Logs können ein severity-Feld enthalten, das den Schweregrad des Logs festlegt.
  • Exportieren nach BigQuery: Für weitere Analysen können Sie Logs in externe Dienste wie BigQuery oder Pub/Sub exportieren. Das Format und die Struktur von Logs, die nach BigQuery exportiert wurden, wird beibehalten. Weitere Informationen finden Sie unter Routing und Speicher – Übersicht.
  • Benachrichtigungen: Wenn Logging unerwartetes Verhalten protokolliert, können Sie mithilfe von logbasierten Messwerten Benachrichtigungsrichtlinien einrichten. Ein Beispiel finden Sie unter Benachrichtigungsrichtlinie für einen Zählermesswert erstellen. Ausführliche Informationen zu logbasierten Messwerten finden Sie unter Übersicht zu logbasierten Messwerten.
  • Fehlerberichte: Um Fehler aus Anwendungen zu erfassen, die auf Ihren Clustern ausgeführt werden, können Sie Error Reporting verwenden.

Verfügbare Logs

Wenn Sie Logs an Cloud Logging senden, müssen Sie Systemlogs senden. Optional können Sie auch Logs aus zusätzlichen Quellen senden.

In der folgenden Tabelle sind die unterstützten Werte für das Flag --logging der Befehle create und update aufgeführt.

Logquelle --logging-Wert Erfasste Logs
Keine NONE Keine an Cloud Logging gesendeten Logs; im Cluster ist kein Agent für die Logerfassung installiert. Dieser Wert wird für Autopilot-Cluster nicht unterstützt.
System SYSTEM Erfasst Logs aus folgenden Quellen:
  • Alle Pods, die in den Namespaces kube-system, istio-system, knative-serving, gke-system und config-management-system ausgeführt werden.
  • Nicht containerisierte Dienste, einschließlich docker/containerd-Laufzeit, kubelet, kubelet-monitor node-problem-detector und kube-container-runtime-monitor.
  • Die Ausgabe serieller Ports des Knotens, wenn für serial-port-logging-enable der Metadaten der VM-Instanz der Wert "true" festgelegt ist.

Erfasst auch Kubernetes-Ereignisse. Dieser Wert ist für alle Clustertypen erforderlich.

Arbeitslasten WORKLOAD Alle Logs, die von Nicht-System-Containern generiert werden, die auf Nutzerknoten ausgeführt werden. Dieser Wert ist standardmäßig aktiviert, aber für alle Clustertypen optional.
API-Server API_SERVER Alle von kube-apiserver generierten Logs. Dieser Wert ist für alle Clustertypen optional.
Planer SCHEDULER Alle von kube-scheduler generierten Logs. Dieser Wert ist für alle Clustertypen optional.
Controller-Manager CONTROLLER_MANAGER Alle von kube-controller-manager generierten Logs. Dieser Wert ist für alle Clustertypen optional.

Standardmäßig in GKE Enterprise aktivierte Logs

Wenn Sie einen neuen GKE-Cluster in Google Cloud erstellen, sind Arbeitslastlogs standardmäßig für alle Autopilot-Cluster aktiviert, können jedoch deaktiviert werden.

Für Projekte der GKE Enterprise-Version sind standardmäßig zusätzliche nützliche Logs aktiviert, wenn Sie sich beim Erstellen des Clusters in einer Flotte registrieren.

In der folgenden Tabelle weist ein Häkchen () darauf hin, welche Logs standardmäßig aktiviert sind, wenn Sie einen neuen Cluster in einem Projekt mit aktiviertem GKE Enterprise erstellen und registrieren:

Logname Autopilot Standard
System
Arbeitslasten -
API-Server
Planer
Controller-Manager

Für die Logs der Steuerungsebene (API-Server, Planer und Controller Manager) fallen Cloud Logging-Gebühren an.

Preise

Logs der GKE-Steuerungsebene werden nach Cloud Logging exportiert. Es gelten die Preise für Cloud Logging.

Wenn Sie Logs in einen anderen Google Cloud-Dienst wie BigQuery exportieren, werden Ihnen die anfallenden Speicherkosten in Rechnung gestellt. Die Kosten für Cloud Logging finden Sie unter Preise.

Kontingent

Logs der Steuerungsebene verbrauchen das Kontingent „Schreibanfragen pro Minute” der Cloud Logging API. Bevor Sie Logs auf Steuerungsebene aktivieren, prüfen Sie die letzte Spitzennutzung dieses Kontingents. Wenn sich viele Cluster im selben Projekt befinden oder sich dem Limit dieses Kontingents nähern, können Sie eine Erhöhung des Kontingentlimits beantragen, bevor Sie Logs der Steuerungsebene aktivieren.

Zugriffssteuerung

Wenn Sie den Zugriff in Ihrer Organisation auf Logs der Steuerungsebene von Kubernetes beschränken möchten, können Sie einen separaten Log-Bucket mit eingeschränkteren Zugriffssteuerungen erstellen.

Wenn Sie sie in einem separaten Log-Bucket mit eingeschränktem Zugriff speichern, sind Logs der Steuerungsebene im Log-Bucket nicht automatisch für Nutzer mit roles/logging.viewer-Zugriff auf das Projekt zugänglich. Wenn Sie bestimmte Logs der Steuerungsebene aus Datenschutz- oder Sicherheitsgründen löschen möchten, können Sie diese Logs außerdem in einem separaten Log-Bucket mit eingeschränktem Zugriff löschen, ohne dass dies Auswirkungen auf Logs aus anderen Komponenten oder Diensten hat.