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
実行時の標準出力をちゃんと確認し、更新できなかった設定ファイルの有無を把握しないといけませんね。