rsyslog confの[][][.*]では正規表現は機能しません。

rsyslog confの[][][.*]では正規表現は機能しません。

次のメッセージをログファイルにリダイレクトしたいと思います。

"[example]:[foo][bar]: "
"[example]:[foo][hello]: "
"[example]:[foo][world]: "
"[example]:[foo][other]: "
"[example]:[foo][text]: "

の内容は、3rd field小文字[az]のみを含む動的テキストです。

"[example]:[foo][.*]: "

contains" "キーワードを使用してrsyslog confファイルを生成すると機能します。

:msg, contains, "[example]:[foo]" -/var/log/example.log

ただし、次の正規表現はまったく機能せず、メッセージは記録されません。

:msg, regex, "\[example\]\:\[foo\]\[.*\]\:\ " -/var/log/example.log

私の正規表現にはどんな問題がありますか?

上記のメッセージと一致し、すべての必須フィールドを含む正しい正規表現を作成するにはどうすればよいですか?

答え1

問題は、フィルタコマンド処理がバックスラッシュエスケープを解釈する2つのステップで構成されることです。結果として、リテラルを一致させたい場合は、正規表現パターンですが、パターンを[文字\[列として提供するため、使用するバックスラッシュをエスケープする必要があります\\[

:、またはスペースを抜ける必要はないので、]次のように使用できます。

:msg, regex, "\\[example]:\\[foo]\\[.*]: " -/var/log/example.log

関連情報