TSUBOCK★LABO-ツボックラボ-

とあるセキュリティエンジニアの技術メモブログ

MENU

Linuxのログローテートを使って任意のログをローテートさせる

Linuxのログローテートを使ったので備忘録的に記載する。

検証環境

  • Ubuntu 18.04(WSL2)

設定方法

logrotateの設定は/etc/logrotate.confの中で実施します。が、個別のアプリケーションは/etc/logrotate.d/配下に個別の設定ファイルを作成して設定するのがメンテナンス面も考えてよいでしょう。

今回は/var/log/test_app.logというファイルをローテートする例を書いていきたいと思います。

まずは個別の設定ファイルを作成

個別アプリケーション専用の設定ファイルを/etc/logrotate.d/配下に作成します。

区別がつけられるようにアプリ名をつけるといいと思います。

 $ sudo touch /etc/logrotate.d/test_app

設定ファイル内に任意で記載した設定が反映されます。詳しくはlogrotateのmanを確認してください。参考サイトに日本語で説明してくださってるページを載せております。今回は下記項目を設定したいと思います。

設定 設定例 説明
daily daily ローテートが行われるタイミング。dailyなので、毎日ローテートが行われます。Weeklyにすることで週単位のローテートに変更することも可能。weekly [曜日]で曜日指定することも可能。(0が日曜日、6が土曜日)
rotate rotate 7 ローテートして保持される世代数。これを超えると削除されます。左記では7としているので1週間分の過去ログを保持します。
missingok missingok ローテートのタイミングで指定しているログファイルが存在しない場合でもエラー出力はしません。
copytruncate copytruncate ローテート対象ファイルをコピーした後、大元のファイルの中身を空にします。
dateext dateext ローテートファイルの末尾を日付で管理します。
dateyestarday dateyestarday dateextで付与される日付を前日日付でつけてくれます。
dateformat dateformat ローテートファイルの末尾の日付のフォーマットを指定します。

では実際に設定してみます。

 /var/log/test_app.log{i
    su root root
     daily
     rotate 7
     missingok
     copytruncate
     dateext
     dateyestarday
     dateformat _%Y%m%d
 }

dateformatに設定したのはログファイルがローテートしたときにローテートファイル名に付与してくれます。この場合、test_app.log_20210228となります。(執筆日現在) 設定した項目が問題ないかチェックをすることができます。

 logrotate -d /etc/logrotate.d/test_app

問題がある場合は標準出力にエラーが出力されます。

強制的にローテートを実行させる場合には下記コマンドのように実行させたいローテート設定をForceで指定して実行します。

 $ /usr/sbin/logrotate -f /etc/logrotate.d/test_app

でローテートさせることができます。

参考文献