Ubuntu 14.04から18.04 にアップグレードしたらログ書き込み先がおかしくなった

Ubuntu 14.04 のサーバを apt dist-upgrade で Ubuntu 18.04 にアップグレードしたら、rsyslog のログ書き込み先がおかしくなるという問題に遭遇しました。

rsyslog で出力したログは /var/log/syslog ファイルなどに書き込まれるはずですが、なぜかこのファイルは空になっており、/var/log/syslog.1 ファイルに書き込まれていました。

Ubuntu 14.04 では、rsyslog のログローテーションの /etc/logrotate.d/rsyslog ファイルのデフォルト設定は次のようになっています。

 1/var/log/syslog
 2{
 3        rotate 7
 4        daily
 5        missingok
 6        notifempty
 7        delaycompress
 8        compress
 9        postrotate
10                reload rsyslog >/dev/null 2>&1 || true
11        endscript
12}
13
14以下略

ログファイルをローテーションしたあとに reload コマンドで rsyslog サービスを再起動するようになっています。

一方、Ubuntu 16.04 や 18.04 では、同ファイルのデフォルト設定は次のように postrotate が変更されています。

 1/var/log/syslog
 2{
 3        rotate 7
 4        daily
 5        missingok
 6        notifempty
 7        delaycompress
 8        compress
 9        postrotate
10                /usr/lib/rsyslog/rsyslog-rotate
11        endscript
12}
13
14以下略

reload コマンドは upstart パッケージに含まれるものですが、Ubuntu 18.04 から upstart パッケージが廃止され、reload コマンドが使えなくなりました。

当該サーバではログローテーションの設定を変更していたため、apt dist-upgrade を実行した際に設定ファイルが更新されず、postrotate で reload コマンドを実行する内容のままとなっていました。
(新しいデフォルト設定は /etc/logrotate.d/rsyslog.dpkg-dist ファイルとして作られていました。)

reload コマンドが使えないため、rsyslog サービスを再起動できず、書き込み先のファイルの実体が変わらずに /var/log/syslog.1 のままとなってしまったという問題でした。

postrotate をデフォルト設定の内容に合わせて変更すれば問題は解決できました。

根本的な対策としては、apt 実行時の標準出力をちゃんと確認し、更新できなかった設定ファイルの有無を把握しないといけませんね。