journaldからrsyslogにログ出すと、messagesにも同じものが記録されてダブってストレージあふれる

あふれちゃうと、システム止まってしまうのでヤバすぎ。


自前のサービスのログの面倒は見るけど、鯖管でないのでmessagesの面倒までは見られない。
あふれて止まるから、よしなにしといてよって言ってみたら、「ログを出さないようにはできないのですか?」とか言い腐る。
ログとらないくらいだったら、そんな依頼するかよ...


しょうがないから、自分でフィルタ設定して対策しておく。
なんか、条件付けて、"& ~"入れておくと、以降ではフィルタ対象から削除されるらしい。

if $msg contains 'mogera' then     /var/log/mogera/mogera.log
& ~

mogeraが含まれている行はmogera.logに記録して、以後のフィルタの対象にはならない。
RULESの先頭に書いておくのがキモ。
んと、これでもいいのか?

:msg,contains,“mogera” /var/log/mogera/mogera.log;LocalFormat
:msg,contains,”mogera” ~

うむむ。
とりあえず、~で以降除外になることはわかった。
後の方の書式で1つフィルタ書いてうまくいっているので、こっちにしやう。

:msg,contains,“mogera” /var/log/mogera/mogera.log
:msg,contains,”mogera” ~

rsyslog再起動。

$ sudo systemctl restart rsyslog

確認してみる。

$ tail /var/log/messages && tail /var/log/mogera/mogera.log

messagesのほうは再起動してから止まっている。
同じものは出ていない。
とりあえずうまくいったようだ。


あれ?これだと、全部ぶんどってしまっているような...
他のログがなーんも出てなくない?
ダメか。
再考しないと。


msgでのフィルタがうまく動かないようなので、プログラム名でのフィルタを書いた。

if $programname == 'mogerapg' and $syslogseverity <= '6' then /var/log/mogera.log
& ~

これでうまくいっている。