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
}
}
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の値を換えれば分割時間幅がかわります。
コメント
コメントする
- 匿名でのコメントは受け付けておりません。
- お名前(ハンドル名可)とメールアドレスは必ず入力してください。
- メールアドレスを表示されたくないときはURLも必ず記入してください。
- コメント欄でHTMLタグは使用できません。
- コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
- コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。
- 投稿ボタンを押してエラーがでなければ、投稿は成功しています。反映されるまでには少し時間がかかります。