Personnalisation des journaux Stackdriver pour 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 à Stackdriver, au lieu de sélectionner l'option de journalisation sur le cloud lors de la création du cluster Kubernetes Engine, qui ne permet pas la configuration du daemon Fluentd.

Objectifs

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

Coûts

Ce tutoriel fait appel à des composants facturables de Cloud Platform, en particulier :

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. Sélectionnez ou créez un projet Google Cloud Platform.

    Accéder à la page "Gérer les ressources"

  3. Assurez-vous que la facturation est activée pour votre projet Google Cloud Platform.

    Découvrir comment activer la facturation

  4. Activez Google Kubernetes Engine, Compute Engineles API requises.

    Activer les API.

Initialiser les variables courantes

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 alors que la journalisation du cloud est désactivée :

    gcloud beta container clusters create gke-with-custom-fluentd \
       --zone us-east1-b \
       --no-enable-cloud-logging \
       --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éployez l'application test-logger sur le cluster GKE :

    kubectl apply -f kubernetes/test-logger.yaml
    
  2. Affichez 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 vous voyez les fichiers journaux dans Stackdriver. Dans la console, dans le menu de gauche, cliquez sur Stackdriver > Logging > Logs (Stackdriver > Logging > Journaux), puis sélectionnez Kubernetes Container (Conteneur Kubernetes) dans la liste.

    Liste Stackdriver 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. Changez le nom de l'élément ConfigMap de fluentd-gcp-config en 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

Modifiez maintenant le fichier kubernetes/fluentd-daemonset.yaml pour qu'il monte 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 dans le champ configMap.name en remplaçant fluentd-gcp-config par fluentd-gcp-config-filtered :

    - 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 "Waiting" (en attente) pour 3 pods, puis l'aboutissement

  6. Une fois le déploiement terminé, actualisez les journaux Stackdriver 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 Stackdriver 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 Stackdriver, 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 la console GCP, accédez à la page Projets.

    Accéder à la page Projets

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer delete.
  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

  • Consultez la documentation Fluentd plus en détail.
  • Consultez la documentation de Google Kubernetes Engine plus en détail.
  • Testez par vous-même d'autres fonctionnalités de Google Cloud Platform. Découvrez nos tutoriels.
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…