Résoudre les problèmes de journalisation dans GKE


Cette page vous explique comment examiner et résoudre les problèmes liés à la journalisation dans GKE.

Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care.

Journaux de clusters manquants dans Cloud Logging

Vérifiez que la journalisation est activée dans le projet

  1. Répertoriez les services activés :

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

    Le résultat suivant indique que la journalisation est activée pour le projet :

    NAME                    TITLE
    logging.googleapis.com  Cloud Logging API
    

    Facultatif: Consultez les journaux dans la visionneuse de journaux pour déterminer qui a désactivé l'API et quand :

    protoPayload.methodName="google.api.serviceusage.v1.ServiceUsage.DisableService"
    protoPayload.response.services="logging.googleapis.com"
    
  2. Si la journalisation est désactivée, activez-là :

    gcloud services enable logging.googleapis.com
    

Vérifiez que la journalisation est activée sur le cluster

  1. Répertoriez les clusters :

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud.

    Le résultat ressemble à ce qui suit :

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

    Si la valeur correspondant à votre cluster est vide, la journalisation est désactivée. Par exemple, cluster-3 dans cette sortie a la journalisation désactivée.

  2. Activez la journalisation des clusters si elle est définie sur NONE :

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

    Remplacez les éléments suivants :

Vérifier que les nœuds des pools de nœuds disposent du niveau d'accès à Cloud Logging

L'un des champs d'application suivants est nécessaire pour que les nœuds écrivent des journaux dans Cloud Logging :

  • https://www.googleapis.com/auth/logging.write
  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/logging.admin
  1. Vérifiez les champs d'application configurés sur chaque pool de nœuds du cluster :

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

    Remplacez les éléments suivants :

    Migrez vos charges de travail de l'ancien pool de nœuds vers le nouveau pool de nœuds et surveillez la progression.

  2. Créez des pools de nœuds avec le champ d'application de journalisation approprié :

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

    Remplacez les éléments suivants :

Vérifiez que le compte de service du pool de nœuds dispose d'un rôle doté des autorisations IAM appropriées

Le compte de service doit disposer d'un rôle qui met en conteneur l'autorisation logging.logEntries.create pour créer des journaux.

  1. Recherchez le compte de service pour chaque pool de nœuds :

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

    Remplacez les éléments suivants :

    Le résultat ressemble à ce qui suit :

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

    Si le pool de nœuds utilise le compte de service Compute Engine par défaut, vous pouvez le décrire en utilisant la commande suivante. Nous vous recommandons d'utiliser un compte de service personnalisé doté de privilèges minimaux pour vos pools de nœuds. Le compte de service Compute Engine par défaut contient plus d'autorisations que nécessaire pour exécuter vos clusters.

    gcloud compute project-info describe --format="table(defaultServiceAccount)"
    
  2. Vérifiez que les rôles IAM disposent des autorisations suffisantes.

    Affichez les autorisations contenues dans les rôles attribués à un compte de service spécifique :

    gcloud projects get-iam-policy PROJECT_ID \
        --flatten="bindings[]" \
        --filter="bindings.members=serviceAccount:SERVICE_ACCOUNT" \
        --format="table[box](bindings.role)"
    
  3. Attribuez un rôle contenant l'autorisation logging.logEntries.create au compte de service. Vous pouvez utiliser un rôle prédéfini ou créer un rôle personnalisé.

Vérifier que les quotas d'écriture de l'API Cloud Logging n'ont pas été atteints

Vérifiez que vous n'avez pas atteint les quotas d'écriture de l'API Cloud Logging.

  1. Accédez à la page Quotas de la console Google Cloud.

    Accéder à la section "Quotas"

  2. Filtrez le tableau avec l'expression "Cloud Logging API".

  3. Vérifiez que vous n'avez atteint aucun quota.

Résoudre les problèmes de journalisation GKE avec gcpdiag

Si vous ne recevez pas de journaux ou si ceux-ci sont incomplets à partir de votre cluster GKE, utilisez l'outil gcpdiag pour le dépannage.

gcpdiag est un outil Open Source. Il ne s'agit pas d'un produit Google Cloud faisant l'objet d'une assistance officielle. Vous pouvez utiliser l'outil gcpdiag pour vous aider à identifier et à résoudre les problèmes liés au projet Google Cloud. Pour plus d'informations, consultez le projet gcpdiag sur GitHub.

Lorsque les journaux du cluster GKE sont manquants ou incomplets, examinez les causes potentielles en vous concentrant sur les paramètres de configuration principaux suivants, qui sont essentiels pour les fonctions de journalisation :

  • Journalisation au niveau du projet : permet de s'assurer que l'API Cloud Logging est activée dans le projet Google Cloud qui héberge le cluster GKE.
  • Journalisation au niveau du cluster : permet de vérifier que la journalisation est explicitement activée dans la configuration du cluster GKE.
  • Autorisations du pool de nœuds : permet de confirmer que les nœuds des pools de nœuds du cluster ont bien l'option "Écriture dans Cloud Logging" activée, ce qui leur permet d'envoyer des données de journal.
  • Autorisations du compte de service : permet de valider le fait que le compte de service utilisé par les pools de nœuds dispose des autorisations IAM nécessaires pour interagir avec Cloud Logging. Plus précisément, le rôle "roles/logging.logWriter" est généralement requis.
  • Quotas d'écriture de l'API Cloud Logging : permet de vérifier que les quotas d'écriture de l'API Cloud Logging n'ont pas été dépassés dans le délai spécifié.

console Google Cloud

  1. Terminez l'exécution, puis copiez la commande suivante.
  2. gcpdiag runbook gke/logs --project=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION
  3. Ouvrez la console Google Cloud et activez Cloud Shell.
  4. Ouvrir la console Cloud
  5. Collez la commande copiée.
  6. Exécutez la commande gcpdiag, qui télécharge l'image Docker gcpdiag, puis effectue des vérifications de diagnostic. Le cas échéant, suivez les instructions de sortie pour corriger les échecs de vérification.

Docker

Vous pouvez exécuter gcpdiag à l'aide d'un wrapper qui démarre gcpdiag dans un conteneur Docker. Docker ou Podman doivent être installés.

  1. Copiez et exécutez la commande suivante sur votre station de travail locale :
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Exécutez la commande gcpdiag.
    ./gcpdiag runbook gke/logs --project=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION

Affichez les paramètres disponibles pour ce runbook.

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant la ressource.
  • GKE_NAME : nom du cluster GKE.
  • LOCATION : zone ou région du cluster GKE.

Options utiles :

Pour obtenir la liste et la description de toutes les options de l'outil gcpdiag, consultez les instructions d'utilisation de gcpdiag.

Étape suivante

Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care.