Rocky LinuxはCentOSの後継と言われているRed Hat Enterprise Linuxとの互換性が高いディストリビューションの一つです。
今回は、Rocky Linux8.8を使って、個人的に気になっていたログローテーションの設定を確認したいと思います。
ログローテーションの必要性
各サービスで出力されるログファイルは、運用時間が長いサービスほどファイルサイズが大きくなりやすく、そのままにしていると、エラー発生時にログファイルを確認したくても「サイズが大きくてファイルがなかなか開けない」や「長すぎて該当のログが見つからない」といった事態が発生する可能性があります。
そのため、ログファイルが一定のファイルサイズになったり、一定期間が経過したら、ファイル名を変更して保管や削除をする必要があり、それをログローテーションと言います。
ログローテーションを行うことでログの肥大化を防ぎ、また容量の圧迫によるシステムの停止などを防ぐことができます。
ログローテーションの設定ファイル
ログローテーションの設定は以下のファイルに記載されています。
/etc/logrotate.conf
※黄色で簡単な解説を記載しています
デフォルトの設定だと、週次でローテーションされ、過去4回分のログが保管されます。
また、保存されるログファイル名の末尾には、ログローテーションした日付が「YYYYMMDD」形式で付与されます。
個別設定ファイル
個別の設定をしたい場合には、直接/etc/logrotate.confに記載することも可能ですが、/etc/logrotate.d配下に各サービス用の設定ファイルを作成する方法もあります。
例えば「syslog」を開くと以下のような設定になっており、/etc/logrotate.confとは異なるアプリケーション毎の独自の設定をすることが可能です。
今回は「httpd」に以下を追加します。
・ローテーション間隔 :daily
・保存するログファイル数:3
※設定ファイルを変更しても、サービスの再起動は必要ありません
自動でログローテーションをする方法
ログローテーションはcronを利用して、定期的に自動実行されるように設定されています。
/etcディレクトリには、cronを含む3つのファイルと5つのディレクトリが存在しますが、/etc/cron.daily配下にlogrotateの実行ファイルがあります。
/etc/cron.daily/logrotate
定期実行させる実行ファイルの設定は、/etc/anacrontabに記載されています。
httpdのログローテーション
個別設定ファイルを修正したhttpdは、以下の通りweeklyでのログローテーションではなく、dailyでローテーションが行われるようになります。
ログの保持数は3と設定しているため、「20230908」分のログローテーションをすると「20230905」分のログは破棄されます。
anacronの実行時間
anacronはcronと違い、ジョブスケジュール時にシステムが起動していない場合には、起動後に実行します。また、実行時間も「●時●分」と決まった時間ではなく、ある程度の範囲の中で実行されます。
決まった時間で定期的に実行させたい場合には、anacrontabの「cron.daily」の設定部分をコメントアウトし、/etc/crontabに記載する方法があります。
※その場合は、他の/etc/cron.daily配下にある設定もcrontabで実行されるようになるため、注意が必要です。
ログローテーションの確認
ログローテーションがいつ行われたかは、「/var/lib/logrotate/logrotate.status」から確認ができます。
手動でログローテーションをする方法
ログローテーションを自動で定期的に実行することはcronやanacronを利用すれば可能ですが、手動でも行うことができます。
手動で行う場合は下記のようなコマンドを実行します。
logrotate [オプション] /etc/logrotate.conf
最初のlogrotateはPATHを通しているため、「/usr/sbin/logrotate」を記載しているのと同じ意味です。
このまま「logrotate /etc/logrotate.conf」と実行すると、ログローテーションが実行されますが、ファイルが0バイトなどでローテーションが不要な場合はそのままローテーションは行われません。
※1日1回しか実行はできません
強制的にログローテーションを実行
強制的にログローテーションを実行したい場合には下記のコマンドを実行します。
logrotate -f /etc/logrotate.conf
オプションに「-f(--force)」を指定すると、強制的にログローテーションを実行します。
オプションを設定しないで実行した場合と違い、0バイトのファイルであってもログローテーションが行われます。
debugモードで確認
オプションに「-d(--debug)」を指定することにより、デバッグモードでどのようにログローテーションが行われるのか確認ができます。
※オプションに「-v(--verbose)」をつけると詳細を表示します
※デバックモードで実行した場合は、実際にログローテーションは行われません
最後に
ログローテーション自体はサービスインストール時に自動で設定されている場合もありますが、必要に応じて自分で設定を変更する必要もあるかと思います。
その際に、この記事が参考になれば幸いです。