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
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.
Assurez-vous que les clusters dont vous souhaitez afficher les journaux ont été enregistrés dans le parc choisi.
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.
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ù :
- FLEET_HOST_PROJECT_ID est l'ID de votre projet hôte de parc. Découvrez comment identifier cette valeur.
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.
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
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.
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
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\"" } } ], }
Mettez à jour la stratégie IAM :
gcloud projects set-iam-policy FLEET_HOST_PROJECT_ID output.json
Pour plus d'options sur les autorisations d'accès, consultez la page Contrôler 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 :
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)
Cliquez sur le champ d'application d'équipe dont vous souhaitez afficher les journaux, puis sur l'onglet Journaux.
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 :
- Sur la page Teams (Équipes), avec le champ d'application d'équipe sélectionné, cliquez sur l'onglet Namespaces (Espaces de noms).
- Cliquez sur l'espace de noms dont vous souhaitez afficher les journaux, puis sur l'onglet Journaux.
- 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
Enregistrez la configuration suivante dans un fichier nommé
disable_logging_config.json
:{ "loggingConfig": {} }
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 |
Sink | 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 |
fleet-o11y-scope-SCOPE_NAME-k8s_container |
||
fleet-o11y-scope-SCOPE_NAME-k8s_pod |
||
Sink | 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.