私はrsyslogがいくつかのsyslogトラフィックを処理しており、元のデバイスのIPアドレスに基づいてログを保存するようにフィルタを設定したいと思います。私は多数のデバイスを持っており、各デバイスのルールを生成したくないと思います。 IPスキームは、1つのルールですべてを処理するのに十分な一貫性がありますが、それを機能させるのに苦労しています。
以下は、私が達成しようとしたいくつかの(失敗した)例です。
:FROMHOST, regex, "10\.[0-9]+\.1\.2" -/var/log/test.log
& ~
または
if ( re_match($fromhost-ip, '10\.[0-9]+\.1\.2') ) then { -/var/log/test.log }
& ~
デフォルトでは、これらのデバイスのIP計画は常に10.*.1.2です。ここで、*はデバイスの位置に対応する2桁の数字です。
誰かが私がどこに間違っているのか教えてもらえますか?
ありがとうございます!
答え1
rsyslogを実行するためのデバッグオプションを見つけたら、実際にソリューションを直接見つけることができました。明らかに、次のようにコンソールからrsyslogdを直接呼び出すことができます。
rsyslogd -d
これにより、すべてのルール解析のリアルタイムストリームが表示されます。 〜の後トーンこのトリックを使用して数回の試行錯誤を経た後、単にエスケープするのではなく、いくつかの部分が必要なため、フィルタリングルールが失敗していることを確認できました。ダブル脱出しました。これは本当に驚きました。
私の最終ルールは次のとおりです。
:fromhost-ip, regex, "10\\.[0-9]\\+\\.1\\.2" -/var/log/test.log
& ~
以下は、いくつかの成功したケースの結果です。ここではエスケープされているように+
見えるはずです。公式にリンクすると、一致するものが見つからないので変です。rsyslog正規表現テスターこの方法:
Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\+\.1\.2': TRUE
Filter: check for property 'fromhost-ip' (value '10.24.1.2') regex '10\.[0-9]\+\.1\.2': TRUE
いつかこの記事を読んでいる人が気になる場合に備えて、私が試行錯誤を経験したいくつかの例を紹介します。そのほとんどは完全な失敗でした。
Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10.[0-9]+.1.2': FALSE
Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '^10.[0-9]+.1.2$': FALSE
Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE
Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.1\.1\.2': TRUE
Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\.1\.2': TRUE
Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE