Linux サーバ上で稼働しているアプリケーションのログをローテートしたときのメモ。
伝聞調で書いてるところは、特に他の文献の存在を示してない限り、man logrotate
の内容によります。
環境
Amazon EC2 Linux(2018/11/28 現在)
やり方
Linux にデフォルトで備わっている logrotate
の機能を使いました。
様々な条件を指定できるので、大概の場合に要件を満たせそうかと思います。
通常、デイリーのクーロンジョブとして稼働するとのことです(サイズ指定でのローテートする場合はその限りではない)。
logrotate
機能
文字通りログをローテートする機能なのですが、その実態はコマンド logrotate
と設定ファイルに分かれています。
設定ファイルに記述された対象ファイルについて、記述された設定通りの処理を行います。
設定できる条件は、man logrotate
の結果か、man
ページに詳しいため、ここでは割愛します。
man logrotate
の結果に記載されているサンプル設定は以下の通りです。
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
大体意味が分かりますね。
ローテート対象は /var/log/messages.log
です。
1 週間に 1 回のローテートであり、5 週間(5 ローテート)の結果が残るため、現時点で更新されているファイルを含め、ファイル数は合計 6 つになります。
ローテート後に postrotate
で指定されているコマンドが実行されます。
グローバルオプションも指定できます。ただし、オプションの適用優先度には注意が必要です。
ローカルオプションはグローバルオプションを上書きし、同じローカルオプション(恐らく)を指定したときは、後から指定されたものが前に指定されたものを上書きするとのことです。
設定ファイルの場所
Linux 全般で共通なのかは知らないのですが、私が確認した環境では /etc
配下にあり、以下のようになっています。
/etc/
┝ logrotate.conf
┝ logrotate.d/
│ ┝ message
│ ┝ ...
...
他の文献を読んだ感じでは、logrotate.conf
にまとめて設定を記述してもいいし、logrotate.d
配下にそれぞれ設定ファイルを作っていってもよいようです。
man logrotate
の結果を隅々まで読んだわけではないので、どっかに書いてあるかもですが(動作確認した方が楽そう)。
動作確認
以下のような logrotate
コマンドを叩いて手動ローテートさせてみましょう。
logrotate -v -f /etc/logrotate.d/maillog
-v
は、冗長モードの指定で、処理内容が標準出力に出てきます。
-f
は、設定ファイルにもとづくローテートの要否を判定せず(強制)ローテートします。新しい設定を導入したときや、古いファイルを手動削除したときに、新しいファイルを作成しログ出力を正常に継続できるようにするために便利とのこと。
他の文献によると、以下のコマンドで特定の設定ではなくすべての設定についてローテートさせられるとのこと(動作は未確認です)。
logrotate -v /etc/logrotate.conf