rsyslogでログ受信したときに/var/log/messagesに出力しない方法
rsyslogでリモートサーバからログ受信したときに別ファイルに出力するのはいいとして
/var/log/messages にも同時に書かれちゃって「くぎゅぅ」ってなりますよね!
そんなとき、isuconの神から椅子リプライが飛んできました。
@toritori0318 送ったあとのルールで出力先に ~ 指定して捨てられます
そこでrsyslog.confは以下のような設定なりました。*1
# applog setting $ModLoad imtcp $ModLoad imudp $InputTCPServerRun 514 $UDPServerRun 514 $template applog, "%msg%\n" $template applogfile, "/var/log/applog/accesslog.%$year%%$month%%$day%" local0.* ?applogfile # タグに「AppName」が含まれてたら以後除外 :syslogtag, contains, "AppName" ~ # または IPで除外 #:fromhost-ip, isequal, "127.0.0.1" ~ (snip...)
注意点としては、除外設定はmessageのログ出力設定より前に書く必要があります。
さらに下記のような点も考慮しておいたほうが良いでしょう。
@toritori0318 お疲れさまです!送り先落ちてたときに消え去らないようにローカルにも吐いておくか、再送まわりの設定するのがオススメです
*1:rsyslogの構文エラーに苦しめられたのは秘密