지난 한 시간 동안의 로그 항목을 추출하는 방법은 무엇입니까?

지난 한 시간 동안의 로그 항목을 추출하는 방법은 무엇입니까?

Postfix 메일 로그 파일에서 지난 한 시간 동안 발생한 로그 항목을 추출하는 한 줄 명령을 찾고 있습니다.

기반으로이 문제, 제안된 명령을 실행해 보았지만 꽤 깁니다. 나는 이것을 단축/개선하기를 바라고 있습니다. 현재 사용하고 있는 명령은 다음과 같습니다.

awk -vDate1=`date -d'now-1 hour' +%H:%M:%S` -vDate2=`date -d'now-1 hour' +%d` '{ if ($3 > Date1 && $2 >= Date2) print $0}' /var/log/maillog

이메일 로그의 로그 형식은 다음과 같습니다.

Jan 18 05:55:44 smtp-out-01 postfix/smtpd[8748]: connect from server.com[1.2.3.4]
Jan 18 05:55:44 smtp-out-01 postfix/smtpd[8748]: 70CF214B4: client=server.com[1.2.3.4]
Jan 18 05:55:44 smtp-out-01 postfix/cleanup[8751]: 70CF214B4: message-id=<[email protected]>
Jan 18 05:55:44 smtp-out-01 postfix/qmgr[28134]: 70CF214B4: from=<[email protected]>, size=1806, nrcpt=1 (queue active)

지난 한 시간 동안의 항목을 추출하는 가장 짧고 효율적인 방법은 무엇입니까?

답변1

journalctl -u postfix -S "$(date -d "-1 hour" +%Y"-"%m"-"%d" "%T)

-u를 사용하여 서비스 이름을 지정한 다음 -S를 사용하여 date 명령에서 생성된 "이후" 날짜를 지정합니다.

답변2

awk -v ldate="$( date +'%d %H-%M-%S' -d'1 hour ago' )" '$2 " " $3 >= ldate'원하는 대로 하면 가능할 것 같은데 RomanPerekrest가 말했듯이 매월 첫 시간에는 작동하지 않습니다.

어쨌든 이는 변수를 date날짜, 시간으로 설정한 다음 필드 2 - 3의 범위를 비교하여 그보다 높거나 늦은지 확인합니다. 연결하는 데 필요한 간격을 추가하면 되므로 날짜 문자열이 하나만 필요합니다.

날짜를 더 나은 형식으로 변경하고 로거를 더 편리하게 기록하는 형식(연도 포함)으로 설정하는 것이 좋습니다.

답변3

불행히도 이전 문장 중 어느 것도 나에게 적용되지 않습니다.

(Linux 4.4.0-142-일반 #168-Ubuntu)

내 변형(bash):

k=$(date -d '1 hour ago' +'%H') | egrep "^*$k:" ./my.log

답변4

 i=`date -d "1 hour ago"| awk '{print $2}'`; j=`date -d "1 hour ago"| awk '{print $3}'`;k=`date -d "1 hour ago"| awk '{print $4}'`; awk -v i="$i" -v j="$j" -v k="$k" '$1 == i && $2 == j && $3 > k {print $0}'  /var/log/maillog

변수 i==>에 월을 저장하고 변수 j==>에 날짜를 저장합니다.

기간을 시간:분:초 형식으로 변수 k==>에 저장합니다.

내 스크립트는 현재 월, 일을 확인하고 날짜까지 지난 1시간 동안의 기존 로그를 확인합니다.

혼란스러운 점이 있으면 말씀해 주세요.

관련 정보