Note : 6 ; Comprendre le “log shipping” avec fluentd !
Avec 300 pages, l’ouvrage est légèrement au-dessus de la moyenne, il compte 11 chapitres répartis en 4 parties, ce qui est un découpage également raisonnable. La première partie « From zero to hello world » ne cache pas son caractère introductif et nous propose 2 chapitres sur une soixantaine de pages. S’il est déjà bien focalisé sur Fluentd, le premier chapitre d’une trentaine de pages couvre bien les problématiques du « log shipping » en corrélation sur ce qu’est un élément de log. Il ne manque pas non plus d’évoquer son concurrent de toujours, Logstash. C’est une bonne introduction, fort prometteuse. Le second chapitre nous fait découvrir à haute altitude les éléments structurants de Fluentd. Cela permet de mieux le conceptualiser en tant que « ESB pour les logs ». Mais le gros du chapitre est consacré au déploiement et aux nombreuses options possibles. C’est certes intéressant, mais je trouve le propos assez déséquilibré dans ce chapitre.
La seconde partie « Fluentd in depth » explicite bien le titre sa finalité. Il couvre une centaine de pages avec 4 chapitres. Le chapitre 3 nous permet de rentrer dans l’action en mettant en œuvre pour capturer les évènements de log à la source, mais en l’occurrence uniquement sous forme de fichiers. C’est dommage, car Fluentd permet aussi de capturer d’autres sources, mais ce sera en partie traité plus tard. Le second volet traite du parsing permettant d’imposer une structure au log dès leur capture. Au final une bonne couverture du sujet, même si elle est limitée aux fichiers. C’est fort logiquement à l’ouput qu’est consacré le chapitre 4. On y découvre des possibilités que l’on ne soupçonnait pas : buffering (pour grouper les évènements à des fins d’optimisation), compression, etc. Contrairement au chapitre 3, l’auteur nous met en perspectives la mise en œuvre sur plusieurs destinations, de quoi nous donner envie !
Les choses se compliquent au chapitre 5 où il est question de routage. C’est le côté ESB de Fluentd. Il faut un peu s’accrocher pour bien saisir les notions de copie d’évènements et surtout de réécriture des tags, car l’outils utilise essentiellement ceux-ci pour le routage, ce qui fait un peu bricolage de mon point de vue. On termine en beauté avec la notion de pipeline qui donne toute sa dimension à Fluentd, mais il faut s’accrocher un peu. Cette seconde partie se referme sur un chapitre 6 consacré au filtrage et à l’enrichissement des évènements. Là encore, on découvre la puissance insoupçonnée du log shipping. Si les filtres nous permettent de déclencher des actions spécifiques sur certains logs, l’enrichissement nous ouvre les portes sur l’ajout d’informations de contexte ou la « rédaction » de logs qui permet d’éliminer de ceux-ci les données à caractère personnel ! Bref, là encore de belles perspectives.
La 3ème partie « au-delà des basiques » porte bien son nom et va couvrir des aspects qui n’intéressent pas tout le monde. On prend pour près d’une centaine de pages sur 3 chapitres. Le chapitre 7 qui ouvre le feu est consacré aux performances au sens large. Si le propos débute effectivement par la performance sensu-stricto s’appuyant sur le modèle multi-thread des workers, on arrive rapidement sur les patterns « fan-in » et « fan-out » qui nous amènent sur le sujet de la gestion des credentials. Je regrette toutefois que ce dernier sujet soit traité un peu légèrement, par exemple l’association à un vault de type HashiCorp est tout juste évoqué. D’un autre côté, le modèle conteneur aurait eu d’avantage sa place au chapitre suivant, ainsi que le side-car pattern qui est plus particulièrement lié à Kubernetes.
Kubernetes, justement est au programme du chapitre 8 qui lui consacre une grosse trentaine de pages. Il intéressera principalement les pro de cet environnement, car il ne s’arrête pas au modèle de déploiement mais évoque des sujets pointus tels que klog ou la capture d’informations d’environnement. Mais pour tout dire, je ne suis pas venu pour cela. Le chapitre 9 qui referme cette 3ème partie est consacré au développement de plugins. Attention, il s’agit de code en Ruby ! En fait, il ne s’agit que d’une introduction, mais elle a le mérité de nous introduire au cycle de vie du plugin. Le sujet choisi, l’interfaçage avec Redis et plus précisément RedisTimeSeries n’est pas non plus dénué d’intérêt (et m’a rendu curieux sur le sujet !).
La dernière partie est à considérer avec intérêt : on y parle des bonnes pratiques de logging. Le chapitre 10, en particulier clarifie la différence entre audit et logs, les différents niveaux de log, et les composantes d’un évènement de log. Ces bases devraient faire partie du cursus de base d’ingénierie de développement. Enfin, le chapitre 11 décortiques les composants d’un framework de log, en s’appuyant sur le plus classique : log4j ! Finalement, c’est à la toute fin de l’ouvrage que l’auteur nous dévoile la manière de s’interfaccer avec une librairie de log sans passer par l’écriture d’un fichier. Mais bien entendu, cela nécessite un writter spécifique côté framework.
Ce livre peut être abordé de deux manière : soit sous l’angle « culture générale », pour appréhender concrètement un outil de log shipping, et comprendre ses fonctionnalités, soit sous l’angle développement en mettant en œuvre les exercices proposés. Je me suis arrêté au premier niveau, mais c’est déjà une lecture particulièrement instructive pour bien appréhender une partie de ce qu’est un pipeline d’observabilité. Une lecture recommandée aux forcenés souhaitant rentrer en profondeur sur ce sujet.
Référence complète : Logging in Action – Phil Wilkins – Manning 2022 – ISBN: 978 1 61729 835 6
