La journalisation est sans doute l'élément le plus important de votre solution d'observabilité. Les journaux fournissent des informations fondamentales et riches sur le comportement du système. Dans un monde idéal, vous prendriez toutes les décisions concernant la journalisation et mettriez en œuvre une approche cohérente sur l’ensemble de votre système.
Cependant, dans le monde réel, vous pouvez travailler avec des logiciels existants ou gérer différents langages de programmation, frameworks et packages open source, chacun avec son propre format et sa propre structure de journalisation.
Avec une telle diversité de formats de journaux dans votre système, quelles mesures pouvez-vous prendre pour extraire le plus de valeur de tous vos journaux ? C'est ce que nous aborderons dans cet article.
Nous examinerons comment les journaux peuvent être conçus, les défis et les solutions liés à la journalisation dans les grands systèmes, et comment réfléchir aux métriques basées sur les journaux et à la conservation à long terme.
Examinons les niveaux et les formats de journaux.
De nombreuses considérations entrent en jeu dans la conception des journaux, mais les deux aspects les plus importants sont l'utilisation des niveaux de journaux et l'utilisation de formats de journaux structurés ou non structurés.
Les niveaux de journalisation sont utilisés pour classer les messages de journal en fonction de leur gravité. Les niveaux de journalisation spécifiques utilisés peuvent varier en fonction du cadre ou du système de journalisation. Cependant, les niveaux de journalisation couramment utilisés incluent (par ordre de verbosité, du plus élevé au plus bas) :
La journalisation au niveau approprié permet de comprendre le comportement du système, d'identifier les problèmes et de les résoudre efficacement.
Lorsqu'il s'agit des composants système que vous créez, nous vous recommandons de consacrer du temps à la définition de l'ensemble des niveaux de journalisation utiles. Comprenez quels types d'informations doivent être incluses dans les messages à chaque niveau de journalisation et utilisez les niveaux de journalisation de manière cohérente.
Nous verrons plus tard comment gérer les applications tierces, pour lesquelles vous n'avez aucun contrôle sur les niveaux de journalisation. Nous examinerons également les applications existantes que vous contrôlez mais qui sont trop volumineuses pour migrer vers les niveaux de journalisation standard.
Les entrées dans les journaux structurés ont un format bien défini, généralement sous forme de paires clé-valeur ou d'objets JSON. Cela permet d'obtenir des entrées de journal cohérentes et lisibles par machine, ce qui facilite l'analyse des données de journal par programmation.
La journalisation structurée permet une interrogation et une analyse avancées des journaux, ce qui la rend particulièrement utile dans les systèmes à grande échelle.
D'un autre côté, la journalisation non structurée (forme libre) capture les messages dans un format plus lisible par l'homme, sans structure prédéfinie. Cette approche permet aux développeurs d'enregistrer les messages de manière plus naturelle et plus flexible.
Cependant, extraire par programme des informations spécifiques des journaux résultants peut s’avérer très difficile.
Le choix entre les journaux structurés et non structurés dépend de vos besoins spécifiques ainsi que des exigences et contraintes de votre système. Si vous prévoyez avoir besoin d'une analyse avancée des journaux ou d'une intégration avec des outils d'analyse des journaux, les journaux structurés peuvent offrir des avantages significatifs.
Toutefois, si vous avez uniquement besoin de simplicité et de lisibilité, les journaux non structurés peuvent suffire.
Dans certains cas, une approche hybride peut également être utilisée, dans laquelle vous utilisez des journaux structurés pour les événements importants et des journaux non structurés pour les messages plus généraux.
Pour les systèmes à grande échelle, vous devriez vous tourner vers la journalisation structurée lorsque cela est possible, mais notez que cela ajoute une autre dimension à votre planification. L'attente pour les messages de journal structurés est que le même ensemble de champs sera utilisé de manière cohérente dans tous les composants du système. Cela nécessitera une planification stratégique.
Avec des systèmes comprenant plusieurs composants, chaque composant aura très probablement son propre modèle pour gérer ses journaux. Passons en revue les défis que cela entraîne.
Les composants se connecteront à différentes destinations : fichiers, journaux système, stdout ou stderr. Dans les systèmes distribués, la collecte de ces journaux dispersés pour une utilisation efficace est fastidieuse.
Pour cela, vous aurez besoin d'une approche diversifiée de la collecte de journaux, comme l'utilisation de collecteurs installés et de collecteurs hébergés de Sumo Logic.
Certains composants utiliseront une journalisation non structurée et de forme libre, ne suivant aucun format en particulier. Parallèlement, les journaux structurés peuvent être plus organisés, mais les composants dotés de journaux structurés peuvent utiliser des ensembles de champs complètement différents.
Unifier les informations que vous obtenez à partir d’une diversité de journaux et de formats nécessite les bons outils.
Les composants de votre système peuvent utiliser différentes plages de niveaux de journalisation. Même si vous consolidez tous les messages de journal dans un système de journalisation centralisé (comme vous le devriez), vous devrez gérer l'union de tous les niveaux de journalisation.
Un défi qui se pose est celui où différents niveaux de log doivent être traités de la même manière. Par exemple, ERREUR dans un composant peut être identique à CRITIQUE dans un autre composant, nécessitant une escalade immédiate.
Vous êtes confronté au défi inverse lorsque le même niveau de journalisation dans différents composants signifie des choses différentes. Par exemple, les messages INFO dans un composant peuvent être essentiels pour comprendre l'état du système, tandis que dans un autre composant, ils peuvent être trop verbeux.
Les grands systèmes distribués accumulent de nombreux journaux. La collecte et le stockage de ces journaux coûtent cher. Les coûts liés aux journaux dans le cloud peuvent représenter une part importante du coût total du système.
Bien que les défis liés à la journalisation dans de grands systèmes distribués soient importants, des solutions peuvent être trouvées grâce à certaines des pratiques suivantes.
Lorsque vous exécutez un système distribué, vous devez utiliser une solution de journalisation centralisée. Lorsque vous exécutez des agents de collecte de journaux sur chaque machine de votre système, ces collecteurs enverront tous les journaux à votre plateforme d'observabilité centrale.
Sumo Logic, qui s'est toujours concentré sur la gestion et l'analyse des journaux , est le meilleur de sa catégorie en matière d'agrégation de journaux.
Le traitement des journaux dans différents formats constitue un gros problème si vous souhaitez corréler les données des journaux à des fins d'analyse et de dépannage entre les applications et les composants. Une solution consiste à transformer différents journaux dans un format unifié.
Le niveau d'effort pour cette tâche peut être élevé, alors envisagez de le faire par étapes, en commençant par vos composants les plus essentiels et en descendant progressivement.
Pour vos propres applications, travaillez à établir une approche de journalisation standard qui adopte un ensemble uniforme de niveaux de journalisation, un format de journal structuré unique et une sémantique cohérente.
Si vous possédez également des applications existantes, évaluez le niveau de risque et le coût associés à leur migration pour respecter votre norme.
Si une migration n’est pas réalisable, traitez vos applications existantes comme vous le feriez avec des applications tierces.
L'enrichissement des journaux à partir de sources tierces implique d'améliorer les données des journaux avec des informations contextuelles provenant de systèmes ou de services externes. Cela apporte une meilleure compréhension des événements de journal, facilitant les activités de dépannage, d’analyse et de surveillance.
Pour enrichir vos journaux, vous pouvez intégrer des systèmes externes (tels que des API ou des files d'attente de messages) pour récupérer des données supplémentaires liées aux événements de journal (telles que des informations utilisateur, des détails sur le client ou des métriques système).
Une gestion minutieuse du volume, de la fréquence et de la conservation des journaux est cruciale pour une gestion et un stockage efficaces des journaux.
Les mesures dérivées de l'analyse des données de journaux peuvent fournir des informations sur le comportement et les performances du système. Le fonctionnement des métriques basées sur les journaux présente des avantages et des défis.
Définir des métriques significatives : étant donné que l'ensemble des métriques à votre disposition dans tous vos composants est incroyablement vaste (et qu'il ne serait pas logique de toutes les capturer), l'identification des métriques à capturer et à extraire des journaux peut s'avérer une tâche complexe.
Cette identification nécessite une compréhension approfondie du comportement du système et un alignement étroit avec vos objectifs commerciaux.
Extraction et analyse des données : l'analyse des journaux pour extraire des métriques utiles peut nécessiter des outils spécialisés ou des analyseurs personnalisés. Cela est particulièrement vrai si les journaux ne sont pas structurés ou formatés de manière incohérente d'un composant à l'autre.
Cette configuration peut prendre du temps et nécessiter une maintenance à mesure que les formats de journaux changent ou que de nouvelles sources de journaux émergent.
Après avoir opté pour l'agrégation des journaux dans un système centralisé, vous devrez toujours envisager des politiques de conservation des journaux à long terme. Voyons les questions critiques pour ce domaine.
La durée pendant laquelle vous devez conserver un journal dépend de plusieurs facteurs, notamment :
La suppression des anciens journaux est bien entendu le moyen le plus simple de réduire vos coûts de stockage. Cependant, cela peut être un peu lourd et vous souhaiterez parfois conserver les informations des anciens journaux.
Lorsque vous souhaitez conserver les informations des anciens journaux, mais que vous souhaitez également être rentable, envisagez de prendre certaines de ces mesures :
Dans cet article, nous avons examiné comment tirer le meilleur parti de la journalisation dans des systèmes à grande échelle.
Bien que la journalisation dans ces systèmes présente un ensemble unique de défis, nous avons examiné des solutions potentielles à ces défis, telles que l'agrégation des journaux, la transformation des journaux dans un format unifié et l'enrichissement des journaux avec des données provenant de sources tierces.
La journalisation est un élément essentiel de l’observabilité. En suivant les pratiques décrites dans cet article, vous pouvez garantir que vos journaux sont gérés efficacement, ce qui vous permet de résoudre les problèmes, d'identifier les problèmes et d'obtenir des informations sur le comportement de votre système.
Et vous pouvez le faire tout en maîtrisant vos coûts d’exploitation forestière.
Également publié ici