각 사용자 ID에 대해 다른 파일을 사용하도록 로그를 필터링한다고 가정하면 다음과 같이 각 uid에 대한 규칙을 작성할 수 있습니다.
if $msg contains 'uid=500' then /var/log/uid/500
if $msg contains 'uid=501' then /var/log/uid/501
if $msg contains 'uid=502' then /var/log/uid/502
다음과 같이 정규식 캡처를 사용하여 한 줄을 작성하고 싶습니다.
if $msg contains 'uid=\([0-9]+\)' then /var/log/uid/\1
할 수 있나요?
답변1
당신은 그것을 사용할 수 있습니다부동산 대체품. 귀하 rsyslog.conf
또는 유사한 라인을 원하는 파일 이름 형식의 템플릿으로 정의하고 입력 라인을 일치시킬 때 작업에 사용합니다. 예를 들어,
$template myfile,"/var/log/uid/%msg:R,ERE,1,FIELD:.*?uid=([0-9]+).*--end%"
if (re_match($msg, "uid=[0-9]+")) then {
action(type="omfile" dynaFile="myfile")
stop
}
템플릿 표현 템플릿 변수 myfile
는 정규식(R) 일치, 확장(ERE), 그룹 캡처 1(1) msg
(또는 일치하는 항목이 없는 경우 원래 필드 유지)로 대체된 속성을 포함하는 문자열입니다. 실제 정규 표현식은 이 .*?uid=([0-9]+).*
부분입니다. 이는 --end
시퀀스의 필수 부분입니다 %...:R,...--end%
.
아래 줄은 일치시키려는 줄과 결과가 배치되는 위치에 대한 일반적인 Rainer 스크립트 테스트입니다.