Rsyslog에서 정규식 일치 항목을 사용자 정의 텍스트로 어떻게 바꾸나요?

Rsyslog에서 정규식 일치 항목을 사용자 정의 텍스트로 어떻게 바꾸나요?

정규식을 통해 텍스트를 캡처하고 해당 텍스트를 사용자 정의 문자열로 바꾸려고 합니다.

현재 코드는 IP 주소를 성공적으로 캡처하지만 IP 주소를 나머지 메시지와 함께 사용자 정의 텍스트로 바꾸는 방법을 모르겠습니다.

$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"

내 첫 번째 생각은 어떻게든 템플릿에서 정규식을 이동하고(예: 일부 RainerScript를 사용하여) modded_msg수정된 속성으로 설정된 새 필드/변수를 만드는 것입니다 msg. 그런 다음 %modded_msg%$Template에서 사용합니다.

여러 번 시도했지만(ChatGPT에게 감사드립니다) 제대로 작동하지 않습니다.

답변1

다음 예에서는 IP 주소의 msg 속성을 확인한 다음 주소에 따라 메시지에서 해당 속성의 모든 항목을 일부 문자열로 바꿀 수 있습니다.

set $.myip = re_extract($msg, "(([0-9]{1,3}\\.){3}[0-9]{1,3})", 0, 1, 0);
if ($.myip == 0) then  set $.mymsg = $msg;
else{
 if ($.myip=="192.1.2.3") then
  set $.mymsg = replace($msg, $.myip, "SPECIALIP");
 else
  set $.mymsg = replace($msg, $.myip, "boringip");
}
template(name="mytemplate" type="string" string="%TIMESTAMP% %$.mymsg%\n")
action(type="omfile" file="output" template="mytemplate")

re_extract()속성에서 정규 표현식을 찾습니다. ()전체 일치 항목인 캡처 그룹 1을 추출할 수 있도록 추가 항목을 기록해 두십시오 . 또한 \2배가 됩니다. 마지막 매개변수는 0이며 실패 시 반환됩니다. 반환된 문자열은 지역 변수에 저장됩니다 $.myip.

replace()속성에서 해당 문자열을 모두 바꾸고 결과를 다른 지역 변수에 반환합니다. 템플릿은 이 지역 변수를 사용합니다.

관련 정보