詳細のログは省く。
取るのめんどい。
環境
- RHEL9
事象
rsyslogサーバーに溜まる各クライアントからのログがlogrotateで空(0バイト)ファイルができてしまう。
しかもタイムスタンプを見ると過去日付になっている
原因
rsyslog の設定で、ファイルを作成する時点で、ファイル名に日付をつけてしまっていた。
20240725_web-server.log
みたいに。
↓
これがログローテートされると、
20240725_web-server.log.gz
に圧縮されると同時に、
20240725_web-server.log
が0バイトで出来上がる(logrotate.conf で create 指定してればね)。
↓
翌日には、
20240725_web-server.log
ではなく
20240726_web-server.log
に書き込まれるため、
20240725_web-server.log
は0バイトのママ残ってまう。。
しかも、
logrotate.confの設定で、空ファイルはローテートしない、という設定になっていたのも相まって、今回の事象がおきた。
→notifempty みたいなやつ。これがあると空ファイルはローテートされない。
対処
rsyslogサーバー側の、rsyslog.conf で、ログファイルに日付を付与しない設定とした。
20240725_web-server.log
ではなく
web-server.log
というようなファイルが作成されるようになり、
ログローテート時に
web-server-20240724.gz
的な感じになる。
ので、ファイル名で日付の判断もできるから、問題なし。
めでたしx2。
後日追記:日付なしのログファイルにログが記録されなくなった!
焦ったが、rsyslogサーバー側のrsyslogの再起動を行ったら直った。
systemctl restart rsyslog
うーん、やってなかったかなぁ。。。
明日また確認しよう。
後日追記2:結局、日付Prefixありのログファイルに戻した。
先述した
rsyslogサーバー側の、rsyslog.conf で、ログファイルに日付を付与しない設定とする
の対応を実施すると、
新しいプロセスでログファイルが作成される形になり、
各ミドルウェアは、新しく作成された日付なしのログファイルに書き込みができなくなってしまった。
なので、日付Prefixありのログファイル形式に戻した。
だが、あとで気づいたんだが、
logrotateの仕組みで、
- 現在のログファイルのコピーファイルを作成する(copyディレクティブ)
- 現在のログファイルの中身を空にする(copytruncateディレクティブ)
という設定ができる。この設定にすれば日付Prefixなしのログファイルにしても、問題ないと思われる。次の構築時にはこれにしよう。
コメント