logrotate入門...

こんにちは、オタコです。
logrotateに悩まされたというかよくわかっていなかったので、勉強となります。
logrotateとは?
logrotateは多くのLinuxディストリビューションでデフォルトでインストールされているログファイルのローテーション(新しいログファイルに入替、古い世代のログファイルを圧縮、削除など)を行うソフトウェアです。
設定ファイル
設定ファイルは/etc/logrotate.confが中心となります。
この/etc/logrotate.confの中で/etc/logrotate.d/以下のファイルがincludeされます。
/etc/logrotate.d/nginxの記述例は以下のとおりとなります。
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 cat /var/run/nginx.pid
fi
endscript
}
daily
: 1日ごとにログをローテーションします。weekly
(週ごと)やmonthly
(月ごと)なども指定できます。missingok
: ログファイルが見つからない場合でもエラーとせずに続行します。rotate 14
: 14世代分のログを保持します。15世代目以降は削除されます。compress
: ローテーションされたログファイルを圧縮します。delaycompress
: ひとつ前の世代のファイルは圧縮せず、その次の世代から圧縮を開始します。これは、ログをローテーションした直後にアプリケーションがまだ古いファイルに書き込もうとすることがあるため、安全を期すための設定です。notifempty
: ログファイルが空の場合は、ローテーションを行いません。create 0640 www-data adm
: 新しいログファイルを作成する際のパーミッションと所有者を指定します。sharedscripts
: 複数のログファイルに対して同じscript
を実行する際に、スクリプトを一度だけ実行します。postrotate ... endscript
: ローテーションが完了した後に実行するコマンドを記述します。上記の例では、Nginxにシグナルを送って、新しいログファイルに書き込みを開始するように指示しています。
手動実行
手動でlogrotateを実行したい場合は以下のコマンドを実行します。
sudo logrotate -f /etc/logrotate.conf
-fオプションをつけると、強制的にローテーションを実行します。
自動実行
ひと昔前(RHEL7まで)はcronにより自動実行するようスケジューリングしていました。
今は/usr/lib/systemd/system/logrotate.timer ファイルに定期実行がスケジューリングされています。