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:

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 Ausgabe false ist, überspringen Sie die restlichen Schritte und versuchen Sie es mit einer anderen Fehlerbehebung.

  1. So finden Sie den Namen des Dienstkontos, das Ihre Knoten verwenden:

    Console

    1. Rufen Sie die Seite Kubernetes-Cluster auf:

      Zur Seite "Kubernetes-Cluster"

    2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie prüfen möchten.
    3. 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:
        1. Klicken Sie auf den Tab Knoten.
        2. Klicken Sie in der Tabelle Knotenpools auf den Namen eines Knotenpools. Die Seite Knotenpooldetails wird geöffnet.
        3. 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 Feld default 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.serviceAccount

    Fü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 Ausgabe default 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.

  2. So weisen Sie dem Compute Engine-Standarddienstkonto die Rolle roles/container.defaultNodeServiceAccount zu:

    Console

    1. Rufen Sie die Begrüßungsseite auf:

      Zur Begrüßungsseite

    2. Klicken Sie im Feld Projektnummer auf In Zwischenablage kopieren.
    3. Rufen Sie die IAM-Seite auf.

      IAM aufrufen

    4. Klicken Sie auf Zugriff erlauben.
    5. Geben Sie im Feld Neue Hauptkonten den folgenden Wert an:
      PROJECT_NUMBER-compute@developer.gserviceaccount.com
      Ersetzen Sie PROJECT_NUMBER durch die kopierte Projektnummer.
    6. Wählen Sie im Menü Rolle auswählen die Rolle Kubernetes Engine Default Node Service Account aus.
    7. Klicken Sie auf Speichern.

    gcloud

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

  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 Tool gcpdiag können Sie Probleme mit 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ühren Sie den folgenden Befehl aus und kopieren Sie ihn.
  2. gcpdiag runbook gke/logs \
        --parameter project_id=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, um das Docker-Image gcpdiag herunterzuladen und dann Diagnoseprüfungen durchzuführen. Folgen Sie gegebenenfalls der Anleitung für die Ausgabe, 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 \
        --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:

Eine Liste und Beschreibung aller gcpdiag-Tool-Flags finden Sie in der gcpdiag-Nutzungsanleitung.

Nächste Schritte

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