Apache のログ管理
いい年こいていまさらながらチャットモンチーにはまってしまいました。えっちゃんマジ天使。こんにちは nakamura です。
ある程度 Apache を触っている人なら、何をいまさらなちょいネタですが、今日は大体いつも設定している Apache のログ管理の方法をご紹介しようと思います。
まずはローテートする
Apache には rotatelogs というコマンドがデフォルトでくっついてきます。こいつを使うと logrotate とか使わずに、日時でログのローテーションが可能になります。logrotate と違って Apache の再読み込みも必要ないしいい事ずくめなので、僕が Apache をセットアップする時は基本的に使ってます。
こんな感じでバーチャルホスト毎に日別でログをローテートしてます。
<VirtualHost *:80>
ServerName example.com
ServerAdmin admin@example.com
DocumentRoot /home/projects/c-brains.jp/htdocs
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/access_log.http.%Y%m%d 86400 540" combined
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/error_log.http.%Y%m%d 86400 540"
<Directory "/home/projects/c-brains.jp/htdocs">
Options None
AllowOverride None
Order Deny,Allow
</Directory>
</VirtualHost>
rotatelogs の細かいオプションについては こちら をどうぞ。
圧縮する
ローテートされて書きこまれなくなったログファイルは滅多に中身を見る事もないので、圧縮しちゃいましょう。こんな感じのスクリプトを日次で走らせています。
#!/bin/bash
# ファイル名に本日の日付を含まず、まだ圧縮されていないファイルを圧縮
find /var/log/httpd/*/ -type f ! -name "*`date +%Y%m%d`*" ! -name "*.gz" -print0 | xargs -0 gzip
削除する
HDD 容量に余裕があるのならそれほど気にする必要はありませんが、さすがにもう要らんやろー!っていうぐらい古いログファイルは削除しちゃってもよいと思います。
#!/bin/bash
# 365日よりも前に作成されたファイルを削除
find /var/log/httpd/*/ -type f ! -mtime +365 -print0 | xargs -0 gzip
以上!!