Risoluzione dei problemi di logging in GKE


Questa pagina mostra come esaminare e risolvere i problemi relativi al logging di GKE.

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

Log del cluster mancanti in Cloud Logging

Verifica che il logging sia abilitato nel progetto

  1. Elenca i servizi attivati:

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

    Il seguente output indica che la registrazione è attivata per il progetto:

    NAME                    TITLE
    logging.googleapis.com  Cloud Logging API
    

    (Facoltativo) Controlla i log nel visualizzatore log per determinare chi ha disattivato l'API e quando:

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

    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: il tuo ID 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, la registrazione è disattivata. Ad esempio, cluster-3 in questo output ha il logging 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 consentire ai nodi di scrivere log in Cloud Logging è necessario uno dei seguenti ambiti:

  • 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 ogni pool di nodi del cluster:

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

    Sostituisci quanto segue:

    Esegui la migrazione dei workload dal vecchio pool di nodi a quello appena creato e monitora lo stato di avanzamento.

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

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

    Sostituisci quanto segue:

Verifica che all'account di servizio del pool di nodi sia stato assegnato un ruolo con le autorizzazioni IAM corrette

L'account di servizio deve avere un ruolo che contenga l'autorizzazionelogging.logEntries.create per creare i log.

  1. Trova l'account di servizio per ogni 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 l'account di servizio Compute Engine predefinito, puoi descriverlo utilizzando il seguente comando. Come best practice, utilizza un account di servizio personalizzato con privilegi minimi per i tuoi pool di nodi. L'account di servizio Compute Engine predefinito contiene più delle autorizzazioni minime necessarie per eseguire i cluster.

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

    Visualizza le autorizzazioni contenute nei ruoli concessi a un account di servizio specifico:

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

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

Verifica di non aver raggiunto le quote di scrittura dell'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.

Eseguire il debug dei problemi di logging GKE con gcpdiag

Se mancano o ricevi log incompleti dal tuo cluster GKE, utilizza lo strumento gcpdiag per la risoluzione dei problemi.

gcpdiag è uno strumento open source. Non è un prodotto Google Cloud supportato ufficialmente. Puoi utilizzare lo strumento gcpdiag per identificare e risolvere i problemi dei progetti Google Cloud. Per maggiori informazioni, consulta il progetto gcpdiag su GitHub.

Quando i log del cluster GKE sono mancanti o incompleti, esamina le potenziali cause concentrandoti sulle seguenti impostazioni di configurazione di base che sono essenziali per le funzioni di logging adeguate:

  • Logging a livello di progetto:assicurati che nel progetto Google Cloud che ospita il cluster GKE sia attivata l'API Cloud Logging.
  • Logging a livello di cluster:verifica che il logging sia attivato esplicitamente nella configurazione del cluster GKE.
  • Autorizzazioni pool di nodi:verifica che i nodi all'interno dei pool di nodi del cluster abbiano attivato l'ambito "Scrittura di Cloud Logging", che consente loro di inviare i dati dei log.
  • Autorizzazioni account di servizio:verifica che l'account di servizio utilizzato dai pool di nodi disponga delle autorizzazioni IAM necessarie per interagire con Cloud Logging. In particolare, in genere è richiesto il ruolo "roles/logging.logWriter".
  • Quote di scrittura dell'API Cloud Logging:verifica che le quote di scrittura dell'API Cloud Logging non siano state superate nel periodo di tempo specificato.

Console Google Cloud

  1. Completa e poi copia il seguente comando.
  2. gcpdiag runbook gke/logs \
        --parameter project_id=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION
  3. Apri la console Google Cloud e attiva Cloud Shell.
  4. Apri Cloud Console
  5. Incolla il comando copiato.
  6. Esegui il comando gcpdiag, che scarica l'immagine Docker gcpdiag, quindi esegui i controlli diagnostici. Se applicabile, segui le istruzioni di output per risolvere i problemi relativi ai controlli non riusciti.

Docker

Puoi eseguire gcpdiag utilizzando un wrapper che avvia gcpdiag in un container Docker. È necessario installare Docker o Podman.

  1. Copia ed esegui il seguente comando sulla tua workstation locale.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Esegui il comando gcpdiag.
    ./gcpdiag runbook gke/logs \
        --parameter project_id=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 del cluster GKE.

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 l'assistenza clienti Google Cloud.