rainerscript
라는 하위 문자열이 있는 파일에 로그하는 규칙을 어떻게 작성할 수 있습니까 $programname
?
나는 다음과 같은 의사 규칙을 준수하는 것을 원합니다.
if $programname startswith "foo" then /path/to/<substring of $programname from 4 to end>
$programname
또한: 파일에 기록된 텍스트에서 "foo" 접두사를 제거하는 방법이 있습니까 ?
답변1
사실 OP의 의견은 도움이 되지 않는다고 생각합니다. 몇 가지 추가 테스트를 수행한 결과 공유하고 싶은 확실한 답변은 다음과 같습니다.
다음 내용으로 /etc/rsyslog.d/00-local.conf를 만듭니다.
template(name="AdminLog" type="string" string="/var/log/admin_%syslogtag:R,ERE,1,ZERO::(.*):--end%")
if ($programname == "admin") then {
action(type="omfile" dynaFile="AdminLog")
stop
}
systemctl restart rsyslog
logger -t admin:backup starting
이로 인해 /var/log/admin_backup이 로그를 가져옵니다.
노트:
- 저는 우분토 20.04를 실행하고 있습니다. 플랫폼/버전별 미묘한 차이가 결과에 영향을 미칠 수 있습니다.
- 아래에서 모든 변경 사항과 명령이 완료되었습니다
sudo -s
. - 이 템플릿에는 정규식을 사용할 필요가 없습니다. '%property:Field' 표기법이 더 효율적입니다. 이는 보다 복잡한 정규식을 사용하는 방법을 보여주기 위한 것입니다. 둘 다에 대한 구문을 참조하세요.부동산 대체품운영.
- %syslogtag 끝에 콜론이 추가되어 구문 분석 시 이를 수용해야 합니다.
- 사용하는데 매우 도움이 됩니다정규식 테스트 페이지Rsyslog의 경우.
- /var/log 이외의 폴더에 새 파일을 생성하면 알려진 문제가 발생하며 이는 OP 요청 범위를 벗어납니다. /var/log에 있는 파일에 대해 작동하도록 만든 다음, 다른 폴더에 대해 작동하도록 별도의 과제를 수행합니다.
- 참고하세요행동사용동적 파일옵션.
- 이는 결과를 변환하여 수행할 수도 있습니다.템플릿을 변수로exec_template을 사용하고 추가로 조작하십시오. 이것은샘플 페이지.
- Rainerscript로 정규식을 수행하는 또 다른 방법은 다음을 사용하는 것입니다.재추출 기능. 예:
set $.thefunction = re_extract($syslogtag,...)