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

문제는 필터 명령 처리가 백슬래시 이스케이프를 해석하는 두 단계로 구성된다는 것입니다. 결과적으로 리터럴을 일치시키려는 경우 [정규식 패턴은 이지만 \[패턴을 문자열로 제공하므로 사용해야 하는 백슬래시를 이스케이프해야 합니다 \\[.

:, 또는 공백을 벗어날 필요가 없으므로 ]다음을 사용할 수 있습니다.

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

관련 정보