Almalinux9でsyslogのlogrotate定義が見当たらない

maillog、secure、messagesログが肥大化してる?

AlmaLinux9に移行してまもなくPostfixへのSASL LOGINアタックの状況をmaillogの中身を調べていると、なんとまぁ沢山のアタックが来ていること・・・
(この時点ではfail2banの設定をミスっており、適切にbanされていませんでした。)

ところが数日間maillogをチェックしていると、膨大なサイズになりつつあるにもかかわらず、ログがローテートされていないことにふと気付きました。
「/var/log」内を確認してみると、AlmaLinux9に移行して1週間は経過しているというのにmaillogは分割されていません。
maillogだけでなく、cron、messages、secureといった主要なログが一切logrotateされた様子がなく、ファイルサイズが50MBを超えているものもあります。

そこでlogrotateの状況を調査してみることにしました。

 

logrotateの設定ファイルの確認

logrotateの全般的な設定である「/etc/logrotate.conf」を確認します。

# cat /etc/logrotate.conf
weekly
rotate 4
create
dateext
include /etc/logrotate.d

特に問題ありません。
次にログファイル毎の個別の設定を確認します。

# cat /etc/logrotate.d/syslog
cat: /etc/logrotate.d/syslog: そのようなファイルやディレクトリはありません

あれ? syslog用の設定ファイルがない?

# ls /etc/logrotate.d/
btmp certbot chrony dnf fail2ban firewalld httpd kvm_stat mariadb named php-fpm sssd vsftpd wtmp

確かに「/etc/logrotate.d/syslog」がありません。
私が間違って削除したのでしょうか? いえ、そんなはずはありません。
AlmaLinux9をMinimalインストールするとこうなるのでしょうか?
でもAlmaLinux8の時もMinimalでインストールしましたが、こんなことはなかったはずです。

いずれにしてもmaillog等がlogrotateされない理由が判明しました。
「/etc/logrotate.d/syslog」が最初から存在していないことが原因でした。

 

/etc/logrotate.d/syslog の作成

そこで「/etc/logrotate.d/syslog」を自分で作成します。
AlmaLinux8の時と同じ動作で良ければ、同じ内容を記述するだけです。
私の場合は、まんま記述することにします。

# nano /etc/logrotate.d/syslog  ← 新規作成
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
        /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscript
}

お好みで世代数、間隔、ファイルサイズ条件等を追記します。

 

ドライランで動作確認

ちゃんと動作するかドライランしてみます。

# logrotate -d /etc/logrotate.conf
(抜粋)
considering log /var/log/cron
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/maillog
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/messages
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/secure
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
considering log /var/log/spooler
・・・
log does not need rotating (log has been rotated at 2023-06-26 13:00, which is less than a week ago)
not running postrotate script, since no logs were rotated

ローテートしたはずのない時間にローテートした扱いになっており、ローテートが不要と判断されてしまいました。
どうやらこれはlogrotateの仕様のようで、ローテートに入れるためにはローテート条件を満たすようなダミーの履歴が必要らしいです。
そこで以下のようにダミーの実行履歴を作ります。

# nano /var/lib/logrotate/logrotate.status  ← 末尾に以下を追記
"/var/log/cron" 2023-6-15-0:0:0
"/var/log/maillog" 2023-6-15-0:0:0
"/var/log/messages" 2023-6-15-0:0:0
"/var/log/secure" 2023-6-15-0:0:0
"/var/log/spooler" 2023-6-15-0:0:0

私の場合はlogrotateの大元の設定ファイル「/etc/logrotate.conf」で1週間おきにローテートするようにしていますので、1週間以上前の日付を設定します。
これで再度ドライランを実行してみます。

# logrotate -d /etc/logrotate.conf

出力のコピペを忘れたので結果を書けませんが、問題なくローテートが成功しています。

 

logrotateを実行

ドライランが成功したので、実際にlogrotateを実行します。

# logrotate /etc/logrotate.conf

「/var/log/」内を確認すると、ちゃんとログが分割されました。

 

終わりに

なぜこんなことになったのか良く分かりませんが(おそらくAlmaLinux9をMinimalでインストールしたから??)、maillog等がローテートされないのは「/etc/logrotate.d/syslog」が存在しないことが原因でした。

でもこれでログが肥大化することはなくなりました。

コメント

  1. 通りすがりです。 より:

    主要なログのローテートは rsyslog-logrotate で対応できるようです。
    dnf install rsyslog-logrotate

    • admin より:

      コメントありがとうございます
      rsyslog-logrotateをインストールしましたところ、「/etc/logrotate.d/rsyslog」がインストールされ、ドライランも無事に成功しました
      大変ありがとうございましたm(__)m

タイトルとURLをコピーしました