La journalisation est quelque chose qui est nécessaire mais qui est (relativement) rarement utilisée. En tant que tel, il peut être rendu beaucoup plus compact en termes de stockage.
Par exemple, les données les plus communément enregistrées, telles que ip, date, heure et d’autres données pouvant être représentées sous forme d’entier, sont stockées sous forme de texte.
Si la journalisation était stockée sous forme de données binaires, une grande quantité d’espace pourrait être préservée, ce qui nécessiterait moins de rotation et augmenterait la durée de vie du disque, en particulier avec les disques SSD où les écritures sont limitées.
Certains diront peut-être que c'est un problème tellement mineur que cela n'a pas vraiment d'importance, mais compte tenu des efforts nécessaires pour mettre en place un tel mécanisme, cela n'a aucun sens de ne pas le faire. N'importe qui peut faire ça pendant deux jours dans son temps libre, pourquoi les gens ne le font-ils pas?
Réponses:
systemd
célèbre stocke ses fichiers journaux au format binaire. Les principaux problèmes que j'ai entendus sont les suivants:vi
,grep
,tail
etc pour les analyserLa principale raison d'utiliser un format binaire (à ma connaissance) était qu'il était jugé plus facile de créer des index, etc. c'est-à-dire de le traiter davantage comme un fichier de base de données.
Je dirais que l'avantage d'espace disque est relativement faible (et en diminution) en pratique. Si vous souhaitez stocker de grandes quantités de journalisation, il est très efficace de compresser les journaux roulés.
Dans l’ensemble, les avantages de l’outillage et de la familiarité pèseraient probablement du côté de la journalisation de texte dans la plupart des cas.
la source
myapp.log
jusqu'à minuit, puis se déplace vers ce fichiermyapp.log.1
et commence à écrire dans un nouveaumyapp.log
fichier. Et les anciensmyapp.log.1
sont déplacés versmyapp.log.2
, et ainsi de suite, ils roulent tous ensemble. Ainsi,myapp.log
est toujours l'actuel. Ou ils peuvent basculer lorsqu'une certaine taille est atteinte. Peut-être qu'ils ont mis la date / heure dans le nom du fichier. De nombreux frameworks de journalisation supportent ce genre de choses immédiatement.rotating
est également utilisé d'après ce que je sais.Pourquoi la plupart des fichiers journaux utilisent-ils du texte brut plutôt qu'un format binaire?
Recherchez le mot "texte" dans l'article Wikipedia sur la philosophie Unix , par exemple, vous trouverez des énoncés tels que:
Ou par exemple, à partir des bases de la philosophie Unix ,
N'importe qui peut faire ça pendant deux jours dans son temps libre, pourquoi les gens ne le font-ils pas?
Stocker le fichier journal en binaire n'est que le début (et trivial). Vous devez ensuite écrire des outils pour:
edit
)tail -f
)grep
)Bien entendu, les logiciels peuvent également utiliser des formats de fichiers binaires (par exemple, pour des bases de données relationnelles), mais cela n’en vaut pas la peine (au sens de YAGNI ), et ne vaut généralement pas la peine d’être utilisé pour les fichiers journaux.
la source
tail -f
j'exécute un fichier journal de plusieurs gigaoctets, il passe à la fin du fichier (en utilisant "chercher" sans "lire"), puis lit et affiche uniquement la fin du fichier. Il n'est pas nécessaire de décompresser / décoder le fichier entier.Il y a beaucoup de présomptions discutables ici.
L’exploitation forestière fait partie intégrante (presque) de tous les emplois que j’ai occupés. C'est essentiel si vous voulez une visibilité quelconque sur la santé de vos applications. Je doute que ce soit un usage "marginal"; la plupart des organisations auxquelles j'ai participé considèrent que les journaux sont très importants.
Stocker les journaux sous forme binaire signifie que vous devez les décoder avant de pouvoir les lire. Les journaux de texte ont la vertu de la simplicité et de la facilité d'utilisation. Si vous envisagez la route binaire, vous pouvez également stocker les journaux dans une base de données, où vous pouvez les interroger et les analyser statistiquement.
Les disques SSD sont plus fiables que les disques durs de nos jours, et les arguments contre de nombreuses écritures sont en grande partie théoriques. Si cela vous inquiète vraiment, stockez vos journaux sur un disque dur ordinaire.
la source
Les fichiers journaux sont une partie essentielle de toute application sérieuse: si la journalisation dans l'application est bonne, ils vous permettent de voir quels événements clés sont survenus et quand; quelles erreurs se sont produites; et l’intégrité générale de l’application qui va au-delà de ce que la surveillance a été conçue. Il est courant d’entendre parler d’un problème, de vérifier les diagnostics intégrés de l’application (ouvrez sa console Web ou d’utiliser un outil de diagnostic tel que JMX), puis de vérifier la configuration. les fichiers journaux.
Si vous utilisez un format autre que texte, vous vous trouvez immédiatement face à un obstacle: comment lire les journaux binaires? Avec l'outil de lecture de journaux, qui n'est pas sur vos serveurs de production! Ou alors, mais oh mon Dieu, nous avons ajouté un nouveau champ et voici l'ancien lecteur. N'avons-nous pas testé cela? Oui, mais personne ne l'a déployé ici. Pendant ce temps, votre écran commence à s'allumer et les utilisateurs vous envoient une requête ping.
Ou peut-être que ce n'est pas votre application, mais vous apportez un soutien et vous pensez savoir que c'est cet autre système, et WTF? les journaux sont au format binaire? Ok, commencez à lire les pages du wiki et par où commencez-vous? Maintenant, je les ai copiées sur mon ordinateur local, mais - elles sont corrompues? Ai-je fait une sorte de transfert non binaire? Ou bien l'outil de lecture de journaux est-il foiré?
En bref, les outils de lecture de texte sont multi-plateformes et omniprésents, et les journaux ont souvent une longue durée de vie et doivent parfois être lus rapidement . Si vous inventez un format binaire, vous êtes coupé de tout un monde d'outils bien compris et faciles à utiliser. Perte sérieuse de fonctionnalité au moment où vous en avez besoin.
La plupart des environnements de journalisation trouvent un compromis: garder les journaux actuels lisibles et présents, et compresser les plus anciens. Cela signifie que vous bénéficiez de la compression, d'autant plus qu'un format binaire ne réduirait pas les messages du journal. Dans le même temps, vous pouvez utiliser less et grep , etc.
Alors, quels sont les avantages possibles de l’utilisation du binaire? Une petite quantité d'efficacité de l'espace - de plus en plus sans importance. Moins (ou plus petit) écrit? En fait, le nombre d'écritures dépendra du nombre de validations de disque. Par conséquent, si les lignes de journal sont nettement plus petites que la taille du bloc de disque, un disque SSD affectera de nouveaux blocs de toute façon. Donc, le binaire est un choix approprié si:
mais cela ressemble moins à la journalisation d'application; ce sont des fichiers de sortie ou des enregistrements d'activité. Les mettre dans un fichier ne représente probablement qu'une étape de leur écriture dans une base de données.
MODIFIER
Je pense qu'il y a une confusion générale entre "journaux de programme" (selon les cadres de journalisation) et "enregistrements" (comme dans les journaux d'accès, les enregistrements de connexion, etc.). Je soupçonne que la question se rapporte le plus étroitement à la dernière, et dans ce cas la question est beaucoup moins bien définie. Il est parfaitement acceptable qu'un enregistrement de message ou un journal d'activité soit dans un format compact, d'autant plus qu'il est susceptible d'être bien défini et utilisé pour l'analyse plutôt que pour le dépannage. Les outils qui font cela incluent
tcpdump
et le moniteur système Unixsar
. Les journaux de programme, d’autre part, ont tendance à être beaucoup plus ponctuels.la source
/var/log/utmp
/ wtmp sont binaires . Ils enregistrent qui est actuellement connecté sur quel tty (donc ils ne font pas que grandir), mais ils constituent une forme de journalisation. (Et il est utile de pouvoir les analyser à moindre coût, car diverses commandes communeswho
font exactement cela.)Un exemple de journal quelque peu binaire est très répandu: le journal des événements Windows. Du côté des professionnels, cela permet aux messages de journalisation d’être assez verbeux (et donc utiles, espérons-le) à un coût pratiquement nul, peut-être quelque chose comme:
La partie principale de ce message n'existe qu'une seule fois en tant que ressource installée avec l'application. Toutefois, si cette ressource n’est pas installée correctement (par exemple, car une version plus récente a été installée et ne prend plus en charge ce message obsolète).
et plus utile en aucune façon.
la source
Les deux questions principales que vous voudriez poser avant de choisir entre texte et binaire sont les suivantes:
L’opinion commune est que l’audience d’un message de log est un être humain. Ce n’est évidemment pas une hypothèse parfaite, car il existe de nombreux scripts d’exploration de journaux, mais c’est un script courant. Dans ce cas, il est logique de transmettre les informations sur un support avec lequel les humains sont à l'aise. Le texte est une tradition de longue date.
En ce qui concerne le contenu, considérez qu'un journal binaire doit avoir un format bien défini. Le format doit être suffisamment défini pour que d’autres personnes puissent écrire un logiciel qui fonctionne sur ces journaux. Certains journaux sont assez bien structurés (votre question en énumère plusieurs). D'autres journaux ont besoin de pouvoir transmettre le contenu dans une forme de langage naturel moins bien définie. De tels cas de langage naturel sont une mauvaise correspondance pour les formats binaires.
Pour les journaux qui pourraient être bien décrits en binaire, vous devez faire un choix. Parce que le texte fonctionne pour tout le monde, il est souvent considéré comme le choix par défaut. Si vous enregistrez vos résultats sous forme de texte, les utilisateurs peuvent utiliser vos journaux. Cela a été prouvé des milliers de fois. Les fichiers binaires sont plus difficiles. En conséquence, il est possible que les développeurs produisent du texte simplement parce que tout le monde sait à quoi cela va ressembler.
la source
TL; DR: La taille n'a pas vraiment d'importance, mais la facilité d'utilisation l'est
Tout d'abord, si la comparaison des avantages respectifs des formats texte et binaire pour le stockage de journaux à court terme est une question importante, la taille importe peu. Les deux raisons à cela sont:
Les journaux sont des informations hautement redondantes qui compresseront très bien: selon mon expérience, il n'est pas rare de voir des fichiers journaux compressés dont la taille est égale ou inférieure à 5% à celle du fichier d'origine. Par conséquent, l'utilisation d'un format texte ou binaire ne devrait avoir aucun impact mesurable sur le stockage à long terme des journaux.
Quel que soit le format choisi, les journaux rempliront rapidement un disque serveur si nous n’implémentons pas de «collecteur de fichiers journaux» qui compresse et envoie les fichiers journaux à une plate-forme de stockage à long terme. L'utilisation d'un format binaire pourrait ralentir un peu ce processus, mais même un changement d'un facteur 10 importerait peu.
Formats texte et journal binaire
La promesse des systèmes Unix est que, si nous apprenons à utiliser l'ensemble d'outils standard pour travailler sur des fichiers texte structurés en lignes (telles que grep , trier , rejoindre , sed et awk) , nous pourrons les utiliser pour assembler rapidement des prototypes exécutant n'importe quel travail. nous voulons, quoique lentement et grossièrement. Une fois que le prototype a démontré son utilité, nous pouvons choisir de le transformer en un logiciel réellement conçu pour améliorer les performances ou ajouter d’autres fonctionnalités utiles. C'est, du moins à mon sens, l'essence de la philosophie Unix.
En d'autres termes, si nous devons probablement effectuer des traitements et des analyses que nous ne pouvons pas comprendre aujourd'hui, si nous ne savons pas qui doit mettre en œuvre cette analyse, etc., nous en sommes au stade où les prototypes devraient être utilisés et les formats de texte adaptés. les journaux sont probablement optimaux. Si nous devons effectuer de manière répétée un petit ensemble de traitements bien identifiés, nous devons alors concevoir un système logiciel pérenne pour effectuer cette analyse et des formats binaires ou structurés pour les journaux, tels que les bases de données relationnelles, optimale.
(Il y a quelque temps, j'ai écrit un article sur ce blog .)
la source
Les fichiers journaux sont au format texte car ils peuvent être facilement lus à l'aide de n'importe quel éditeur de texte ou en affichant le contenu via la commande de la console.
Cependant, certains fichiers journaux sont au format binaire s'il y a beaucoup de données. Par exemple, le produit sur lequel je travaille stocke un maximum de 15 000 enregistrements. Afin de stocker les enregistrements dans le moins de place possible, ils sont stockés en binaire. Cependant, une application spéciale doit être écrite pour afficher les enregistrements ou les convertir en un format pouvant être utilisé (par exemple, des feuilles de calcul).
En résumé, tous les fichiers journaux ne sont pas au format texte. Le format textuel présente l'avantage que les outils personnalisés ne sont pas nécessaires pour afficher le contenu. Lorsqu'il y a beaucoup de données, le fichier peut être au format binaire . Le format binaire nécessitera une application (personnalisée) pour lire les données et les afficher dans un format lisible par l'homme. Plus de données peuvent être regroupées dans un format binaire. Utiliser le format texte ou le format binaire est une décision qui repose sur la quantité de données et la facilité de visualisation du contenu.
la source
Dans les systèmes embarqués où je n'ai peut-être pas de canal de sortie disponible au moment de l'exécution, l'application ne peut pas supporter la rapidité de frappe imposée par la journalisation, sinon la journalisation modifierait ou masquerait l'effet que j'essayais d'enregistrer. recourent à l’impression de données binaires dans un tableau ou à un tampon en anneau, soit en les imprimant à la fin de l’exécution du test, soit en les vidant brutes et en écrivant un interpréteur pour les imprimer lisibles. Quoi qu'il en soit, je veux me retrouver avec des données lisibles.
Dans les systèmes avec plus de ressources, pourquoi inventer des schémas pour optimiser ce qui n’a pas besoin d’être optimisé?
la source
Les fichiers journaux sont destinés à faciliter le débogage des problèmes. Généralement, l’espace disque dur est beaucoup moins cher que le temps d’ingénierie. Les fichiers journaux utilisent du texte car il existe de nombreux outils pour travailler avec le texte (tels que
tail -f
). Même HTTP utilise du texte brut (voyez aussi pourquoi nous n'envoyons pas de binaire plutôt que du texte sur http ).En outre, il est moins coûteux de développer un système de journalisation en texte brut et de vérifier son fonctionnement, de le déboguer plus facilement en cas de problème et de récupérer les informations utiles au cas où le système échouerait et corromprait une partie du journal.
la source
Un fichier texte corrompu est toujours lisible autour de la partie corrompue. Un fichier binaire corrompu peut être restauré, mais peut-être pas. Même s'il est restaurable, cela nécessiterait un peu plus de travail. L'autre raison est qu'un format de journalisation binaire rend moins probable la création d'une "solution temporaire" (c'est-à-dire "la plus permanente de toutes les corrections"), mais la solution de journalisation sera utilisée à la place de quelque chose qui peut être créé plus rapidement.
la source
Nous comptons sur les tests unitaires pour atteindre et maintenir la robustesse de nos logiciels. (La plupart de notre code s’exécute sur un serveur, sans tête; l’analyse post-opération des fichiers journaux est une stratégie clé.). Presque toutes les classes de notre implémentation font de la journalisation. Une partie importante de nos tests unitaires consiste à utiliser des enregistreurs "fictifs" utilisés lors des tests unitaires. Un test unitaire crée un enregistreur factice et le fournit à l'élément à tester. Il analyse ensuite (lorsque cela est utile / approprié) ce qui est consigné (en particulier les erreurs et les avertissements). L'utilisation d'un format de journal au format texte facilite grandement cette opération, essentiellement pour les mêmes raisons que pour les analyses effectuées sur de «véritables» journaux: vous disposez de plus d'outils, rapides à utiliser et à adapter.
la source
Historiquement, les journaux étaient des enregistrements d’événements officiels, écrits à la main et séquentiels. Lorsque les machines devenaient capables d’enregistrer des événements, ceux-ci étaient écrits sur un périphérique de sortie papier, tel qu’une imprimante télétype, qui produisait un enregistrement séquentiel permanent, mais ne pouvait traiter que du texte et parfois sonner une sonnerie ...
la source
À l'époque de l'ordinateur central, nous utilisions un format de journal binaire conçu sur mesure. La raison principale n'était pas de gagner de la place, mais bien parce que nous voulions que le journal occupe un espace limité en remplaçant les anciennes entrées par de nouvelles. la dernière chose que nous voulions était de ne pas pouvoir diagnostiquer les problèmes dus à la saturation des disques (en 1980, l’espace disque coûtait 1 000 dollars / Mo, de sorte que les utilisateurs n’achetaient pas plus que ce dont ils avaient besoin).
Maintenant, j'aime toujours l'idée d'un fichier journal circulaire, et si les systèmes d'exploitation offraient une telle bête, je l'utiliserais sans hésiter. Mais le binaire était une mauvaise idée. Vous ne voulez vraiment pas perdre de temps à trouver les bonnes commandes pour déchiffrer un fichier journal lorsque vous avez un problème critique à résoudre.
la source