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.
Berechtigungsprobleme beim Schreiben von Protokollen identifizieren und beheben
GKE verwendet IAM-Dienstkonten, die an Ihre Knoten angehängt sind, um Systemaufgaben wie Logging und Monitoring auszuführen. Diesen Knotendienstkonten muss mindestens die Rolle Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount
) für Ihr Projekt zugewiesen sein. Standardmäßig verwendet GKE das Compute Engine-Standarddienstkonto, das automatisch in Ihrem Projekt erstellt wird, als Knotendienstkonto.
Wenn Ihre Organisation die Einschränkung der Organisationsrichtlinie iam.automaticIamGrantsForDefaultServiceAccounts
erzwingt, erhält das Standard-Compute Engine-Dienstkonto in Ihrem Projekt möglicherweise nicht automatisch die erforderlichen Berechtigungen für GKE.
Prüfen Sie zur Identifizierung des Problems, ob in Ihrem Cluster in der Systemprotokollierungslast
401
-Fehler auftreten:[[ $(kubectl logs -l k8s-app=fluentbit-gke -n kube-system -c fluentbit-gke | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"
Wenn die Ausgabe
true
ist, treten bei der Systemauslastung 401-Fehler auf, was auf fehlende Berechtigungen hinweist. Wenn die Ausgabefalse
ist, überspringen Sie die restlichen Schritte und versuchen Sie es mit einer anderen Fehlerbehebung.
-
So finden Sie den Namen des Dienstkontos, das Ihre Knoten verwenden:
Console
- Rufen Sie die Seite Kubernetes-Cluster auf:
- Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie prüfen möchten.
- Führen Sie je nach Betriebsmodus des Clusters einen der folgenden Schritte aus:
- Suchen Sie bei Clustern im Autopilot-Modus im Abschnitt Sicherheit nach dem Feld Dienstkonto.
- Führen Sie für Cluster im Standardmodus die folgenden Schritte aus:
- Klicken Sie auf den Tab Knoten.
- Klicken Sie in der Tabelle Knotenpools auf den Namen eines Knotenpools. Die Seite Knotenpooldetails wird geöffnet.
- Suchen Sie im Abschnitt Sicherheit nach dem Feld Dienstkonto.
Wenn der Wert im Feld Dienstkonto
default
ist, verwenden Ihre Knoten das Compute Engine-Standarddienstkonto. Wenn der Wert in diesem Felddefault
nicht ist, verwenden Ihre Knoten ein benutzerdefiniertes Dienstkonto. Eine Anleitung zum Zuweisen der erforderlichen Rolle an ein benutzerdefiniertes Dienstkonto finden Sie unter IAM-Dienstkonten mit geringsten Berechtigungen verwenden.gcloud
Führen Sie für Cluster im Autopilot-Modus den folgenden Befehl aus:
gcloud container clusters describe
CLUSTER_NAME
\ --location=LOCATION
\ --flatten=autoscaling.autoprovisioningNodePoolDefaults.serviceAccountFühren Sie für Cluster im Standardmodus den folgenden Befehl aus:
gcloud container clusters describe
CLUSTER_NAME
\ --location=LOCATION
\ --format="table(nodePools.name,nodePools.config.serviceAccount)"Wenn die Ausgabe
default
ist, verwenden Ihre Knoten das Compute Engine-Standarddienstkonto. Wenn die Ausgabedefault
nicht ist, verwenden Ihre Knoten ein benutzerdefiniertes Dienstkonto. Eine Anleitung zum Zuweisen der erforderlichen Rolle an ein benutzerdefiniertes Dienstkonto finden Sie unter IAM-Dienstkonten mit geringsten Berechtigungen verwenden. -
So weisen Sie dem Compute Engine-Standarddienstkonto die Rolle
roles/container.defaultNodeServiceAccount
zu:Console
- Rufen Sie die Begrüßungsseite auf:
- Klicken Sie im Feld Projektnummer auf In Zwischenablage kopieren.
- Rufen Sie die IAM-Seite auf.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie im Feld Neue Hauptkonten den folgenden Wert an:
Ersetzen SiePROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
durch die kopierte Projektnummer. - Wählen Sie im Menü Rolle auswählen die Rolle Kubernetes Engine Default Node Service Account aus.
- Klicken Sie auf Speichern.
gcloud
- So finden Sie Ihre Google Cloud-Projektnummer:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.Die Ausgabe sieht in etwa so aus:
12345678901
- Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle
roles/container.defaultNodeServiceAccount
zu:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Ersetzen Sie
PROJECT_NUMBER
durch die Projektnummer aus dem vorherigen Schritt.
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 Tool gcpdiag
können Sie Probleme mit 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ühren 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, um das Docker-Imagegcpdiag
herunterzuladen und dann Diagnoseprüfungen durchzuführen. Folgen Sie gegebenenfalls der Anleitung für die Ausgabe, um fehlgeschlagene Prüfungen zu beheben.
gcpdiag runbook gke/logs \
--parameter project_id=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 \ --parameter project_id=PROJECT_ID \ --parameter name=GKE_NAME \ --parameter location=LOCATION
Verfügbare Parameter für dieses Runbook ansehen
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:
--universe-domain
: Die Domain Trusted Partner Sovereign Cloud, auf der die Ressource gehostet wird--parameter
oder-p
: Runbook-Parameter
Eine Liste und Beschreibung aller gcpdiag
-Tool-Flags finden Sie in der gcpdiag
-Nutzungsanleitung.