Warum gibt es in einem typischen Linux-System so viele Protokolldateien? Warum verwenden sie nicht eine konsolidierte Protokolldatenbank / -datei und eine API?

8

Ich frage mich nur, warum es in einem typischen Linux-System so viele Protokolldateien gibt. Wäre es nicht eine bessere Idee, eine System-API-Funktion für die Protokollierung und eine konsolidierte Tabelle zu haben, um alle Protokolleinträge aus allen Anwendungen zu speichern?

Ivan
quelle
1
Refactored Appendage Frage: Wenn man bedenkt, dass * nix so ausgereift ist, warum sind Namenskonventionen für log (& conf) + Speicherorte immer noch so sporadisch und inkonsistent? Wenn Dateierweiterungen nur für den menschlichen Gebrauch bestimmt sind, warum können nicht alle Entwickler (und Symlinks für Legacy) der Verwendung .logund .confals Bezeichner zustimmen ?
Dhaupin

Antworten:

16

Es ist Teil der Unix-Philosophie . Die Idee ist, dass Textdateien frei von Programm-Lock-In sind und jeder die Technik verwenden kann, die er bevorzugt. Um dies weiter zu führen, werden häufig Flatfiles verwendet, im Gegensatz zu Markup-Sprachen wie XML (obwohl ich Programme gesehen habe, die Dinge auch im XML-Format speichern).

Beim Googeln habe ich diesen schönen Artikel über Klartext mit Kommentaren zur Unix-Philosophie gefunden.

Phunehehe
quelle
15

Die Verwendung einfacher Textdateien hat den Vorteil, dass Sie keine datenbankspezifischen Tools benötigen, um Ihre Protokolleinträge abzurufen.

Sie können sie mit grep analysieren, wenn Sie möchten, Sie können sie mit Ihrem bevorzugten Pager öffnen und Sie können sie in Ihrer bevorzugten Skriptsprache wie Perl, Python usw. verarbeiten, ohne dass zusätzliche Bibliotheken erforderlich sind.

Auf einem Unix-System haben Sie bereits eine Art "Systemprotokoll-API". Es heißt Syslog. Syslog ist eigentlich keine API, aber ein Standard zum Protokollieren von Nachrichten. Der Name steht für das Netzwerkprotokoll und die dahinter stehende Bibliothek und den Daemon.

Die Standardkonfiguration der meisten Systeme ist ein Syslog-Daemon, der lokale Nachrichten abhört.

Der Dämon akzeptiert die Nachrichten und führt die Protokollierung durch. Es gibt verschiedene Implementierungen von Syslog-Daemons für alle Arten von Plattformen, und es ist auch möglich, Ihre Nachrichten in einer Datenbank zu protokollieren.

Es liegt an dir.

Echox
quelle
10

Ich frage mich nur, warum es in einem typischen Linux-System so viele Protokolldateien gibt.

Die verschiedenen Protokolldateien enthalten unterschiedliche Informationen (obwohl normalerweise einige Duplikate vorliegen). Sie weisen häufig unterschiedliche Merkmale auf: unterschiedliche Rotations- und Aufbewahrungsrichtlinien, unterschiedliche Berechtigungen usw. Der Syslog-Daemon kümmert sich um das Schreiben. Sie können die Einstellungen in /etc/syslog.confoder sehen /etc/syslog-ng.conf.

Wäre es nicht eine bessere Idee, eine System-API-Funktion für die Protokollierung zu haben?

Dieser ist eine gute Idee. Nennen wir es Syslog . Seine Aufgabe ist es, die Protokolleinträge an den Syslog-Daemon zu senden.

und eine konsolidierte Tabelle, um alle Protokolleinträge aus allen Anwendungen zu speichern?

Das ist eine ganze Dose Würmer. Sie scheinen das Vorhandensein eines Datenbankmoduls anzunehmen, wahrscheinlich einer relationalen Datenbank, die Sie wahrscheinlich in SQL abfragen können. Unix ist jedoch älter als SQL, und es gibt sehr gute Gründe, warum SQL nicht als Standardkomponente übernommen wurde. Unter Unix ist die Datenbank das Dateisystem. Es ist keine relationale Datenbank, es ist eine einfache . Seine Einträge sind keine Zeilen, sondern einfache Dateien, vorzugsweise Text, vorzugsweise mit einem einfachen Format. Protokolldateien sind beispielsweise Textdateien mit einem Eintrag pro Zeile, der das Datum, den Computernamen, das Ursprungsprogramm und den Eintragstext enthält. Die Verwendung einer relationalen Datenbank hätte eine Reihe von Nachteilen:

  • Was machen Sie, wenn die Datenbank nicht funktioniert? (Das Dateisystem ist eine grundlegende Komponente (und habe ich schon erwähnt, dass es viel einfacher ist als eine relationale Datenbank?); Der Syslog-Daemon ist eine einfache Komponente, die einen Job ausführt (eine häufige Funktion im Unix-Design) und daher voraussichtlich gut funktioniert und zuverlässig.)
  • Wie protokollieren Sie Datenbankoperationen? (Ok, über die Datenbank selbst - schließlich enthalten die Protokolle Einträge vom Kernel und vom Syslog-Daemon -, aber auch hier macht eine viel komplexere Datenbank dies schwieriger und weniger zuverlässig.)
  • Wie greifen Sie auf Protokolleinträge zu? Vergleichen Sie die Einfachheit cat, grep, lessgegen SQL - Abfragen. Und Dateiberechtigungen gegen, nun, ich weiß nicht, wie Sie damit in einer typischen relationalen Datenbank umgehen würden.
  • Installationen mit mehreren Servern speichern ihre Protokolle nicht lokal, sondern verwenden die Remote-Protokollfunktion, die seit den Anfängen von Unix in den Syslog-Daemon integriert ist. Mit der Unix-Protokollierungsarchitektur ist dies einfach zu implementieren. Sie können keine replizierte Datenbank mit diesem Komplexitätsbudget ausführen.
Gilles 'SO - hör auf böse zu sein'
quelle
1

Dies würde Dinge wie 'tail -f /var/log/apache/access.log' unmöglich machen.

Warum ist es Ihrer Meinung nach besser, alles in einer Datei zu speichern?

Kristof Provost
quelle
1
grep '\[apache\]' | tail -f /dev/stdin- aber Benutzer auf dem Server anmelden (wenn der Benutzer keinen Zugriff auf das Protokoll eines anderen Benutzers hat).
Maciej Piechotka
"Warum denkst du, wäre es besser, alles in eine Datei zu packen?" - Weil ich SQL liebe ;-) Und weil ich es nicht mag (und kaum kann), viele Dinge im Auge zu behalten.
Ivan
11
Wenn Sie nur SQL kennen, sieht alles wie ein relationales Datenbankproblem aus.
David Mackintosh