任意ログのローテート
やりたいこと~カスタムログのローテート・圧縮~
ロードバランサー(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 # 圧縮する } -----
これで大丈夫だろう。