Personnalisation des journaux Cloud Logging pour Google Kubernetes Engine avec Fluentd

Ce tutoriel explique comment personnaliser la journalisation Fluentd pour un cluster Google Kubernetes Engine. Vous apprendrez à héberger votre propre daemonset Fluentd configurable pour envoyer des journaux à Cloud Logging,au lieu de sélectionner l'option de journalisation sur le cloud lors de la création du cluster Kubernetes Engine, cette option ne permettant pas de configurer le daemon Fluentd.

Objectifs

  • Déployez votre propre daemonset Fluentd sur un cluster Google Kubernetes Engine, configuré pour enregistrer les données dans Cloud Logging. Nous partons du principe que vous connaissez déjà Kubernetes.
  • Personnalisez la journalisation GKE pour supprimer les données sensibles des journaux Cloud Logging.
  • Personnalisez la journalisation GKE pour ajouter les événements au niveau du nœud aux journaux Cloud Logging.

Coûts

Ce tutoriel utilise des composants facturables de Cloud Platform, dont :

Le simulateur de coût estime le coût de cet environnement à environ 1,14 $ pour 8 heures.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activer les API Google Kubernetes Engine, Compute Engine.

    Activer les API

Initialiser des variables communes

Vous devez définir plusieurs variables qui contrôlent l'emplacement où sont déployés les éléments de l'infrastructure.

  1. À l'aide d'un éditeur de texte, modifiez le script suivant en remplaçant votre ID du projet par [YOUR_PROJECT_ID]. Le script définit la région sur us-east-1. Si vous apportez des modifications au script, assurez-vous que les valeurs de zone font référence à la région spécifiée.

    region=us-east1
    zone=${region}-b
    project_id=[YOUR_PROJECT_ID]
    
  2. Accédez à Cloud Shell.

    Ouvrir Cloud Shell

  3. Copiez le script dans votre fenêtre Cloud Shell et exécutez-le.

  4. Exécutez les commandes suivantes pour définir la zone et l'ID du projet par défaut afin que vous n'ayez pas à spécifier ces valeurs dans chacune des commandes suivantes :

    gcloud config set compute/zone ${zone}
    gcloud config set project ${project_id}
    

Créer le cluster GKE

Sauf indication contraire, vous saisissez toutes les commandes de ce tutoriel sur la ligne de commande de votre ordinateur ou dans Cloud Shell.

  1. Clonez l'exemple de dépôt. L'exemple de dépôt comprend les fichiers manifestes Kubernetes pour l'élément daemonset Fluentd et un programme de journalisation de tests que vous déploierez :

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-customize-fluentd
    
  2. Changez votre répertoire de travail dans le dépôt cloné :

    cd kubernetes-engine-customize-fluentd
    
  3. Créez le cluster GKE avec la journalisation système uniquement activée :

    gcloud beta container clusters create gke-with-custom-fluentd \
       --zone us-east1-b \
       --enable-logging-monitoring-system-only \
       --tags=gke-cluster-with-customized-fluentd \
       --scopes=logging-write
    

Déployer l'application de l'enregistreur de test

Par défaut, l'exemple d'application que vous déployez émet en continu des instructions de journalisation aléatoires. Le conteneur Docker qu'il utilise est disponible sur gcr.io/cloud-solutions-images/test-logger, et son code source est inclus dans le sous répertoire test-logger.

  1. Déployer l'application test-logger sur le cluster GKE :

    kubectl apply -f kubernetes/test-logger.yaml
    
  2. Afficher l'état des pods test-logger :

    kubectl get pods
    
  3. Répétez cette commande jusqu'à ce que la sortie ressemble à ce qui suit, avec les trois pods test-logger en cours d'exécution :

    Sortie de commande montrant trois pods en cours d'exécution

Déployer l'élément daemonset Fluentd sur votre cluster

Vous allez ensuite configurer et déployer le daemonset Fluentd.

  1. Déployez la configuration Fluentd :

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  2. Déployez le daemonset Fluentd :

    kubectl apply -f kubernetes/fluentd-daemonset.yaml
    
  3. Vérifiez que les pods Fluentd ont démarré :

    kubectl get pods --namespace=kube-system
    

    S'ils s'exécutent, la sortie est la suivante :

    Sortie de commande montrant trois pods en cours d'exécution

  4. Vérifiez que les journaux s'affichent dans Logging. Dans la console, sur la gauche, sélectionnez Logging > Logs Viewer (Logging > Visionneuse de journaux), puis sélectionnez Kubernetes Container (Conteneur Kubernetes) en tant que Type de ressource dans la liste Ressource.

  5. Cliquez sur Exécuter la requête (Run Query).

  6. Dans le panneau Logs field explorer (Explorateur de champs de journaux), sélectionnez test-logger pour CONTAINER_NAME :

    Liste Logging répertoriant les données non filtrées

Filtrer les informations du fichier journal

Dans l'étape suivante, vous allez indiquer à Fluentd de filtrer certaines données afin qu'elles ne soient pas journalisées. Pour ce tutoriel, vous devez filtrer les numéros de sécurité sociale, les numéros de carte de crédit et les adresses e-mail. Pour effectuer cette mise à jour, vous modifiez l'élément daemonset afin d'utiliser un autre ConfigMap contenant ces filtres. Vous utilisez la fonctionnalité de mises à jour progressives de Kubernetes et conservez l'ancienne version de ConfigMap.

  1. Ouvrez le fichier kubernetes/fluentd-configmap.yaml dans un éditeur.

  2. Effacez les commentaires situés entre les lignes (non incluses) ### sample log scrubbing filters et ### end sample log scrubbing filters :

    ############################################################################################################
    #  ### sample log scrubbing filters
    #  #replace social security numbers
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #     log ${record["log"].gsub(/[0-9]{3}-*[0-9]{2}-*[0-9]{4}/,"xxx-xx-xxxx")}
    #   </record>
    # </filter>
    # # replace credit card numbers that appear in the logs
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #      log ${record["log"].gsub(/[0-9]{4} *[0-9]{4} *[0-9]{4} *[0-9]{4}/,"xxxx xxxx xxxx xxxx")}
    #   </record>
    # </filter>
    # # replace email addresses that appear in the logs
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #     log ${record["log"].gsub(/[\w+\-]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+/i,"user@email.tld")}
    #   </record>
    # </filter>
    # ### end sample log scrubbing filters
    #############################################################################################################
  3. Modifiez le nom de ConfigMap de fluentd-gcp-config vers fluentd-gcp-config-filtered en modifiant le champ metadata.name :

    name: fluentd-gcp-config
    namespace: kube-system
    labels:
      k8s-app: fluentd-gcp-custom
  4. Enregistrez et fermez le fichier.

Mettre à jour le daemonset Fluentd pour utiliser la nouvelle configuration

Vous allez maintenant modifier kubernetes/fluentd-daemonset.yaml pour installer le composant ConfigMap fluentd-gcp-config-filtered à la place de fluentd-gcp-config.

  1. Ouvrez le fichier kubernetes/fluentd-daemonset.yaml dans un éditeur.

  2. Modifiez le nom de ConfigMap de fluentd-gcp-config vers fluentd-gcp-config-filtered en modifiant le champ configMap.name :

    - configMap:
        defaultMode: 420
        name: fluentd-gcp-config
      name: config-volume
  3. Déployez la nouvelle version de ConfigMap sur votre cluster :

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  4. Déployez la nouvelle version du daemonset :

    kubectl apply -f kubernetes/fluentd-daemonset.yaml
  5. Déployez la mise à jour et attendez qu'elle soit terminée :

    kubectl rollout status ds/fluentd-gcp-v3.2.0 --namespace=kube-system
    

    Résultat de la commande affichant les messages

  6. Une fois le déploiement terminé, actualisez les journaux Logging et assurez-vous que le numéro de sécurité sociale, le numéro de carte de crédit et les données d'adresse e-mail ont été filtrés.

    Liste Logging répertoriant les mêmes données, mais filtrées

Configurer la journalisation des événements au niveau du nœud

Si vous souhaitez que les événements qui se produisent sur vos nœuds GKE s'affichent également dans Logging, ajoutez les lignes suivantes à votre ConfigMap et suivez les instructions décrites dans la dernière section :

<source>
  @type systemd
  filters [{ "SYSLOG_IDENTIFIER": "sshd" }]
  pos_file /var/log/journal/gcp-journald-ssh.pos
  read_from_head true
  tag sshd
</source>

<source>
  @type systemd
  filters [{ "SYSLOG_IDENTIFIER": "sudo" }]
  pos_file /var/log/journal/gcp-journald-sudo.pos
  read_from_head true
  tag sudo
</source>

Nettoyer

Une fois que vous avez terminé le tutoriel, vous pouvez effacer les ressources que vous avez créées sur GCP afin qu'elles ne vous soient plus facturées.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer .
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer le cluster GKE

Si vous ne souhaitez pas supprimer l'ensemble du projet, exécutez la commande suivante pour supprimer le cluster GKE :

gcloud container clusters delete gke-with-custom-fluentd --zone us-east1-b

Étapes suivantes