Rocky Linuxでのログローテーション設定

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)」をつけると詳細を表示します
※デバックモードで実行した場合は、実際にログローテーションは行われません

最後に

ログローテーション自体はサービスインストール時に自動で設定されている場合もありますが、必要に応じて自分で設定を変更する必要もあるかと思います。

その際に、この記事が参考になれば幸いです。

執筆担当者プロフィール
井口 美和子

井口 美和子(日本ビジネスシステムズ株式会社)

HC4部4G データ系サービスを取り扱うグループに所属しています。

担当記事一覧