rsyslog: 메타데이터에서 값을 추출하여 변수에 저장하는 방법은 무엇입니까?

rsyslog: 메타데이터에서 값을 추출하여 변수에 저장하는 방법은 무엇입니까?

현재 다음과 같은 입력 구성이 있습니다.

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>$.sourceIPauditaudit.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")

관련 정보