典型的なLinuxシステムにログファイルが非常に多いのはなぜですか?1つの統合ログdb / fileとapiを使用しないのはなぜですか?


8

なぜ典型的なLinuxシステムにそんなに多くのログファイルがあるのだろう。すべてのアプリケーションからのすべてのログエントリを保存するために、ロギング用の1つのシステムAPI関数と1つの統合されたテーブルを用意する方が良いでしょうか?


1
リファクタリングされた付録の質問:* nixが非常に成熟していると考えると、なぜログ(&conf)の命名規則と場所がまだ散発的で一貫性がないのですか?ファイルの拡張子は、ヒトでの使用のために純粋にされている場合は、その理由(レガシー用およびシンボリックリンク)のすべての開発者が使用することに同意することはできません.logし、.conf識別子として?
dhaupin 2016年

回答:


16

これは、Unixの哲学の一部です。テキストファイルにはプログラムのロックインがなく、誰もが好きな方法を使用できるという考え方です。これをさらに進めるために、XMLなどのマークアップ言語とは対照的に、フラットファイルがよく使用されます(XML形式で物を格納するプログラムも見たことがあります)。

グーグルで、私はUnixの哲学についてのコメントとともに、プレーンテキストに関するこの素晴らしい記事を見つけました。



15

単純なテキストファイルを使用すると、ログエントリを取得するためにデータベース固有のツールが不要になるという利点があります。

必要に応じてgrepでそれらを分析したり、お気に入りのポケットベルで開いたり、PerlやPythonなどのお気に入りのスクリプト言語で処理したりできます。追加のライブラリは必要ありません。

Unixシステムでは、すでに「システムログAPI」のようなものがあります。これはsyslogと呼ばれます。Syslogは実際にはAPIではありませんが、メッセージを記録するための標準です。この名前は、ネットワークプロトコルと、その背後にあるライブラリとデーモンを表しています。

ほとんどのシステムのデフォルト設定は、ローカルメッセージをリスンするsyslogデーモンです。

デーモンはメッセージを受け入れ、ロギングを行います。あらゆる種類のプラットフォーム用のsyslogデーモンの実装がいくつかあり、メッセージをデータベースに記録することも可能です。

それはあなた次第です。


10

なぜ典型的なLinuxシステムにそんなに多くのログファイルがあるのだろう。

異なるログファイルには、異なる情報が含まれています(ただし、通常は重複があります)。多くの場合、それらには異なる特性があります。異なるローテーションおよび保持ポリシー、異なる権限などです。syslogデーモンがそれらの書き込みを処理します。/etc/syslog.confまたはで設定を確認できます/etc/syslog-ng.conf

ロギング用に1つのシステムAPI関数を用意するのは良い考えではないでしょうか

これは良いアイデアです。それをsyslogと呼びましょう。その仕事は、ログエントリをsyslogデーモンに送信することです。

すべてのアプリケーションからのすべてのログエントリを保存する1つの統合テーブル?

これでワーム全体ができました。データベースエンジン、おそらくリレーショナルデータベース、おそらくSQLでクエリできるものの存在を想定しているようです。しかし、UnixはSQLよりも古く、SQLを標準コンポーネントとして採用していないのには十分な理由があります。Unixでは、データベースはファイルシステムです。これはリレーショナルデータベースではなく、単純なデータベースです。そのエントリは行ではなく、単純なファイル、できればテキスト、できれば単純な形式のテキストです。たとえば、ログファイルはテキストファイルであり、1行に1つのエントリがあり、日付、マシン名、元のプログラム、およびエントリテキストが含まれています。リレーショナルデータベースを使用すると、いくつかの欠点があります。

  • データベースが機能していない場合はどうしますか?(ファイルシステムは基本的なコンポーネントです(そして、リレーショナルデータベースよりもはるかに単純だと言ったことはありますか?)syslogデーモンは、1つのジョブ(Unix設計の一般的な機能)を実行するシンプルなコンポーネントであり、適切に機能することが期待されていますそして確実に。
  • データベース操作をどのように記録しますか?(もちろん、データベース自体を通じて-すべてのログにカーネルとsyslogデーモンからのエントリが含まれていますが、データベースが複雑になるほど、これは難しくなり、信頼性が低下します)。
  • どのようにログエントリにアクセスしますか?シンプルさを比較catgreplessSQLクエリに対して。そして、一般的なリレーショナルデータベースでこれをどのように処理するかはわかりません。
  • マルチサーバーインストールでは、ログをローカルに保存せず、UNIXの黎明期からsyslogデーモンに組み込まれているリモートログ機能を使用します。これは、UNIXロギングアーキテクチャで実装するのは簡単です。そのような複雑な予算で複製データベースを実行することはできません。


1

これは、「tail -f /var/log/apache/access.log」のようなことを不可能にします。

すべてを1つのファイルに入れる方が良いと思うのはなぜですか?


1
grep '\[apache\]' | tail -f /dev/stdin-サーバー上にユーザーごとのログがある(ユーザーが他のユーザーのログにアクセスできない場合)。
Maciej Piechotka

「なぜすべてを1つのファイルにまとめた方がよいと思いますか?」-私はSQLが好きなので;-)そして、多くのことを覚えておきたくない(ほとんどできない)からです。
Ivan

11
SQLだけを知っていると、すべてがリレーショナルデータベースの問題のように見えます。
David Mackintosh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.