Fehlerbehebung beim Logging in GKE


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

  1. 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"
    
  2. 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

  1. 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ürcluster-3 das Logging deaktiviert.

  2. 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:

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
  1. 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:

    Migrieren Sie Ihre Arbeitslasten vom alten Knotenpool zum neu erstellten Knotenpool und überwachen Sie den Fortschritt.

  2. 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:

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.

  1. 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:

    Die Ausgabe sieht in etwa so aus:

    NAME          SERVICE_ACCOUNT
    default-pool  [email protected]
    

    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)"
    
  2. 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)"
    
  3. 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.

  1. Rufen Sie in der Google Cloud Console die Seite Kontingente auf.

    Kontingente aufrufen

  2. Filtern Sie die Tabelle nach "Cloud Logging API".

  3. 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 das gcpdiag-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.

Wenn Logs aus dem GKE-Cluster fehlen oder unvollständig sind, untersuchen Sie mögliche Ursachen, indem Sie sich auf die folgenden zentralen Konfigurationseinstellungen konzentrieren, die für ordnungsgemäße Logging-Funktionen wichtig sind:

  • 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

  1. Füllen Sie den folgenden Befehl aus und kopieren Sie ihn.
  2. gcpdiag runbook gke/logs --project=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION
  3. Öffnen Sie die Google Cloud Console und aktivieren Sie Cloud Shell.
  4. Cloud Console öffnen
  5. Fügen Sie den kopierten Befehl ein.
  6. Führen Sie den Befehl gcpdiag aus, der das Docker-Image gcpdiag herunterlädt und dann Diagnoseprüfungen durchführt. Folgen Sie gegebenenfalls der Ausgabeanleitung, um fehlgeschlagene Prüfungen zu beheben.

Docker

Sie können gcpdiag mit einem Wrapper ausführen, der gcpdiag in einem Docker-Container startet. Docker oder Podman muss installiert sein.

  1. 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
  2. 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.

Nächste Schritte

Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.