syslog 이벤트를 도입할 때 로그를 월별, 일별, 시간별 폴더로 분할하는 방법은 무엇입니까?

syslog 이벤트를 도입할 때 로그를 월별, 일별, 시간별 폴더로 분할하는 방법은 무엇입니까?

rsyslog를 통해 로그 파일을 소개하며 구성은 다음과 같습니다.

root@rhel:/etc/rsyslog.d# head mail_prod_logs.conf
if $fromhost-ip=="10.10.10.10" and $programname=="AMP_Logs" then -/var/log/mail_logs/amp.log

내 로그는 모두 다음 폴더에 저장됩니다 /var/log/mail_logs/amp.log.

Oct 18 13:29:28 server.com AMP_Logs: Info: Begin Logfile
Oct 18 14:29:28 server.com AMP_Logs: Info: Version: 12.1.0-000 SN: .....
Oct 18 14:29:28 server.com AMP_Logs: Info: Time offset from UTC: -14400 seconds
Oct 18 15:29:23 server.com AMP_Logs: Info: Response received for.....
Oct 18 15:29:23 server.com AMP_Logs: Info: File reputation query.....
Oct 19 13:29:23 server.com AMP_Logs: Info: Response received for fil....
Oct 19 13:29:58 server.com AMP_Logs: Info: File reputation query ....
Oct 19 13:29:58 server.com AMP_Logs: Info: File reputation query ....

datetime로그의 일부를 사용하여 mail_prod_logs.conf.

그래서 그것은 다음과 같습니다:

/var/log/mail_logs/Sep/30/23.log
/var/log/mail_logs/Oct/01/00.log
/var/log/mail_logs/Oct/01/01.log
/var/log/mail_logs/Oct/01/02.log
...

어떻게 해야 하나요?

답변1

동적 파일 템플릿을 사용하여 이 작업을 수행할 수 있습니다. 사용하다속성 변경자%timestamp%속성 부분, 특히 옵션 date-daydate-hour문자 1~3 date-rfc3164("Oct 9 09:47:08"과 유사한 문자열)을 선택합니다 . 일반적으로 예제에서는 템플릿을 다음과 같이 부릅니다 DynFile.

$template DynFile,"/var/log/mail_logs/%timestamp:1:3:date-rfc3164%/%timestamp:::date-day%/%timestamp:::date-hour%.log"

템플릿을 사용하려면 ...then -/var/log/mail_logs/amp.log다음으로 바꾸세요....then -?DynFile

더 쉬운 처리를 위해 문자로 된 3개 월(1월, 2월...)을 2자리 월로 바꾸는 것을 고려하고 있다면 대신 사용하세요.

$template DynFile,"/var/log/mail_logs/%timestamp:::date-month%/%timestamp:::date-day%/%timestamp:::date-hour%.log

답변2

로그 줄이 코드 조각에 표시된 대로 형식화되었다고 가정하면 다음과 같이 시작됩니다.

awk '{
      dir=$1 "/" $2; log_file=dir "/" substr($3, 1, 2) ".log"
      if (!exists[dir]++) {system("mkdir -p " dir)}; 
      print > log_file
}' amp.log

이 작업은 에서 수행됩니다 /var/log/mail_logs/.

날짜별 디렉토리가 존재하지 않는 경우 외부 명령을 호출하면 해당 디렉토리가 생성됩니다 system. mkdir전달하면 -p필요에 따라 상위 디렉터리가 생성됩니다(따라서 디렉터리는 10월이 처음 시작될 때 생성됩니다 Oct). 또한 mkdir -p /Oct/01디렉토리가 이미 존재하는 경우 오류가 보고되지 않는지 -p확인하십시오 .mkdir

print로그 시간 구성 요소를 기반으로 이름이 기록되는 파일에 로그 줄을 쓰기 위해 호출됩니다 . 각각의 새 로그 파일은 명령 수명 동안 처음 기록되고 추가될 때 생성됩니다.

덮어쓰는 대신 마지막 실행의 날짜/시간 기반 로그 파일을 추가하려면 로 변경할 수 있습니다 print >.print >>awk

관련 정보