access.log は 10.5 GB です。適切なログ管理手順は何ですか?

access.log は 10.5 GB です。適切なログ管理手順は何ですか?

時々ログをクリアする以外に、ログ管理は行っていません。トラフィックがそれほど多くないサーバーがあります (ほとんどのログはライブ チャットからのものです)。しかし、ログを適切に管理するには、どのようなログ管理手順を実施すればよいのか疑問に思いました。特定のものだけがログに記録されるように設定したり、ログを何日か消去するように設定したりしていますか? アクセス ログはどのくらいの期間保存する必要がありますか? その他のログはどのくらいの期間保存する必要がありますか?

答え1

私のログファイルもそのせいで大きくなります。私は、ほぼすべての Linux ディストリビューションで利用できる標準の logrotate を使用しています。

大きすぎるものは毎日、その他は毎週、といったようにログローテーションするように設定しました。

ぜひお試しください。xz で圧縮しているので、ファイルは比較的小さく、どちらの側でも帯域幅をあまり失うことなく、個人用のボックスにダウンロードして調べることができます。

詳細については、man logrotate および man logrotate.conf を参照してください。

答え2

まず、Web サーバーが access.log に追加されることを理解してください。そのため、ログのサイズは最小限に抑える必要があります。私の Apache サーバーでは、ログ ファイルが 4 GB を超えるとページの読み込みが遅くなります (おそらく、これに気付いているのは私だけでしょう)。

awstats を試してみてください。トラフィックの詳細な表示を可能にする HTML ベースのファイルが作成され、巨大な access.log ファイルが消去されます。このアプリケーションを初めて実行すると、access.log が非常に大きいため、非常に長い時間がかかります。

awstats または logrotate が役に立たない場合は、cron を使用して access.log を 1 日に 1 回削除することもできます。

echo "" > access.log

しかし、個人的には、非常に高速に切り捨てる必要がある巨大なログ ファイルがある場合にのみこれを使用します。このように切り捨てるのは、ログの無駄遣いです。

答え3

使用クロノログ時間別ログ ファイルまたは日別ログ ファイルを作成します。使用方法をご覧ください。

TransferLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log"
ErrorLog    "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/errors.log"

cronjob を使用して上記のログを圧縮し、ディスクがいっぱいになるのを防ぎ、データを数日間 (1 か月前のものでも可) 保持します。

または、logrotateを使用してログをローテーションします(上記の回答で説明したとおり)

関連情報