知りたいのは、スバリ利用しているapacheのlogrotateスクリプトです。しかし、他にも知りたいのは
・基本的なログ管理のポリシー
・どの頻度で切り出しているか?
・どのようなディレクトリ
・圧縮しているか?
・できれば、どのように保存・管理しているのか?
などです。
Web サーバのログは基本的に全て残すつもりなので、また 0:00 できっかり区切りたいので、logrotate は使わず rotatelogs を使っています。
ローテーション頻度は日次で切っています。
出力先はディストリビューションのデフォルト設定の (Debian を使っています) /var/log/apache2/ に。
具体的には下記のような設定ですね。
CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/access.%Y%m%d.log 86400 540" combined
ErrorLog "|/usr/sbin/rotatelogs /var/log/apache2/error.%Y%m%d.log 86400 540"
ただし過去ログが全部同じディレクトリに溜まると鬱陶しいので、cron.daily に下記のようなスクリプトを置き、過去ログを bzip2 圧縮し /var/log/apache2/past/ ディレクトリに移動しています。
#!/usr/bin/env perl
use strict;
use warnings;
use POSIX qw(strftime);
# 生ログのある場所と過去ログを移動する場所
my $logdir = '/var/log/apache2';
my $pastdir = '/var/log/apache2/past';
# 圧縮に使用するコマンドと拡張子
my $cmd = 'bzip2';
my $ext = 'bz2';
# 本日
my $today = strftime('%Y%m%d', localtime);
# 本日以外の生ログを圧縮する
system("find $logdir -name '*.log' ! -name '*.$today.log' | nice -19 xargs $cmd");
# 圧縮されたログを過去ログディレクトリに移動する
system("mv $logdir/*.log.$ext $pastdir/");
(Apache のログは bzip2 圧縮が覿面に効きますね。gzip 圧縮した場合よりさらに2/3程度に縮みます。)
* 自分用のメモより
なんのひねりもなくlogrotateを使っています。
毎日 /var/log/httpd のログを /var/log/httpd/00old にコピーして圧縮する。
/etc/logrotate.d/httpd
/var/log/httpd/*log { daily copytruncate nomissingok ifempty nosharedscripts nocompress postrotate EXT=`date --date '1 days ago' '+%Y%m%d'` for f in $1 do /bin/mv $f.1 $f.$EXT done endscript lastaction EXT=`date --date '1 days ago' '+%Y%m%d'` /bin/mv /var/log/httpd/*.$EXT /var/log/httpd/00old/ /usr/bin/bzip2 -9 /var/log/httpd/00old/*.$EXT /bin/rm /var/log/httpd/*.1 endscript }
もっとスマートなやり方があるかも。
たぶん、レンタルサーバーでも運営していないかぎり、WEBサーバーのログにそんなにこだわっている人は少ないでしょう。
検索した範囲では、こだわり派はこんな感じ。
http://www.atmarkit.co.jp/flinux/rensai/apache14/apache14a.html
http://www.rescue.ne.jp/CGI-BBS/server/apache/20020227224425.sht...
機能します。機能しています。
知りたいのは
・weeklyなどで、access_log.1,access_log.2,ccess_log.3,などと増えていくのは管理しづらい、利用しづらい
・他の方がどのようなlogrotateスクリプトを利用しているのか?
・それを利用している理由を知りたい。
・良いものがあれば、利用したい。
という目的のためです。