rsyslog의 re_match()에 대한 올바른 구문은 무엇입니까?

rsyslog의 re_match()에 대한 올바른 구문은 무엇입니까?

rsyslog 출력에서 ​​cron 작업(systemd)의 원치 않는 메시지를 필터링하려고 합니다. 그러나 rsyslog는 항상 두 번째 매개변수에 대해 불평합니다 re_match(). 내 필터 규칙은 다음과 같습니다.

if $programname == "systemd" and re_match($msg, '^Started [Ss]ession \d+ of user ntpmon\.$') then stop

정규식을 큰 따옴표로 묶기 시작했고 rsyslog가 불평했습니다. 그런 다음 정규식을 작은 따옴표로 묶었고 rsyslog는 여전히 불평했습니다.

문서가 약간 모호합니다.

re_match(expr, re)

    returns 1, if expr matches re, 0 otherwise. Uses POSIX ERE.

어떻게 수정합니까(문서가 아닌 필터)?

답변1

\d백슬래시를 두 배로 늘려야 합니다. 그렇지 않으면 rsyslog는 이를 구문 분석할 수 없는 문자열의 이스케이프 시퀀스로 해석하려고 합니다 . 그래야 합니다 \\d.

그러나 \dPosix ERE는 아닙니다. 예를 들어 숫자를 언급할 수 있습니다 [0-9]. 그러니 시도해 보세요

'^Started [Ss]ession [0-9]+ of user ntpmon\\.$'

관련 정보