Je me demande simplement pourquoi y a-t-il autant de fichiers journaux dans un système Linux typique? Ne serait-il pas préférable d'avoir une fonction API système pour la journalisation et une table consolidée pour enregistrer toutes les entrées de journal de toutes les applications?
8
.log
et.conf
comme identificateurs?Réponses:
Cela fait partie de la philosophie Unix . L'idée est que les fichiers texte sont libres de verrouillage du programme et que chacun peut utiliser la technique qu'il préfère. Pour aller plus loin, les fichiers plats sont souvent utilisés, contrairement aux langages de balisage comme XML (bien que j'ai vu des programmes stocker des choses au format XML également).
Dans googler, j'ai trouvé cette belle écriture sur le texte brut, avec des commentaires sur la philosophie Unix.
la source
L'utilisation de fichiers texte simples présente l'avantage de ne nécessiter aucun outil spécifique à la base de données pour obtenir vos entrées de journal.
Vous pouvez les analyser avec grep si vous le souhaitez, vous pouvez les ouvrir avec votre pager préféré et vous pouvez les traiter dans votre langage de script préféré comme Perl, Python, etc. sans avoir besoin de bibliothèques supplémentaires.
Sur un système Unix, vous avez déjà une sorte d '"API de journal système". Il s'appelle syslog. Syslog n'est pas vraiment une API mais c'est un standard pour la journalisation des messages. Le nom représente le protocole de mise en réseau et la bibliothèque et le démon derrière lui.
La configuration par défaut de la plupart des systèmes est un démon syslog écoutant les messages locaux.
Le démon accepte les messages et effectue la journalisation. Il existe plusieurs implémentations différentes des démons syslog pour tous les types de plates-formes et il est également possible de consigner vos messages dans une base de données.
C'est comme tu veux.
la source
Les différents fichiers journaux contiennent des informations différentes (bien qu'il y ait généralement une certaine duplication). Ils ont souvent des caractéristiques différentes: différentes politiques de rotation et de rétention, différentes autorisations, etc. Le démon syslog se charge de les écrire; vous pouvez voir ses paramètres dans
/etc/syslog.conf
ou/etc/syslog-ng.conf
.Celui-ci est une bonne idée. Appelons-le syslog . Son travail consiste à envoyer les entrées de journal au démon syslog.
Maintenant, c'est toute une boîte de vers. Vous semblez supposer la présence d'un moteur de base de données, probablement une base de données 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 base de données est le système de fichiers. Ce n'est pas une base de données relationnelle, c'est simple . Ses entrées ne sont pas des lignes, mais de simples fichiers, de préférence du texte, de préférence avec un format simple. Par exemple, les fichiers journaux sont des fichiers texte, avec une entrée par ligne, contenant la date, le nom de la machine, le programme d'origine et le texte d'entrée. L'utilisation d'une base de données relationnelle aurait un certain nombre d'inconvénients:
cat
,grep
, dansless
des requêtes SQL. Et les autorisations de fichiers contre, eh bien, je ne sais pas comment vous géreriez cela dans une base de données relationnelle typique.la source
Si vous souhaitez vraiment stocker vos journaux système dans une base de données relationnelle (ce qui peut avoir de nombreux avantages), consultez rsyslog ( le remplacement à venir de syslog ), qui peut écrire des journaux système dans une base de données MySQL , Postgres ou Oracle .
la source
Cela rendrait impossible des choses comme «tail -f /var/log/apache/access.log».
Pourquoi pensez-vous qu'il serait préférable de tout mettre dans un seul fichier?
la source
grep '\[apache\]' | tail -f /dev/stdin
- mais ayant une connexion par utilisateur sur le serveur (lorsque l'utilisateur n'a pas accès au journal des autres utilisateurs).