Linux|ログローテーション(logrotateコマンド)の設定方法

こんにちは、皆さん。今日はLinuxでログファイルなどのファイルの肥大化を防止するためのログローテーションの機能について学習していきます。AWSのEC2インスタンスにSSH接続できている状態を前提として解説していきます。また、前提知識として定期処理実行のクロンジョブの設定ができることが必要となります。学習がまだの方は先に「Linux|定期処理(Cronジョブ)実行の設定方法」を学習してからこちらの記事に戻ってきてください。

あわせて読みたい
Linux|定期処理(Cronジョブ)実行の設定方法 本日の記事は、Webシステムの処理の自動化に大いに役立つ定期処理実行(Cronジョブ)の設定方法について学習していきます。クロン(Cron)とは定期処理の実行を管理する...

Amazon Linux 2023のEC2インスタンスにはデフォルトで logrotate はインストール済みです。

目次

ログローテーションの設定方法

設定ファイルの場所

ログローテーションのデフォルトの設定ファイルは以下の場所にあります。

/etc/logrotate.conf

これはデフォルト設定ファイルで、個別の、各ログローテーション対象ファイル用の設定フィルの中でこのデフォルト設定ファイルに定義されている項目を上書き定義しない場合は、デフォルト設定の内容が適用されます。

設定項目

以下に代表的な設定項目を列挙します。

hourly|daily|weekly|monthly|yearly

ローテーションの時間のインターバルを指定する場合にはこれらを指定します。

size {file size}

ローテーションを時間のインターバルではなく、ファイルサイズで指定する場合にsizeを指定します。
ファイルサイズには、10、10k、10M、10Gなどの指定もできます。

missingok

ローテートしたいファイルが存在しなくてもエラーにはしない。

rotate {数値}

何ファイル文バックアップとして保持しておくかを指定。

notifempty

ローテートしたいファイルが空の場合はローテートしない。

create

ローテート後のファイルのパーミッションを設定する。

dateext

ローテート後のファイル名の末尾に数値ではなく日時をつける

dateformat

dateext に使用する日時のフォーマットを指定する。

postrotate

ログローテーション処理後にpostrotateからendscriptの間のスクリプトを実行できる。

以下の様に man コマンドで logrotate コマンドの詳細オプションを確認できます。
man logrotate

設定ファイルの例

viコマンドで以下の場所に mylog というログローテーション用の設定ファイルを作成してください。

vi /etc/logrotate.d/mylog

設定内容は以下になります。

/home/ec2-user/logfile.log {
    daily
    missingok
    rotate 7
    create 0640 root root
    dateext
    dateformat -%Y%m%d%H%M%S
    postrotate
        systemctl reload mylog.service > /dev/null 2>&1 || true
    endscript
}

1行目にログローテーションさせたいファイル名パスを指定しています。そして、ここでは最後にログローテーション後に毎回ログローテーションサービスの再起動を行っています。これは、他のログラムがログローテーション後に新しいログファイルに書き込みをしない可能性があるため、ログローテーションのサービスの再起動をしています。

ログローテーションの実行

ログローテーションコマンドを実行する際、2つの方法があります。デバッグ用に実際にはログローテーションをしないドライラン実行とコマンド実行時に実際にログローテーションをする強制実行です。

【ドライラン(dry-run)】
logrotate -d /etc/logrotate.d/mylog

【強制実行(force)】
logrotate -f /etc/logrotate.d/mylog

ログローテーション後のファイル

前述の設定ファイルの例では以下のようなログローテーションが行われます。

logfile.log
logfile.log-20250225050002
logfile.log-20250226050001
logfile.log-20250227050002
logfile.log-20250228050003
logfile.log-20250301050002
logfile.log-20250302050002
logfile.log-20250303050003

ログローテーションの自動化

以下のディレクトリにログローテーションの設定ファイルが作成された場合は、設定ファイルに基づいて自動的にログローテーションが実行されます。

/etc/logrotate.d/

それ以外の任意の場所にログローテーションの設定ファイルを作成した場合は、定期実行処理のクロンジョブの設定からログローテーションのコマンドを定期的に実行する必要があります。

0 5 * * * /usr/sbin/logrotate -f /root/mylog >> /home/ec2-user/logfile.log 2>&1

まとめ

今回の記事ではLinuxのログローテーションについて解説しました。ログファイルにログローテーションを設定し忘れてしまうと、フィアルが肥大化してハードディスクが一杯になってしまい書き込みができずサーバが停止してしまうリスクがあります。Webのシステム開発においても、ログローテーションはこういったリスクを回避するために必要なスキルとなってきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次