![rsyslog7은 정규 표현식과 일치하지 않는 경우 호스트 이름을 필터링합니다.](https://linux55.com/image/98359/rsyslog7%EC%9D%80%20%EC%A0%95%EA%B7%9C%20%ED%91%9C%ED%98%84%EC%8B%9D%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20%ED%98%B8%EC%8A%A4%ED%8A%B8%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%ED%95%84%ED%84%B0%EB%A7%81%ED%95%A9%EB%8B%88%EB%8B%A4..png)
그래서 저는 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에서.