任意ログのローテート

やりたいこと~カスタムログのローテート・圧縮~

ロードバランサー(nlb)を使ってpostfixやらdovecotを冗長化した際、ロードバランサーからヘルスチェックログが大量に出てしまい困った。
rsyslog.confをいじってロードバランサーからのログは/var/log/mail.logではなく/var/log/air.logに吐き出すように設定したのだが、これが予想以上にファイルが大きくなってしまう。
/var/logの下にあるからといって勝手にローテートも圧縮もしてくれない為、logrotateの勉強がてらローテート&圧縮するように設定してみた。

作業記録

以下の設定で意図したようにローテート、圧縮できました。
不要なログなので4世代は多すぎかもです。

vi /etc/logrotate.d/air
-----
/var/log/air.log {
    daily
    rotate 4
    create
    dateext
    ifempty
    missingok
    compress
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
-----

設定解説

項目名内容詳細
daily毎日実行する
rotateローテーションする回数
createログローテーションを行った後に新しいログファイルを生成する
dateextローテーションしたファイルの末尾に日付をつける
ifemptyログファイルが空でもローテーションする
missingokログファイルがなくてもエラーを出さない
compress 圧縮する
sharedscripts複数指定したログファイルに対し、postrotateまたはprerotateで記述したコマンドを実行

デバッグコマンド

logrotate -d /etc/logrotate.d/air でデバッグしてみるとよいかも。
わたしの場合、一日経ってもログがローテートも圧縮されもしなかった為、不思議に思ったらエラーを吐いていた。

logrotate -d /etc/logrotate.d/air 
-----
reading config file /etc/logrotate.d/air
error: /etc/logrotate.d/air:3 bad rotation count '7           # ローテーションする回数'
error: found error in /var/log/air.log , skipping
removing last 1 log configs
Allocating hash table for state file, size 15360 B

Handling 0 logs
-----

rotateが7だといけないの?とか思い4に変えてみたりしたが変わらず。
ググったところ、どうやらrotateなどの隣にコメントを入れていたのがいけなかったようだ。

NG設定

(NG例)※コメントを入れてはいけない
vi /etc/logrotate.d/air
-----
/var/log/air.log { # 対象のログファイル
    daily              # 毎日実行する
    rotate 4           # ローテーションする回数
    create             # ログローテーションを行った後に新しいログファイルを生成する
    dateext            # ローテーションしたファイルの末尾に日付をつける
    ifempty            # ログファイルが空でもローテーションする
    missingok          # ログファイルがなくてもエラーを出さない
    compress           # 圧縮する
}
-----

これで大丈夫だろう。

前の記事

ログ圧縮

次の記事

ソースコードを装飾する