현재 다음과 같은 입력 구성이 있습니다.
input(type="imfile"
File="/scp_tmp/<source_ip_address>/*.log"
addMetadata="on")
또한 두 가지 전역 변수가 있습니다.
set $.sourceIP = $fromhost-ip;
set $.sourceTag = $syslogtag
$!metadata!filename
로그 파일 이름과 로그 파일 이름에만 할당하기 위해 그 값(예를 들어 동일해야 함)을 추출하려면 어떻게 해야 합니까 ?/scp_tmp/127.0.0.1/audit.log
<source_ip_address>
$.sourceIP
audit
audit.log
$.sourceTag
답변1
rsyslog 스크립팅 언어레이나 스크립트용도가 많다기능. 이 경우 가장 간단한 응용 프로그램은 다음과 같습니다.대지, 문자열을 문자(10진수 ASCII 코드로 지정) 또는 문자열로 구분된 필드로 분할합니다. 1부터 시작하여 원하는 결과 분할 필드를 선택할 수 있습니다. 예를 들어:
field("/a/b/c", 47, 2)
첫 번째 필드는 첫 번째 "/" 앞의 공백이므로 결과 "a"를 두 번째 필드로 가져옵니다. 그래서 당신은 사용할 수 있습니다
set $.sourceIP = field($!metadata!filename, 47, 3);
";"는 필수라는 점을 잊지 마세요. 동일한 함수를 사용하여 네 번째 필드를 추출하고 "."으로 다시 분할할 수 있습니다. 첫 번째 필드를 차지하는 문자입니다.
더 복잡한 추출을 위해서는 다음과 같은 방법이 있습니다.재추출POSIX ERE 정규식을 사용하여 문자열의 일부를 일치시킬 수 있습니다.
re_extract("/a/b/c.d.log", "([^/]*).log$",0,1,"failed")