一般的なLinuxシステムになぜそれほど多くのログファイルがあるのか疑問に思います。ロギングのために1つのシステムAPI機能とすべてのアプリケーションのすべてのログエントリを保持する1つの包括的なテーブルを使用する方が良い考えではありませんか?
答え1
答え2
単純なテキストファイルを使用すると、ログエントリを取得するためにデータベース関連のツールが必要ないという利点があります。
必要に応じてgrepで分析し、好みのポケットベルで開くことができ、追加のライブラリなしで好みのスクリプト言語(Perl、Pythonなど)で処理できます。
Unixシステムにはすでにある種の「syslog API」があります。これをsyslogと呼びます。 Syslogは実際のAPIではありませんが、メッセージロギングの標準です。名前は、ネットワークプロトコルとその背後にあるライブラリとデーモンを表します。
ほとんどのシステムのデフォルト設定は、ローカルメッセージを受信するsyslogデーモンです。
デーモンはメッセージを受け入れて記録します。あらゆる種類のプラットフォームにさまざまなsyslogデーモン実装があり、データベースにメッセージを記録することもできます。
それはあなた次第です。
答え3
一般的なLinuxシステムになぜそれほど多くのログファイルがあるのか疑問に思います。
ログファイルごとに異なる情報が含まれています(通常はいくつかの重複があります)。異なる循環および保存方針、異なる権限など、異なる特性を持つことがよくあります。 syslogデーモンはこれを作成するのに役立ち、その設定を見ることができます。/etc/syslog.conf
または/etc/syslog-ng.conf
。
ロギングにシステムAPI機能を使用する方が良い考えではないでしょうか?
これは良いアイデアです。そう呼ぶシステムログ。これは、ログエントリをsyslogデーモンに送信することです。
そして、すべてのアプリケーションのすべてのログエントリを保持する包括的なテーブルが必要ですか?
今それはワーム缶詰になりました。データベースエンジン、リレーショナルデータベース、SQLでクエリできるデータベースがあると仮定しているようです。しかし、UNIXはSQLより古いため、SQLを標準コンポーネントとして採用しないのにはそのような理由がある。 Unixでは、データベースはファイルシステムです。リレーショナルデータベースではありません。シンプル一つ。その項目は行ではありませんが、シンプルファイル、好ましくはテキスト、好ましくは単純な形式である。たとえば、ログファイルは、日付、システム名、元のプログラム、および項目テキストを含む項目が1行に1つずつあるテキストファイルです。リレーショナルデータベースを使用すると、次のような多くの欠点があります。
- データベースが機能しない場合はどうなりますか? (ファイルシステムは基本的なコンポーネントです(リレーショナルデータベースよりはるかに簡単だと言っていますか?) )。
- データベースタスクを記録する方法は? (もちろん、データベース自体を介して - すべてのログにはカーネルとsyslogデーモンのエントリが含まれていますが、もう一度複雑なデータベースのため、これはより困難で信頼できなくなります。)
- ログエントリにどのようにアクセスしますか?
cat
をSQLクエリの単純さと比較してくださいgrep
。less
ファイル権限、まあ、一般的なリレーショナルデータベースでこれを処理する方法がわかりません。 - マルチサーバーインストールでは、ログをローカルに保存するのではなく、Unixの誕生後にsyslogデーモンに組み込まれているリモートロギング機能を使用します。これは、UNIXロギングアーキテクチャを使用して簡単に達成できます。複雑な予算ではレプリケーションデータベースを実行できません。
答え4
これにより、「tail -f /var/log/apache/access.log」などの操作ができなくなります。
なぜすべてを1つのファイルに入れる方が良いと思いますか?