rsyslog7은 정규 표현식과 일치하지 않는 경우 호스트 이름을 필터링합니다.

rsyslog7은 정규 표현식과 일치하지 않는 경우 호스트 이름을 필터링합니다.

그래서 저는 rsyslog를 처음 접했고(최근 syslog-ng에서 전환함) 동적 파일 이름을 가질 수 있다는 점이 정말 마음에 듭니다... 최근 작업이 docker를 사용하기 시작했고 syslogtag의 많은 필드를 원격 호스트로 보냅니다. . 따라서 각 인스턴스에 대해 필터를 설정하는 대신 관련 세부 정보를 구문 분석하고 이를 자체 로그/디렉토리에 저장하는 동적 필터를 작성해 보았습니다(예: /var/log/docker/app name/syslog .log).

내 "애플리케이션 이름"은 필드 사이에 올바른 구분 기호를 제공할 때 작동하지만 정규식이 **NO MATCH**를 반환하고 모든 것을 넣습니다. Enter '/var/' log /docker/**does not match* */syslog.log'. **NO MATCH** 디렉터리를 사용하는 것은 문제가 되지 않지만 각 원격 호스트를 파일로 그룹화하는 것은 문제가 되지 않습니다. 정규식이 불일치를 반환하는지 테스트한 다음 파일 이름을 'syslog.log'에서 '%hostname%.log'로 변경하는 방법이 있습니까?

답변1

저는 전문가는 아니지만 여기에서 시작할 수 있습니다. 정규식을 반복해야 합니다(문자열을 얻기 위해 템플릿을 평가하는 방법을 모르겠습니다 **NO MATCH**). 예를 들어, "appname" 부분이 regexp와 일치한다고 가정하면 다음과 [a-z]+:같이 작성할 수 있습니다.

$template nomatch,"/var/log/docker/nomatch/%hostname%.log"
if (not re_match($msg, "[a-z]+:")) then {
   action(type="omfile" dynaFile="nomatch")
   stop
}

$template원하는 파일 이름을 설명하고 if일치하는 항목을 찾은 다음 action이 메시지를 더 이상 처리하지 않고 파일에 쓰는 작업을 수행합니다. 이것은 action()의미한다여기RainerScript에서.

관련 정보