Afficher les journaux du parc

Cette page explique comment activer et afficher les journaux des parcs. Avec la journalisation du parc, plusieurs journaux sont agrégés et rassemblés dans un même champ d'application, ce qui vous permet d'analyser l'état de vos applications dans une vue consolidée. Cette page est destinée :

  • Aux administrateurs de plate-forme qui souhaitent activer la journalisation d'un parc et afficher les journaux dans tous les espaces de noms.
  • Aux opérateurs de service qui souhaitent afficher les journaux dans les espaces de noms spécifiques auxquels ils ont accès.

Présentation

Les journaux de parc vous permettent d'afficher les journaux au niveau du parc entier ou pour des champs d'application d'équipe spécifiques. Les champs d'application sont une fonctionnalité de gestion d'équipe qui vous permet de définir des sous-ensembles de journaux de parc et d'autres ressources par équipe, chaque champ d'application étant associé à un ou plusieurs clusters membres du parc. Pour en savoir plus sur les champs d'application, consultez la section Gérer les équipes de votre parc.

Vous pouvez afficher deux types de journaux de parc :

  • Journaux par défaut : tous les journaux Kubernetes (à l'exception des journaux d'audit) qui n'appartiennent à aucun champ d'application de parc spécifique avec les types de ressources suivants :

    • k8s_container
    • k8s_pod
    • k8s_node
    • k8s_cluster
    • k8s_control_plane_components
  • Journaux de champ d'application du parc : journaux de conteneurs et de pods pour les applications appartenant à une équipe et déployées dans un champ d'application de parc spécifique avec plusieurs espaces de noms au niveau du parc.

L'affichage des journaux de champ d'application du parc est facultatif. Si vous ne souhaitez pas configurer la gestion d'équipe, vous pouvez toujours utiliser la journalisation du parc pour afficher les journaux par défaut.

Les journaux peuvent être acheminés vers différents buckets de journaux dans le projet hôte de parc avec différentes vues pour le contrôle des accès. La période de conservation par défaut d'un bucket de journaux est de 30 jours. Vous pouvez configurer cette période si nécessaire.

Deux modes sont compatibles avec le routage des journaux lorsque les parcs contiennent des clusters provenant de plusieurs projets (enregistrement inter-projets) :

  • MOVE : tous les journaux sont déplacés vers le projet hôte du parc. Si un cluster du parc appartient à un autre projet, ses journaux ne sont pas conservés dans le projet Google Cloud d'origine.

  • COPY : tous les journaux sont envoyés au projet hôte du parc. Si un cluster du parc appartient à un autre projet, ses journaux sont également conservés dans le projet Google Cloud d'origine.

Avant de commencer

  1. Si vous avez déjà créé manuellement des buckets et des récepteurs Cloud Logging, et défini des filtres d'exclusion, assurez-vous que les noms que vous avez attribués à ces objets n'entrent pas en conflit avec les restrictions de dénomination des journaux de parc. En cas de conflit de noms, contactez l'assistance avant de continuer.

  2. Assurez-vous que les clusters dont vous souhaitez afficher les journaux ont été enregistrés dans le parc choisi.

  3. Si vous ne l'avez pas déjà fait, installez la Google Cloud CLI en suivant les instructions d'installation. Vous devez disposer de la version 424.0.0 ou d'une version ultérieure pour afficher les journaux de votre parc.

  4. Assurez-vous que toutes les API requises sont activées pour votre projet hôte de parc, y compris l'API Anthos :

    gcloud services enable --project=FLEET_HOST_PROJECT_ID  \
    gkehub.googleapis.com \
    container.googleapis.com \
    connectgateway.googleapis.com \
    cloudresourcemanager.googleapis.com \
    iam.googleapis.com \
    anthos.googleapis.com
    

    où :

Préparer les champs d'application, les espaces de noms et les charges de travail

Si vous souhaitez afficher les journaux du champ d'application du parc, vous devez créer un champ d'application et un espace de noms pour le parc, en plus de préparer les charges de travail pour la collecte des journaux.

Avant de continuer, définissez le projet par défaut pour Google Cloud CLI en exécutant la commande suivante :

gcloud config set project FLEET_HOST_PROJECT_ID

Créer des champs d'application et des espaces de noms

Si vous souhaitez afficher les journaux au niveau du champ d'application et que vous n'avez pas encore configuré de champs d'application, suivez les instructions de la page Gérer les équipes pour votre parc afin de créer des champs d'application, d'ajouter des clusters aux champs d'application et de configurer des espaces de noms de parc.

Préparer les charges de travail

Pour afficher les données de journal de vos applications, vous devez déployer vos charges de travail dans un cluster sur l'espace de noms de parc configuré à l'étape précédente. Cette étape s'applique que vous choisissiez d'afficher les journaux par défaut, les journaux de champ d'application de parc, ou les deux. Voici un exemple de configuration de votre charge de travail :

  apiVersion: v1
  kind: Pod
  metadata:
    name: fleet-example-pod
    namespace: NAMESPACE_NAME
  spec:
    containers:
    - name: count
      image: ubuntu:14.04
      args: [bash, -c,
           'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 1; done']

Après avoir déployé la ressource, une erreur peut s'afficher si l'espace de noms de parc n'a pas pu être créé pour une raison quelconque. Dans ce cas, exécutez la commande suivante pour créer à nouveau l'espace de noms, puis réexécutez la commande de déploiement de la charge de travail :

  kubectl create namespace NAMESPACE_NAME
  

Activer la journalisation de parc

Cette section explique comment activer la fonctionnalité de journalisation de parc et accorder à l'équipe l'accès pour afficher les journaux.

gcloud

  • Vous pouvez activer la journalisation de parc à l'aide de Google Cloud CLI en spécifiant les champs de configuration de la fonctionnalité dans un fichier JSON ou YAML. Voici un exemple de configuration de journalisation de parc au format JSON :

    {
      "loggingConfig": {
          "defaultConfig": {
              "mode": "COPY"
          },
          "fleetScopeLogsConfig": {
              "mode": "MOVE"
          }
      }
    }
    

Pour afficher tous les champs que vous pouvez configurer pour cette fonctionnalité, consultez la documentation de référence de l'API.

Lorsque les champs defaultConfig ou fleetScopeLogsConfig sont activés avec les modes COPY ou MOVE, comme indiqué dans l'exemple précédent, un récepteur de journaux est créé avec le préfixe fleet-o11y-. Ce récepteur de journaux est créé dans le projet Google Cloud afin d'acheminer les journaux cibles du projet de cluster vers le projet hôte du parc.

Lorsque fleetScopeLogsConfig est activé, un bucket de journaux nommé fleet-o11y-scope-$SCOPE_NAME est également créé dans la région global sous le projet hôte du parc, s'il n'existe pas déjà. Notez que vous ne pouvez pas modifier la région d'un bucket.

Dans cet exemple, les journaux par défaut sont envoyés au projet hôte du parc et conservés dans le projet Google Cloud d'origine, tandis que les journaux du champ d'application du parc sont envoyés au projet hôte du parc et ne sont pas conservés dans le projet Google Cloud.

  • Ajoutez la configuration choisie à un fichier JSON, puis mettez à jour le parc :

    gcloud container fleet fleetobservability update \
            --logging-config=JSON_FILE
    

Remplacez JSON_FILE par le nom votre fichier.

Terraform

  • La fonctionnalité d'observabilité du parc est activée par défaut. Si vous utilisez Terraform pour la première fois pour gérer la fonctionnalité d'observabilité du parc, importez-la dans Terraform en exécutant la commande suivante :
terraform import google_gke_hub_feature.feature projects/FLEET_HOST_PROJECT_ID/locations/global/features/fleetobservability
  • Vous pouvez activer la journalisation du parc avec Terraform à l'aide d'un module Terraform.

Par exemple, vous pouvez ajouter le bloc suivant à votre configuration Terraform :

  resource "google_gke_hub_feature" "feature" {
    name = "fleetobservability"
    location = "global"
    spec {
      fleetobservability {
        logging_config {
          default_config {
            mode = "COPY"
          }
          fleet_scope_logs_config {
            mode = "MOVE"
          }
        }
      }
    }
  }

Lorsque les champs default_config ou fleet_scope_logs_config sont activés avec les modes COPY ou MOVE, comme indiqué dans l'exemple précédent, un récepteur de journaux est créé avec le préfixe fleet-o11y-. Ce récepteur de journaux est créé dans le projet Google Cloud afin d'acheminer les journaux cibles du projet de cluster vers le projet hôte du parc.

Lorsque fleet_scope_logs_config est activé, un bucket de journaux nommé fleet-o11y-scope-$SCOPE_NAME est également créé dans le projet hôte du parc, s'il n'existe pas déjà.

Dans cet exemple, les journaux par défaut sont envoyés au projet hôte du parc et conservés dans le projet Google Cloud d'origine, tandis que les journaux du champ d'application du parc sont envoyés au projet hôte du parc et ne sont pas conservés dans le projet Google Cloud.

Vérifiez que la spécification de la fonctionnalité a bien été mise jour :

   gcloud container fleet fleetobservability describe
  

Le résultat affiche la spécification fleetobservability mise à jour avec la configuration, comme dans l'exemple suivant :

createTime: '2022-09-30T16:05:02.222568564Z'
membershipStates:
  projects/123456/locations/us-central1/memberships/cluster-1:
    state:
      code: OK
      description: Fleet monitoring enabled.
      updateTime: '2023-04-03T20:22:51.436047872Z'
name:
projects/123456/locations/global/features/fleetobservability
resourceState:
  state: ACTIVE
spec:
  fleetobservability:
    loggingConfig:
      defaultConfig:
        mode: COPY
      fleetScopeLogsConfig:
        mode: MOVE
state:
  state: {}
updateTime: '2023-04-03T20:38:17.719596966Z'

L'application des modifications apportées à la spécification fleetobservability peut prendre quelques minutes.

Configurer les autorisations de journalisation multiprojet

Cette section n'est requise que si vous enregistrez un cluster auprès d'un parc dans un autre projet (également appelé enregistrement multiprojet). Afin d'acheminer des journaux depuis des projets de cluster vers le projet hôte de parc, vous devez attribuer le rôle roles/logging.bucketWriter au compte de service de journalisation de chaque projet de cluster.

  1. Pour obtenir les identifiants du compte de service à partir des récepteurs des projets de cluster, exécutez la commande suivante :

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud logging sinks --project=GKE_PROJECT_ID describe fleet-o11y-${FLEET_HOST_PROJECT_NUMBER}-default
    

    Si la commande renvoie une erreur indiquant que le récepteur de journaux est introuvable, essayez d'exécuter à nouveau la commande après une minute ou deux. Vous pouvez afficher le compte de service dans le champ writerIdentity de la description du récepteur, comme illustré dans l'exemple suivant :

    createTime: '2023-04-06T02:26:54.716195307Z'
    destination:
    logging.googleapis.com/projects/123456/locations/global/buckets/_Default
    filter: xxx
    name: fleet-o11y-default
    updateTime: '2023-04-06T19:03:51.598668462Z'
    writerIdentity:
    serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com
    
  2. Attribuez le rôle roles/logging.bucketWriter au compte de service récupéré :

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "SERVICE_ACCOUNT" \
        --role "roles/logging.bucketWriter"
    

    où :

    • SERVICE_ACCOUNT est le nom du compte de service récupéré à l'étape précédente. Exemple :
    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com" \
        --role "roles/logging.bucketWriter"
    

Accorder à une équipe l'accès aux journaux

Cette section explique comment accorder aux utilisateurs l'accès pour afficher les journaux de conteneurs et les journaux de pods.

  1. Obtenez la stratégie IAM du projet de parc et écrivez-la dans un fichier local au format JSON :

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID --format json > output.json
    
  2. Ajoutez une condition IAM qui permet au compte utilisateur d'afficher les données du bucket de journaux que vous avez créé. Voici un exemple permettant d'afficher les journaux de conteneurs et les journaux de pods :

    {
      "bindings": [
        {
          "members": [
            "user:USER_ACCOUNT_EMAIL"
          ],
          "role": "roles/logging.viewAccessor",
          "condition": {
              "title": "Bucket reader condition example",
              "description": "Grants logging.viewAccessor role to user USER_ACCOUNT_EMAIL for the fleet-o11y-scope-SCOPE_NAME-k8s_container and fleet-o11y-scope-SCOPE_NAME-k8s_pod log view.",
              "expression":
                "resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_container\" || resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_pod\""
          }
        }
      ],
    }
    
  3. Mettez à jour la stratégie IAM :

    gcloud projects set-iam-policy FLEET_HOST_PROJECT_ID output.json
    

Pour découvrir d'autres options permettant d'accorder l'accès, consultez la section Accorder l'accès à une vue de journal.

Afficher les journaux du parc

Les administrateurs de plate-forme ont accès à tous les journaux dans tous les espaces de noms.

Journaux par défaut

Pour afficher tous les journaux par défaut dans le bucket _Default de votre projet hôte de parc, renseignez les variables de l'URL suivante, puis copiez-la et collez-la dans votre navigateur :

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2F_Default%2Fviews%2F_Default?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

Journaux de conteneurs et de pods pour le champ d'application du parc

Les opérateurs de service peuvent afficher les journaux dans les espaces de noms auxquels ils ont accès. Pour afficher les journaux de tous les espaces de noms dans un champ d'application de parc spécifique, procédez comme suit :

  1. Après avoir sélectionné le projet hôte de votre parc, accédez à la section Équipes dans la console Google Cloud.

    Accéder à la page "Teams" (Équipes)

  2. Cliquez sur le champ d'application d'équipe dont vous souhaitez afficher les journaux, puis sur l'onglet Journaux.

  3. Sélectionnez Journaux de conteneur ou Journaux de pod pour filtrer la vue des journaux.

Pour afficher les journaux d'un espace de noms spécifique dans votre champ d'application, procédez comme suit :

  1. Sur la page Teams (Équipes), avec le champ d'application d'équipe sélectionné, cliquez sur l'onglet Namespaces (Espaces de noms).
  2. Cliquez sur l'espace de noms dont vous souhaitez afficher les journaux, puis sur l'onglet Journaux.
  3. Sélectionnez Journaux de conteneur ou Journaux de pod pour filtrer la vue des journaux.

Pour afficher les journaux de conteneur, vous pouvez également insérer les variables dans l'URL suivante, puis la copier-coller dans votre navigateur :

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_container?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

Pour afficher les journaux des pods dans un champ d'application de parc spécifique, renseignez les variables dans l'URL suivante, puis copiez-la et collez-la dans votre navigateur :

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_pod?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

Consultez la section Interface de l'explorateur de journaux pour en savoir plus sur l'analyse des données de journal.

Désactiver la journalisation de parc

Pour désactiver la fonctionnalité de journalisation de parc, procédez comme suit :

gcloud

  1. Enregistrez la configuration suivante dans un fichier nommé disable_logging_config.json :

    {
      "loggingConfig": {}
    }
    
  2. Mettez à jour la spécification de la fonctionnalité fleetobservability :

    gcloud container fleet fleetobservability update \
            --logging-config=disable_logging_config.json
    

Terraform

Dans votre configuration Terraform, mettez à jour tous les modes de routage des journaux vers MODE_UNSPECIFIED. Voici un exemple :

  resource "google_gke_hub_feature" "feature" {
    name = "fleetobservability"
    location = "global"
    spec {
      fleetobservability {
        logging_config {
          default_config {
            mode = "MODE_UNSPECIFIED"
          }
          fleet_scope_logs_config {
            mode = "MODE_UNSPECIFIED"
          }
        }
      }
    }
  }

Vérifiez que la spécification de la fonctionnalité a bien été mise jour :

   gcloud container fleet fleetobservability describe
  

Le résultat affiche la spécification fleetobservability mise à jour avec votre configuration :

  createTime: '2022-09-30T16:05:02.222568564Z'
  membershipStates:
    projects/123456/locations/global/memberships/cluster-1:
      state:
        code: OK
        description: Fleet monitoring enabled.
        updateTime: '2023-04-03T20:22:51.436047872Z'
  name:
  projects/123456/locations/global/features/fleetobservability
  resourceState:
    state: ACTIVE
  spec:
    fleetobservability:
      loggingConfig: {}
  state:
    state: {}
  updateTime: '2023-04-03T20:38:17.719596966Z'
  

L'application des modifications apportées à la spécification fleetobservability peut prendre quelques minutes.

Une fois la journalisation du parc désactivée, les récepteurs de journaux et les filtres d'exclusion seront supprimés de vos projets. Toutefois, tous les buckets de journaux créés pour le champ d'application et toutes les vues de journaux créées sous le bucket de journaux seront conservés. Pour supprimer le bucket de journaux de votre projet hôte de parc, consultez la section Supprimer un bucket.

Mettre à jour la durée de conservation des buckets de journaux

La période de conservation par défaut d'un bucket de journaux est de 30 jours. Pour mettre à jour cette période, exécutez la commande suivante :

gcloud logging buckets update fleet-o11y-scope-SCOPE_NAME --location=global --retention-days=RETENTION_DAYS

où :

  • SCOPE_NAME est le nom du niveau d'accès au parc.

  • RETENTION_DAYS est le nombre de jours de la nouvelle période de conservation. Pour plus d'options sur la configuration des buckets de journaux, consultez la page Gérer les buckets.

Si vous prolongez la durée de conservation d'un bucket, les règles de conservation ne s'appliquent pas de façon rétroactive. Les journaux ne peuvent pas être récupérés après la fin de leur période de conservation spécifique.

Documentation de référence de l'API

Cette section fournit des informations sur les champs que vous pouvez ajouter à votre objet fleetobservability.

fleetobservability

fleetobservability définit la configuration d'observabilité du parc.

Champ Description Schéma Facultatif
loggingConfig

Spécifié si la fonctionnalité de journalisation du parc est activée pour l'ensemble du parc.

Si le champ n'est pas spécifié, la fonctionnalité de journalisation du parc est désactivée pour l'ensemble du parc.

loggingConfig Vrai

loggingConfig

loggingConfig définit la configuration des fonctionnalités de journalisation de parc dans l'observabilité du parc.

Champ Description Schéma Facultatif
defaultConfig Définit le comportement de routage des journaux pour les journaux par défaut dans le parc. routingConfig Vrai
fleetScopeLogsConfig Définit le comportement de routage des journaux pour les journaux de champ d'application du parc. routingConfig Vrai

routingConfig

routingConfig définit la configuration du mode de routage des journaux dans la fonctionnalité de journalisation de parc.

Champ Description Schéma Facultatif
Standard

Spécifié pour activer le routage des journaux, et non spécifié ou MODE_UNSPECIFIED pour désactiver le routage des journaux.

Si la valeur est COPY, les journaux sont copiés dans le projet de destination.

Si la valeur est MOVE, les journaux sont déplacés vers le projet de destination.

Chaîne (au choix : MOVE, COPY et MODE_UNSPECIFIED) Vrai

Restrictions en termes de dénomination

Lorsque l'observabilité du parc est activée, le contrôleur d'observabilité du parc réserve les noms suivants aux objets journaux qu'il crée. Pour éviter tout comportement indésirable ou inattendu, vous devez éviter d'utiliser ces noms lorsque vous créez vos propres buckets de journaux et récepteurs, ou lorsque vous définissez des filtres d'exclusion.

Fonctionnalité activée Objet créé Nom utilisé par l'observabilité de parc
defaultConfig Récepteur fleet-o11y-FLEET_PROJECT_NUMBER-default
Filtre d'exclusion. fleet-o11y-FLEET_PROJECT_NUMBER-default-exclusion. Ce nom est réservé dans le récepteur _Default du projet de cluster.
fleetScopeLogsConfig Bucket de journaux fleet-o11y-scope-SCOPE_NAME
  • Vue des journaux pour les journaux de conteneur dans le bucket
  • fleet-o11y-scope-SCOPE_NAME-k8s_container
  • Vue des journaux pour les journaux de pod dans le bucket
  • fleet-o11y-scope-SCOPE_NAME-k8s_pod
    Récepteur fleet-o11y-FLEET_PROJECT_NUMBER-scope-SCOPE_NAME
    Filtre d'exclusion fleet-o11y-FLEET_PROJECT_NUMBER-scope-exclusion

    Dépannage

    Cette section explique comment résoudre les problèmes liés à la journalisation de parc.

    Notification par e-mail concernant une erreur de configuration du récepteur

    Si vous avez reçu un e-mail intitulé [ACTION REQUIRED] Cloud Logging sink configuration error in <Your GCP Project>, cela signifie que le compte de service de votre récepteur de journaux n'est pas autorisé à écrire des journaux sur la destination du récepteur. Pour résoudre ce problème, suivez la procédure décrite dans la section Autorisations de journalisation multiprojet.

    Message d'erreur inconnu de l'interface utilisateur Cloud Logging

    Si l'erreur suivante s'affiche dans l'interface utilisateur de Cloud Logging, vérifiez que les variables project_id et scope saisies dans l'URL sont correctes.

    Error: There is an unknown error while executing this operation.
    

    Erreur de membre introuvable

    L'erreur suivante peut s'afficher :

    ERROR: (gcloud.alpha.container.fleet.memberships.bindings.create) NOT_FOUND: Resource 'parent resource not found for projects/...' was not found
    

    Assurez-vous d'avoir enregistré le cluster dans un parc.