Risoluzione dei problemi di logging in GKE


Questa pagina mostra come indagare e risolvere il logging di GKE problemi correlati.

Se hai bisogno di ulteriore assistenza, contatta Assistenza clienti Google Cloud.

Log del cluster mancanti in Cloud Logging

Verifica che il logging sia abilitato nel progetto

  1. Elenca i servizi abilitati:

    gcloud services list --enabled --filter="NAME=logging.googleapis.com"
    

    L'output seguente indica che il logging è abilitato per il progetto:

    NAME                    TITLE
    logging.googleapis.com  Cloud Logging API
    

    (Facoltativo) Controlla i log nel visualizzatore log per determinare chi ha disabilitato l'API. e quando l'API è stata disabilitata:

    protoPayload.methodName="google.api.serviceusage.v1.ServiceUsage.DisableService"
    protoPayload.response.services="logging.googleapis.com"
    
  2. Se il logging è disabilitato, abilitalo:

    gcloud services enable logging.googleapis.com
    

Verifica che il logging sia abilitato sul cluster

  1. Elenca i cluster:

    gcloud container clusters list \
        --project=PROJECT_ID \
        '--format=value(name,loggingConfig.componentConfig.enableComponents)' \
        --sort-by=name | column -t
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud.

    L'output è simile al seguente:

    cluster-1              SYSTEM_COMPONENTS
    cluster-2              SYSTEM_COMPONENTS;WORKLOADS
    cluster-3
    

    Se il valore per il cluster è vuoto, il logging è disabilitato. Ad esempio: Il logging di cluster-3 in questo output è disabilitato.

  2. Abilita il logging del cluster se impostato su NONE:

    gcloud container clusters update CLUSTER_NAME  \
        --logging=SYSTEM,WORKLOAD \
        --location=COMPUTE_LOCATION
    

    Sostituisci quanto segue:

Verifica che i nodi nei pool di nodi abbiano l'ambito di accesso a Cloud Logging

Per i nodi in cui scrivere i log è necessario uno dei seguenti ambiti Cloud Logging:

  • https://www.googleapis.com/auth/logging.write
  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/logging.admin
  1. Controlla gli ambiti configurati su ciascun pool di nodi nel cluster:

    gcloud container node-pools list --cluster=CLUSTER_NAME \
        --format="table(name,config.oauthScopes)" \
        --location COMPUTE_LOCATION
    

    Sostituisci quanto segue:

    Esegui la migrazione dei carichi di lavoro dal vecchio pool di nodi a quello appena creato e di monitorare progressi.

  2. Crea nuovi pool di nodi con l'ambito di logging corretto:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --scopes="gke-default"
    

    Sostituisci quanto segue:

Verifica che l'account di servizio del pool di nodi abbia un ruolo con le autorizzazioni IAM corrette

L'account di servizio deve avere un ruolo contenente l'autorizzazione logging.logEntries.create per creare i log.

  1. Trova l'account di servizio per ciascun pool di nodi:

    gcloud container node-pools list \
        --cluster=CLUSTER_NAME \
        --format="table(name,config.serviceAccount)" \
        --location=COMPUTE_LOCATION
    

    Sostituisci quanto segue:

    L'output è simile al seguente:

    NAME          SERVICE_ACCOUNT
    default-pool  gke-cluster-sa@developer.gserviceaccount.com
    

    Se il pool di nodi utilizza il servizio Compute Engine predefinito dell'account, puoi descriverlo utilizzando il seguente comando. Come best practice, utilizzare un account di servizio personalizzato con privilegi minimi per i pool di nodi. L'account di servizio predefinito di Compute Engine contiene più di le autorizzazioni minime necessari per eseguire i cluster.

    gcloud compute project-info describe --format="table(defaultServiceAccount)"
    
  2. Verifica che i ruoli IAM dispongano di autorizzazioni sufficienti.

    Visualizzare le autorizzazioni contenute nei ruoli concessi a uno specifico account di servizio:

    gcloud projects get-iam-policy PROJECT_ID \
        --flatten="bindings[]" \
        --filter="bindings.members=serviceAccount:SERVICE_ACCOUNT" \
        --format="table[box](bindings.role)"
    
  3. Concedi all'utente un ruolo contenente l'autorizzazione logging.logEntries.create l'account di servizio. Puoi utilizzare uno dei seguenti ruolo predefinito o crea un ruolo personalizzato.

Verifica che le quote dell'API di scrittura di Cloud Logging non siano state raggiunte

Conferma di non aver raggiunto le quote di scrittura delle API per Cloud Logging.

  1. Vai alla pagina Quote nella console Google Cloud.

    Vai a Quote

  2. Filtra la tabella per "API Cloud Logging".

  3. Verifica di non aver raggiunto nessuna delle quote.

Debug dei problemi di logging di GKE con gcpdiag

Se mancano o ricevi log incompleti da GKE usa lo strumento gcpdiag per la risoluzione dei problemi.

gcpdiag è uno strumento open source. Non è un prodotto Google Cloud ufficialmente supportato. Puoi utilizzare lo strumento gcpdiag per identificare e risolvere i problemi relativi a Google Cloud per risolvere i problemi del progetto. Per ulteriori informazioni, consulta progetto gcpdiag su GitHub.

Quando i log Cluster GKE mancante o incompleto, esamina il potenziale delle cause, concentrandosi sulle seguenti impostazioni di configurazione principali essenziali per le corrette funzioni di logging:

  • Logging a livello di progetto: garantisce che Google Cloud il progetto che ospita il cluster GKE include Cloud Logging API abilitata.
  • Logging a livello di cluster: verifica che il logging sia esplicitamente abilitati all'interno della configurazione in un cluster Kubernetes.
  • Autorizzazioni del pool di nodi:conferma che i nodi all'interno di i pool di nodi del cluster hanno lo stato "Cloud Logging Scrivi" abilitato, consentendo loro di inviare dati di log.
  • Autorizzazioni dell'account di servizio:convalida che il servizio utilizzato dai pool di nodi dispone delle autorizzazioni IAM necessarie per: a interagire con Cloud Logging. In particolare, il file "roles/logging.logWriter" è generalmente obbligatorio.
  • Quote di scrittura dell'API Cloud Logging: verifica che Le quote di scrittura dell'API Cloud Logging non sono state superate entro il valore specificato un periodo di tempo.

Console Google Cloud

  1. Completa e copia il seguente comando.
  2. gcpdiag runbook gke/logs --project=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION
  3. Apri la console Google Cloud e attiva Cloud Shell.
  4. Apri la console Cloud
  5. Incolla il comando copiato.
  6. Esegui il comando gcpdiag, che scarica l'immagine Docker gcpdiag, ed esegue i controlli diagnostici. Se applicabile, segui le istruzioni dell'output per correggere i controlli non superati.

Docker

Puoi eseguire gcpdiag utilizzando un wrapper che inizia gcpdiag in Container Docker. Docker o Podman deve essere installato.

  1. Copia ed esegui il comando seguente sulla workstation locale.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Esegui il comando gcpdiag.
    ./gcpdiag runbook gke/logs --project=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION

Visualizza i parametri disponibili per questo runbook.

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto contenente la risorsa
  • GKE_NAME: il nome del cluster GKE.
  • LOCATION: la zona o la regione di GKE in un cluster Kubernetes.

Flag utili:

Per un elenco e una descrizione di tutti i flag dello strumento gcpdiag, consulta le Istruzioni per l'utilizzo di gcpdiag.

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta Assistenza clienti Google Cloud.