logrotateでエラーが発生した際に届く通知メールの内容とその対策について

Linuxサーバを運用していると、システムから管理者宛てに以下の内容のメールが届きました。ここではサーバにどのような問題が発生しているのかと、このメッセージが出ないようにするにはどうしたら良いかをお伝えします。

/etc/cron.daily/logrotate:

error: Compressing program wrote following message to stderr when compressing log /var/log/messages-20250209:
gzip: stdin: file size changed while zipping

発生している問題について

届いたメッセージの内容を簡単に要約すると、「ログローテートしてログファイルを圧縮している際中に、ファイルサイズが変わった」となります。つまり、ログローテートした後のファイルが、何らからのタイムラグでまだ書き込みが終了していないのに、圧縮処理が走ってしまっており、上記のようなメッセージが出たと考えられます。

これによる一番の問題は、ログの欠損が発生しうる事になります。

対処方法について

一番簡単な対処方法は、ログローテートしたタイミングで、圧縮しない事です。ログが大量に出力されている場合は、すぐに圧縮するとこの問題が発生しうる可能性も高くなります。そのため、圧縮処理は遅延させて処理させれば良いです。

具体的には、「delaycompress」のパラメータを、/etc/logrotate.conf や /etc/logrotate.d/配下のファイルに以下のように記載すればOKです。

/var/log/messages {
    rotate 4
    …
    compress
    delaycompress
    …
}

この設定を追加するメリットは、今回のようなエラーが出なくなることに加えて、直近のログファイルは圧縮されずにそのまま残っている事です。(解析などしやすい)

デメリットは、1世代分遅れて圧縮することになるため、ディスクの容量を余分に消費することでしょうか。(たいしたことでは無いと思いますが)

シスログに関する記事は、「Linuxサーバのシスログが正常に出力されない時の対応方法について」として、こちらにも記載があります。もしよろしければ合わせてご参照ください。

今回はここまでです。最後までお読みいただきありがとうございました。