次のメッセージをログファイルにリダイレクトしたいと思います。
"[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