Auf dieser Seite erfahren Sie, wie Sie Probleme mit GKE-Logging untersuchen und beheben.
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.Fehlende Cluster-Logs in Cloud Logging
Prüfen, ob das Logging im Projekt aktiviert ist
Aktivierte Dienste auflisten:
gcloud services list --enabled --filter="NAME=logging.googleapis.com"
Die folgende Ausgabe zeigt an, dass das Logging für das Projekt aktiviert ist:
NAME TITLE logging.googleapis.com Cloud Logging API
Optional: Prüfen Sie die Logs in der Loganzeige, um festzustellen, wer die API deaktiviert hat und wann sie deaktiviert wurde:
protoPayload.methodName="google.api.serviceusage.v1.ServiceUsage.DisableService" protoPayload.response.services="logging.googleapis.com"
Wenn das Logging deaktiviert ist, aktivieren Sie das Logging:
gcloud services enable logging.googleapis.com
Prüfen, ob das Logging für den Cluster aktiviert ist
Listen Sie die Cluster auf:
gcloud container clusters list \ --project=PROJECT_ID \ '--format=value(name,loggingConfig.componentConfig.enableComponents)' \ --sort-by=name | column -t
Dabei gilt:
PROJECT_ID
ist Ihre Google Cloud-Projekt-ID.
Die Ausgabe sieht etwa so aus:
cluster-1 SYSTEM_COMPONENTS cluster-2 SYSTEM_COMPONENTS;WORKLOADS cluster-3
Wenn der Wert für Ihren Cluster leer ist, ist das Logging deaktiviert. Beispiel: In dieser Ausgabe ist für
cluster-3
das Logging deaktiviert.Aktivieren Sie das Cluster-Logging, wenn Sie auf
NONE
gesetzt sind:gcloud container clusters update CLUSTER_NAME \ --logging=SYSTEM,WORKLOAD \ --location=COMPUTE_LOCATION
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_LOCATION
: der Compute Engine-Standort für Ihren Cluster.
Prüfen, ob Knoten in den Knotenpools den Cloud Logging-Zugriffsbereich haben
Einer der folgenden Bereiche ist erforderlich, damit Knoten Logs in Cloud Logging schreiben können:
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/logging.admin
Prüfen Sie die Bereiche, die in jedem Knotenpool im Cluster konfiguriert sind:
gcloud container node-pools list --cluster=CLUSTER_NAME \ --format="table(name,config.oauthScopes)" \ --location COMPUTE_LOCATION
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_LOCATION
: der Compute Engine-Standort für Ihren Cluster.
Migrieren Sie Ihre Arbeitslasten vom alten Knotenpool zum neu erstellten Knotenpool und überwachen Sie den Fortschritt.
Erstellen Sie neue Knotenpools mit dem richtigen Logging-Bereich:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --scopes="gke-default"
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_LOCATION
: der Compute Engine-Standort für Ihren Cluster.
Prüfen, ob das Dienstkonto des Knotenpools eine Rolle mit den richtigen IAM-Berechtigungen hat
Das Dienstkonto muss eine Rolle haben, die die Berechtigung logging.logEntries.create
zum Erstellen von Logs enthält.
Suchen Sie das Dienstkonto für jeden Knotenpool:
gcloud container node-pools list \ --cluster=CLUSTER_NAME \ --format="table(name,config.serviceAccount)" \ --location=COMPUTE_LOCATION
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_LOCATION
: der Compute Engine-Standort für Ihren Cluster.
Die Ausgabe sieht in etwa so aus:
NAME SERVICE_ACCOUNT default-pool gke-cluster-sa@developer.gserviceaccount.com
Wenn der Knotenpool das Compute Engine-Standarddienstkonto verwendet, können Sie es mit dem folgenden Befehl beschreiben. Verwenden Sie als Best Practice für Ihre Knotenpools ein benutzerdefiniertes Dienstkonto mit minimalen Berechtigungen. Das Compute Engine-Standarddienstkonto enthält mehr als die für die Ausführung Ihrer Cluster mindestens erforderlichen Berechtigungen.
gcloud compute project-info describe --format="table(defaultServiceAccount)"
Prüfen Sie, ob die IAM-Rollen über ausreichende Berechtigungen verfügen.
Rufen Sie die Berechtigungen auf, die in Rollen enthalten sind, die einem bestimmten Dienstkonto zugewiesen sind:
gcloud projects get-iam-policy PROJECT_ID \ --flatten="bindings[]" \ --filter="bindings.members=serviceAccount:SERVICE_ACCOUNT" \ --format="table[box](bindings.role)"
Gewähren Sie dem Dienstkonto eine Rolle mit der Berechtigung
logging.logEntries.create
. Sie können eine vordefinierte Rolle verwenden oder eine benutzerdefinierte Rolle erstellen.
Prüfen, dass die Cloud Logging Write-API-Kontingente nicht erreicht wurden
Überzeugen Sie sich, dass Sie die API-Write-kontingente für Cloud Logging nicht erreicht haben.
Rufen Sie in der Google Cloud Console die Seite Kontingente auf.
Filtern Sie die Tabelle nach "Cloud Logging API".
Schauen Sie nach, dass Sie keines der Kontingente erreicht haben.
GKE-Logging-Probleme mit gcpdiag beheben
Wenn Sie unvollständige Logs in Ihrem GKE-Cluster fehlen oder diese abrufen, verwenden Sie dasgcpdiag
-Tool zur Fehlerbehebung.
gcpdiag
ist ein Open-Source-Tool. Es ist kein offiziell unterstütztes Google Cloud-Produkt.
Mit dem gcpdiag
-Tool können Sie Probleme bei Google Cloud-Projekten identifizieren und beheben. Weitere Informationen finden Sie im gcpdiag-Projekt auf GitHub.
- Logging auf Projektebene: Sorgt dafür, dass im Google Cloud-Projekt, in dem sich der GKE-Cluster befindet, die Cloud Logging API aktiviert ist.
- Logging auf Clusterebene: Überprüft, ob das Logging explizit in der Konfiguration des GKE-Clusters aktiviert ist.
- Knotenpoolberechtigungen: Bestätigt, dass für die Knoten in den Knotenpools des Clusters der Bereich "Cloud Logging-Schreibvorgänge" aktiviert ist, sodass sie Logdaten senden können.
- Dienstkontoberechtigungen: Prüft, ob das von den Knotenpools verwendete Dienstkonto die erforderlichen IAM-Berechtigungen für die Interaktion mit Cloud Logging hat. Insbesondere ist die Rolle "roles/logging.logWriter" normalerweise erforderlich.
- Schreibkontingente für die Cloud Logging API: Verifiziert, dass die Schreibkontingente für die Cloud Logging API im angegebenen Zeitraum nicht überschritten wurden.
Google Cloud Console
- Füllen Sie den folgenden Befehl aus und kopieren Sie ihn.
- Öffnen Sie die Google Cloud Console und aktivieren Sie Cloud Shell. Cloud Console öffnen
- Fügen Sie den kopierten Befehl ein.
- Führen Sie den Befehl
gcpdiag
aus, der das Docker-Imagegcpdiag
herunterlädt und dann Diagnoseprüfungen durchführt. Folgen Sie gegebenenfalls der Ausgabeanleitung, um fehlgeschlagene Prüfungen zu beheben.
gcpdiag runbook gke/logs --project=PROJECT_ID \
--parameter name=GKE_NAME \
--parameter location=LOCATION
Docker
Sie können
gcpdiag
mit einem Wrapper ausführen, der gcpdiag
in einem Docker-Container startet. Docker oder Podman muss installiert sein.
- Kopieren Sie den folgenden Befehl und führen Sie ihn auf Ihrer lokalen Workstation aus.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Führen Sie den Befehl
gcpdiag
aus../gcpdiag runbook gke/logs --project=PROJECT_ID \ --parameter name=GKE_NAME \ --parameter location=LOCATION
Sehen Sie sich die verfügbaren Parameter für dieses Runbook an.
Ersetzen Sie Folgendes:
- PROJECT_ID: die ID des Projekts, das die Ressource enthält
- GKE_NAME ist der Name des GKE-Clusters.
- LOCATION: Die Zone oder Region des GKE-Clusters.
Nützliche Flags:
--project
: Der PROJECT_ID--universe-domain
: Gegebenenfalls die Domain Trusted Partner Sovereign Cloud, auf der die Ressource gehostet wird--parameter
oder-p
: Runbook-Parameter
Eine Liste und eine Beschreibung aller Flags für das gcpdiag
-Tool finden Sie in der Anleitung zur Verwendung des gcpdiag
-Tools.