Apache ログ管理

いままでほっておいたら、つけが回ってきたという感じです。そう、Apacheのログの管理をしていなかったために、ログファイルが膨大になっていました。なんと15MB
仕方がないので自動分割の設定、および既存のログファイルの分割にチャレンジしてみました。

自動分割の仕方はApacheのマニュアルに書いてあったので、簡単でした。
httpd.confに以下のコードを追加(/path/to/apacheは適宜読み替えてください)

TransferLog "| /path/to/apache/bin/rotatelogs /path/to/apache/logs/access_log 604800"

これで自動的に1週間=7*24*60*60=604800[sec]ごとにログの自動分割(ローテート)をしてくれます。604800をすきな分割時間間隔にかえればそれに従うようです。ついでにデフォルトではUserAgentやRefererのログは取り込まないようでしたので、それも修正しました。同じくhttpd.confで
CustomLog /path/to/apache/logs/access_log common

をコメントアウトして、そのすぐそばにある
#CustomLog /path/to/apache/logs/access_log combined

を有効にしました。こうすればUserAgentやRefererのログもとってくれるようになります。最後に
$ sudo apachectl graceful

を忘れないよう!!(これでhttpd.confの設定が反映されます)


次に既存のログの分割ですが、手動でやるのによいツールがないようなので、Rubyでスクリプトを書いてしまいました。
rotatelogs.rb

#/usr/local/bin/ruby
INTERVAL = 7 * 24 * 60 * 60
fname = ARGV.shift
open(fname){|f|
    f.each{|line|
        if (line =~ /\[(\d*)/(\s*)/(\d*)[^\]]*\]/) != nil then
            time = Time.gm($3, $2, $1)
            File.open(fname + "." + (INTERVAL * (time.to_i / INTERVAL).to_i).to_s , "a"){|f2|
                f2 << line
            }
        end
    }
}

これで上の自動分割と同じように既存のログファイルの分割もできます。使い方は
$sudo ruby rotatelogs.rb /path/to/apache/logs/access_log

で、intervalの値を換えれば分割時間幅がかわります。

November 23, 2003 00:51 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする