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 & ~
これでうまくいっている。