debianやubuntuでsyslogを1年分残す
debianやubuntuのログの回転周期は4個になっていますので、
流量が多かったりなんかすると4日でログが回転してしまいます。
これはつまり4日前のログしかないという状態です。
私は/var/logのsyslogやmaillogあたりは1年分欲しいなと思いまして、
チューニングすることにしました。
設定を見て行くと、syslogのログはlogrotateで回転するのでなく、
- /etc/cron.daily/sysklogd
- /etc/cron.weekly/syslogd
の2つのファイルで回転するというのがわかります。
動作としては、
- ある程度大きなログファイルは毎日回転したい
- 大きくなくても週に1回は回転したい
という動作のようです。
中を見てみると、
for LOG in `syslogd-listfiles`
という部分があります。
syslogd-listfilesというコマンドは回転する必要があるsyslogの
ファイル一覧を取得するコマンドです。
# syslogd-listfiles --help Debian GNU/Linux syslogd-listfiles. Copyright (c) 1997,2001 Martin Schulze. This is free software; see the GNU General Public Licence version 2 or later for copying conditions. There is NO warranty. Usage: syslogd-listfiles <options> Options: -f file specifies another syslog.conf file -a | --all list all files (including news) --auth list all files containing auth.<some prio> --ignore-size don't rotate files which got too large --large nnn define what is large in bytes (default: 10MB) --news include news logfiles, too -w | --weekly use weekly pattern instead of daily -s pattern skip files matching pattern
こんな感じになっています。
毎日回転する大きさは10MBを超えた場合になっているようです。
ただし、syslogファイルだけは毎日回転する仕様のようです。
私がやりたいことはsyslogファイルは毎日更新して、52個残す。
maillogなどのログは毎週更新して1年分残す。
ただし、あまりに大きくなった場合だけ、1日1回の回転にひっかける。
ということなので、以下のように変えました。
/etc/cron.daily/sysklogd
cd /var/log for LOG in `syslogd-listfiles --large 100000000` do if [ -s $LOG ]; then savelog -g adm -m 640 -u root -c 52 $LOG >/dev/null fi done
/etc/cron.daily/sysklogd
cd /var/log for LOG in `syslogd-listfiles --weekly` do if [ -s $LOG ]; then savelog -g adm -m 640 -u root -c 52 $LOG >/dev/null fi done
syslogだけは毎日回転して、52個まで。
100MB以上のログは毎日回転して、52個まで。
その他のログは毎週回転して、52個まで。
としました。
この設定だとsyslogは1年分残らないですが、
まあいいことにします。