rsyslogdがrsyslog.dの次の行に従わないのはなぜですか?

rsyslogdがrsyslog.dの次の行に従わないのはなぜですか?

これは私の以前の質問と多少関連しています。ここ

/etc/rsyslog.d以下を含む3つのファイルがあります/etc/rsyslog.conf

  • 00-iptables.conf
  • 50-default.conf
  • postfix.conf

最初は私が作ったものです。私の前提は、命名のために以前に含まれると仮定しましたが、50-default.confフィルタ行を50-default.conf自分のカスタムファイルに直接置いて削除しました(00-iptables.conf)。

:msg, startswith, "ipt:" /var/log/iptables.log
& stop

マニュアルページに記載されているようにrunning with~に置き換えられ、トラブルシューティング段階で警告を提供します。つまり、利用可能な(公式!)文書が古くなったり遅れたりしたことがわかります。stoprsyslogd-N1~stop

ここでのアイデアは、プレフィックスが付いたすべてのメッセージがipt:指定されたログファイルに移動し、他のログファイルがこの行を受け取らないことです(私もcontains使用せずに試しましたstartswith)。syslogもはやこのメッセージを受け取るべきではないことに具体的に言及されていますkern.log50-default.conf

auth,authpriv.*            /var/log/auth.log
*.*;auth,authpriv.none     -/var/log/syslog
kern.*                     -/var/log/kern.log

rsyslogのドキュメントを読んだが、ドキュメントは属性ベースのフィルタ(返品ここ)最も啓発的ではありません。文書に記載されている例(他の場所でも見つけることができます)と彼らのwikiは同様の例を提供します:

# From documentation
*.* /var/log/allmsgs-including-informational.log
:msg, contains, "informational"  ~
*.* /var/log/allmsgs-but-informational.log
# From Wiki
:syslogtag, startswith, "MSWinEventLog#011" /var/log/messages;fixsnareFormat
& @192.168.1.8;fixsnareForwardFormat
& ~

ドキュメントの例は、私が書いた2行のコードに非常に近いものではありませんが、まだ~意味をよりよく説明しています。

私は何が間違っていましたか?

セレクタとプロパティを組み合わせる方法がある場合は、誰でも回答できればボーナスポイントになります。たとえば、

:msg, startswith, "ipt:" kern.* /var/log/iptables.log

注:私はバージョン7.4.4を使用していますrsyslog。はい、service rsyslog restart変更後に実行して適用されるのを待ちました。


編集する

追加情報。デバッグモード()でデーモンを実行すると、RSYSLOG_DEBUG=LogFuncFlow RSYSLOG_DEBUGLOG=~/rsl.log $(which rsyslogd) -f /etc/rsyslog.conf -d最適化されたルールセットは次のようになります。これはまさに私が望む方法であることを示しているようです(簡潔さのために前の接頭辞が削除されます)。

ruleset 'RSYSLOG_DefaultRuleset' after optimization:
ruleset 0x214a640: rsyslog ruleset RSYSLOG_DefaultRuleset:
PROPFILT
   Property.: 'rawmsg'
   Operation: 'contains'
   Value....: 'ipt:'
THEN
  ACTION 0x215c070 [builtin:omfile:/var/log/iptables.log]
  STOP
END PROPFILT
PRIFILT 'auth,authpriv.*'
pmask:  X  X  X  X FF  X  X  X  X  X FF  X  X  X  X  X  X  X  X  X  X  X  X  X  X
  ACTION 0x215e840 [builtin:omfile:/var/log/auth.log]
END PRIFILT
PRIFILT '*.*;auth,authpriv.none'
pmask: FF FF FF FF  X FF FF FF FF FF  X FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  ACTION 0x215f030 [builtin:omfile:-/var/log/syslog]
END PRIFILT

/var/log/iptables.logまた、私が見た動作は、フィルタが期待どおりにファイルに明確に書き込むので、効果があると推論できることを追加する必要があります。ただし、メッセージが特定のファイルに書き込まれると、メッセージは期待どおりに削除されません。

kern.log以下は、後者だけでなく、syslogすべてで終わる例の行です。iptables.logプライバシー保護のために詳細は修正されました。

Jun  1 02:23:01 hostname kernel: [70025.211497] ipt:drop IN=eth0 OUT=virbr0 MAC=dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00 SRC=9.8.7.6 DST=1.2.3.4 LEN=60 TOS=0x00 PREC=0x00 TTL=47 ID=59201 DF PROTO=TCP SPT=47626 DPT=23 WINDOW=4380 RES=0x00 SYN URGP=0

答え1

RainerScriptを使用しないのはなぜですか?施設セレクタの代わりに$syslogfacility-text。効果的には、セレクタと属性を組み合わせます。

if ($msg startswith 'ipt:' and $syslogfacility-text == 'kern') then {
    action(type="omfile" file="/var/log/iptables.log")
    stop
}

また、Rsyslog ドキュメントにはバージョン 7 ツリーは使用されなくなりました。いいえ使用(http://www.rsyslog.com/doc/v7-stable/)。

答え2

問題が解決したかどうかはわかりません。すべての詳細はカバーされていませんが、rsyslogは特定の設定に応じてさまざまな方法でメッセージを送信できます。たとえば、すべての条件に同時に送信することも、最初の条件に送信してから2番目の条件に送信する式で送信することもできます。全員に同時に送信するように設定している場合は、停止しても問題はありません。 rsyslog 非同期/同期/並列、特に直接/接続リストタイプのキューを見つけると、rsyslog フロー方式が変更されます。

関連情報