サーバを運用していると必ずログと付き合うことになります。
このログは「/var/log/」に蓄積されていきます。
このログファイルという物は、そのままにしておけば溜まる一方でディスク容量を圧迫していきます。
これを回避する為にログローテーションという手段を行います。
今回は FreeBSD の newsyslog を利用してローテーションを行います。
newsyslog は、指定したファイルを特定のタイミング(時間)または指定した容量を超えたときにログを切り詰めて指定した圧縮形式で、指定した数までバックアップを残します。
まずは現在の newsyslog の設定ファイルである newsyslog.conf を確認してみます。
$vi /etc/newsyslog.conf
多分次のような情報がでてくると思います。
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/appfirewall.log 640 5 1000 * J
/var/log/system.log 640 7 * @T00 J
/var/log/wtmp 644 3 * @01T05 B
このとき表示されているのは左から
logfilename
ログローテーションする対象のファイル
[owner:group]
所有者とグループ
mode
アクセス権
640なら-rw-r-----
count
バックアップ最大数
0からのスタートなので実質6個
size
切り出し開始サイズ
1000なら1000kbの意味で、ログファイルが1000kbを超えたらローテーションが開始される
when
切り出し開始時間
*ならサイズに合わせる。
@から始まる物は
@[[[[[cc]yy]mm]dd][T[hh[mm[ss]]]]] (制限付きISO8601形式)
cc | 西暦上2桁 |
---|---|
yy | 西暦下2桁 |
mm | 月 |
dd | 日 |
hh | 時 |
mm | 分 |
ss | 秒 |
$ から始まる物は
$[Dhh],$[Ww[Dhh]],$[Mdd[Dhh]]
D | 毎日 |
---|---|
W | 毎週 |
M | 毎月 |
hh | 時間(0〜23) |
w | 曜日(0:日曜日〜6:土曜日) |
dd | 日(1〜31) |
L | 月の最後の日 |
数字だけの物
時間指定
168 なら168時間で1週間、332 で2週間
flags
圧縮タイプ
Zはgz圧縮、Jはbz圧縮、Bは無圧縮
[/pid_file]
該当するデーモンのpidファイル
httpdなら /var/run/httpd.pid
[sig_num]
該当するデーモンのシグナル番号
「/var/log/apache2/」の中の「access.log」を1000kb以上溜まったらローテーションし、最大10個までgz圧縮残しておきたいたいという場合は次のような記述になります。
/var/log/apache2/access.log 640 9 1000 * Z /var/run/httpd.pid 30
設定を保存したら root権限で newsyslog コマンドを実行します。
# newsyslog restart