리눅스 rsyslog 수정

리눅스 rsyslog 수정

rsyslog다음 값을 구성하고 설정했습니다 .

$template serverlog, "/var/log/TEST/%HOSTNAME%/server.log"
local4.* ?serverlog

이제 코드는 를 기반으로 폴더를 생성 %HOSTNAME%하지만 먼저 서버 이름(회사 이름)에 폴더를 만든 다음 HOSTNAME.

예: 2개의 다른 회사에 3개의 서버가 있고 해당 3개의 서버 이름(호스트 이름)은 다음과 같습니다 ABCD.xyzabcdapp-1t abcdapp-2t abcdapp-3t

xyzapp-1t xyzapp-2t xyzapp-3t

이제 위 템플릿을 실행하면 호스트 이름을 기반으로 다른 폴더가 생성되지만 호스트 이름을 기준으로 /var/log/TEST/2개의 다른 폴더를 생성해야 하며 ABCD특정 XYZ디렉터리로 이동하여 하위 폴더가 생성됩니다.

예를 들어 다음과 같아야 합니다.

/var/log/TEST/ABCD/abcdapp-1t/server.log
/var/log/TEST/ABCD/abcdapp-2t/server.log
/var/log/TEST/ABCD/abcdapp-3t/server.log

/var/log/TEST/XYZ/xyzapp-1t/server.log
/var/log/TEST/XYZ/xyzapp-2t/server.log
/var/log/TEST/XYZ/xyzapp-3t/server.log

15개가 넘는 클라이언트 서버가 있기 때문에 하나의 명령문으로는 이를 수행할 수 없습니다.

특정 폴더별로 필터링 하고 특정 폴더로 이동할 수 있도록 If else IF의 문을 어떻게 사용합니까 ?rsyslogHOSTNAME

어떤 제안이 있으십니까?

답변1

HOSTNAME 필드가 다음 형식이라고 가정하면남은 글자 이름시작 부분의 문자 부분은 회사 이름이며 다음을 사용하여 필드와 구분할 수 있습니다.정규식 속성 대체자. 템플릿을 다음으로 변경하세요.

$template serverlog, "/var/log/TEST/%hostname:R,ERE,1,FIELD:([^-]+)--end%/%HOSTNAME%/server.log"

정규식 패턴은 ([^-]+)포함되지 않은 하나 이상의 문자 입니다 -. 나머지는 확장 정규식 구문 ,1의 첫 번째 캡처 그룹 만 유지되어야 함을 지정합니다. ,ERE일치하는 항목이 없으면 FIELD전체가 유지됩니다.

rsyslog 버전 3.19.5 이상 또는 4.1.5 이상이 있어야 합니다. 필요한 경우 대문자로 변경하려면 위의 링크를 참조하세요.


또는 rsyslog 버전이 7 이상인 경우 RainerScript를 사용하여 다음과 같이 원하는 작업을 수행할 수 있습니다.

$template myplate,"/var/log/TEST/%$.customer%/%hostname%/server.log"
if ($hostname startswith "abcd") then set $.customer = "ABCD";
if ($hostname startswith "xyz") then set $.customer = "XYZ";
action(type="omfile" dynaFile="myplate")
stop

그러면 지역 변수를 사용하여 템플릿이 생성됩니다 $.customer. 이 변수는 호스트 이름이 각 명령문과 일치할 때 각 메시지에 대해 설정됩니다 if. action계산 파일에 메시지를 씁니다 . if각 고객에 대해 다른 명세서를 추가 할 수 있습니다 .

관련 정보