「/var/log/messages」がログローテーションされていない

ログ監視で過去の古いエラーを拾い警告があがっている

Nagiosでログ監視をしていますが、/var/log/messagesで過去のエラーを拾ってエラーが上がりメールが来ていました。
「/var/log/messages」を確認すると1年以上ログローテーションが実行されていません。

下記のようにログローテーションをテストモードで実行すると、「error: stat of /var/log/spooler failed: No such file or directory」でエラーとなっています

$ sudo logrotate -d /etc/logrotate.d/syslog 
reading config file /etc/logrotate.d/syslog
reading config info for /var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/kernlog

#--- 省略 ----

considering log /var/log/spooler
error: stat of /var/log/spooler failed: No such file or directory

ログローテーションでファイルがない場合でも処理を実行する方法

logrotate は、設定ファイルに記述されたパスのログファイルが存在しない場合、通常はエラーを出して処理を停止することがあります。
今回は、「/var/log/spooler」 のファイルが存在しないとそこで処理が止まってしまいログローテーションを実行されてなかったようです。

ファイルが存在しないとそこで処理を実行するようにするには以下の解決方法があります

存在しないファイル(/var/log/spooler) を作成する

存在しないファイル(/var/log/spooler)を手動で作成して、適切なパーミッションに設定すれば、ログローテーションがエラー無く実行されます

sudo touch /var/log/spooler
sudo chown root:root /var/log/spooler
sudo chmod 600 /var/log/spooler

存在しないファイル(/var/log/spooler) を設定から外す

このファイル(/var/log/spooler)は、プリンタースプーラーなどのログファイルとして使用されます。サーバーにプリンター機能を利用していないケースは、このファイルは不要ですので、設定ファイルから /var/log/spooler の記述を削除して対応すれば良いかと思います

$ sudo vim /etc/logrotate.d/syslog

/var/log/messages
/var/log/secure
/var/log/spooler  # この行を削除する
/var/log/kernlog

missingok オプションを利用する

missingok オプションを追加することで、ファイルが存在しなくてもエラーを出さずに処理を続行させることができます。この方法がお勧めです。

  • missingok : ローテーションするログファイルがなくてもエラーを出さない
$ sudo vim /etc/logrotate.d/syslog

/var/log/cron
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok # missingok : ローテーションするログファイルがなくてもエラーを出さない
    sharedscripts
    postrotate
        /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscript
}

手動でログローテーションを実行する

ファイルが無くてログローテーションが実行されていない件の対策ができたので、設定ファイルを修正等を実行後は、logrotate をテスト実行 (sudo logrotate -d /etc/logrotate.d/syslog) して、エラーが出ないことを確認します。
その後、手動でローテーションを実行 (sudo logrotate /etc/logrotate.d/syslog) して、/var/log/messages がローテーションされるか確認してください。

sudo nano /etc/logrotate.d/syslog  # エディタでファイルを開き、missingok を追加
sudo logrotate -d /etc/logrotate.d/syslog # テスト実行
sudo logrotate /etc/logrotate.d/syslog # 手動実行

 

スポンサーリンク

0
0