maillog にあるはずのログが無い?!
ほかのメンバーから「メール送信の状況を調査してほしい」との依頼があったので、対象メールサーバー(Postfix)の /var/log/maillog を調べていたところ、その時刻にあるはずのメールログが無いという現象に出くわしました。
手がかりは messages に
あれこれ調べていたら、該当時刻付近の /var/log/messages に以下のようなログが記録されていることに気が付きました。
Aug 12 10:02:44 our-smtp-server journal: Suppressed 1140 messages from /system.slice/postfix.service
Aug 12 10:03:22 our-smtp-server journal: Suppressed 1202 messages from /system.slice/postfix.service
うむむ、 postfix.service からの 1140 件のメッセージが Suppress されている? 「suppressed」を辞書で引くと、「抑制された」の意味。どうやら、何かの理由で Postfix のログ出力が抑制されているようです。
journald による抑制
journald は systemd 環境下の標準的なログ管理サービスです。ログ出力が多すぎるときには、ディスクの空き容量が逼迫しないよう、ログの出力を制限できるようになっています。
メールログが消えた時間帯は、ちょうど別プログラムで大量のメールを送信していた時間帯でした。
journald ではデフォルトで以下の設定がなされています。
RateLimitInterval=30s
RateLimitBurst=1000
ここで、 RateLimitInterval はログを制限するための基準の時間、 RateLimitBurst はその基準時間に出力できるログの件数です。
つまり、30秒間に 1,000件以上のログ出力は抑制されるということです。
ログ出力無制限に変更
journald.conf の RateLimitInterval を 0 にすることで、制限なくログを出力するようになります。
RateLimitInterval=0
RateLimitBurst=1000
また、 rsyslog の出力についても制限をはずします。
journald からの入力を受け付けている以下の箇所に、
$ModLoad imjournal
制限を外すよう、 $imjournalRatelimitInterval の設定行を追加します。
$ModLoad imjournal
$imjournalRatelimitInterval 0
このあと journald と rsyslog を再起動して、設定を反映させます。
sudo systemctl restart systemd-journald
sudo systemctl status systemd-journald
sudo systemctl restart rsyslog.service
sudo systemctl status rsyslog.service
これにより Postfix のログが抑制されずに出力されるようになりました。
Postfix に限らず、システムのログの一部が見当たらない場合は、 該当時刻の messages ログを一度確認してみましょう。 journald によって制限されているかもしれませんよ。