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
.
그러나 \d
Posix ERE는 아닙니다. 예를 들어 숫자를 언급할 수 있습니다 [0-9]
. 그러니 시도해 보세요
'^Started [Ss]ession [0-9]+ of user ntpmon\\.$'