Pourquoi y a-t-il autant de files journaux dans un système Linux typique? Pourquoi n'utilisent-ils pas un journal consolidé db / file et un api?

Je me request simplement pourquoi y a-t-il autant de files journaux dans un système Linux typique? Ne serait-il pas préférable d'avoir une seule fonction api système pour la journalisation et une table consolidée pour save toutes les inputs de journal de toutes les applications?

Cela fait partie de la philosophie Unix . L'idée est que les files text sont libres de locking du programme et tout le monde peut utiliser la technique qu'ils préfèrent. Pour aller plus loin, les files plats sont souvent utilisés, par opposition aux langages de balisage comme XML (même si j'ai vu des programmes stockant des choses au format XML).

En google, j'ai trouvé cette belle écriture sur le text brut, avec des commentaires sur la philosophie Unix.

L'utilisation de files text simples présente l'avantage de ne nécessiter aucun outil spécifique à la database pour get vos inputs de journal.

Vous pouvez les parsingr avec grep si vous le souhaitez, vous pouvez les ouvrir avec votre téléavertisseur préféré et les traiter dans votre langage de script favori comme Perl, Python, etc., sans avoir besoin de bibliothèques supplémentaires.

Sur un système Unix, vous avez déjà une sorte de "API Log Log". Il s'appelle syslog. Syslog n'est pas vraiment une API mais c'est une norme pour la journalisation des messages. Le nom représente le protocole réseau et la bibliothèque et le démon derrière.

La configuration par défaut de la plupart des systèmes est un démon syslog qui écoute les messages locaux.

Le démon accepte les messages et effectue la journalisation. Il existe plusieurs implémentations différentes de démons syslog pour tous les types de plates-forms et il est également possible de consigner vos messages dans une database.

C'est à toi de decider.

Je me request simplement pourquoi y a-t-il autant de files journaux dans un système Linux typique?

Les différents files journaux contiennent des informations différentes (bien qu'il existe généralement une certaine duplication). Ils ont souvent des caractéristiques différentes: différentes stratégies de rotation et de rétention, différentes permissions, etc. Le démon syslog prend soin de les écrire; vous pouvez voir ses parameters dans /etc/syslog.conf ou /etc/syslog-ng.conf .

Ne serait-il pas préférable d'avoir une seule fonction api système pour la journalisation

Celui-ci est une bonne idée. Appelons cela syslog . Son travail consiste à envoyer les inputs de journal au démon syslog.

et une table consolidée pour save toutes les inputs de journal de toutes les applications?

Maintenant c'est toute une boîte de Pandore. Vous semblez supposer la présence d'un moteur de database, probablement une database relationnelle, probablement celle que vous pouvez interroger en SQL. Mais Unix est plus ancien que SQL, et il y a de très bonnes raisons pour lesquelles il n'a pas adopté SQL comme composant standard. Sous Unix, la database est le système de files. Ce n'est pas une database relationnelle, c'est simple . Ses inputs ne sont pas des lignes, mais des files simples , de preference du text, de preference avec un format simple. Par exemple, les files journaux sont des files text, avec une input par ligne, contenant la date, le nom de l'ordinateur, le programme d'origine et le text d'input. L'utilisation d'une database relationnelle aurait un certain nombre d'inconvénients:

  • Que faites-vous si la database ne fonctionne pas? (Le système de files est un composant fondamental (et je l'ai mentionné c'est beaucoup plus simple qu'une database relationnelle?), Le démon syslog est un composant simple qui fait un travail (une caractéristique commune dans Unix design) et devrait donc le faire bien et fiable.)
  • Comment connectez-vous les opérations de database? (Ok, à travers la database elle-même – après que tous les journaux contiennent des inputs du kernel et du démon syslog – mais encore une database beaucoup plus complexe rend cela plus difficile et less fiable).
  • Comment accédez-vous aux inputs de journal? Comparez la simplicité de cat , grep , less aux requêtes SQL. Et permissions de files contre, eh bien, je ne sais pas comment vous gérer cela dans une database relationnelle typique.
  • Les installations multi-servers ne stockent pas leurs journaux localement, ils utilisent la fonction de journal distant qui a été embeddede dans le démon syslog depuis à peu près l'aube d'Unix. C'est facile à implémenter avec l'architecture de consignation unix; vous ne pouvez pas exécuter une database répliquée sur ce budget de complexité.

Si vous voulez vraiment stocker vos journaux système dans une database relationnelle (qui peut avoir de nombreux avantages), consultez rsyslog ( le rlocation à venir pour syslog ), qui permet d'écrire des journaux système dans une database MySQL , Postgres ou Oracle .

Cela rendrait les choses comme 'tail -f /var/log/apache/access.log' impossible.

Pourquoi pensez-vous qu'il serait préférable de tout mettre dans un seul file?