Linux

如何提取最後一小時的日誌條目?

  • September 4, 2019

我正在尋找一個單行命令來從 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=<20180118105544.385A6204039F71@server.com>
Jan 18 05:55:44 smtp-out-01 postfix/qmgr[28134]: 70CF214B4: from=<root@server.com>, size=1806, nrcpt=1 (queue active)

從過去一個小時中提取條目的最短和最有效的方法是什麼?

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

使用 -u 指定服務名稱,然後使用 -S 指定從 date 命令生成的“開始”日期

awk -v ldate="$( date +'%d %H-%M-%S' -d'1 hour ago' )" '$2 " " $3 >= ldate'做你想做的事,但正如 RomanPerekhrest 所說,它不會在本月的第一個小時工作。

無論如何,這會將變數date設置為日期,然後是時間,然後比較欄位 2 - 3 的範圍,以確定它們是否高於/晚於它。只需添加所需的間距即可將它們連接起來,因此只需要一個日期字元串。

可能值得將日期更改為更好的格式,並將記錄器設置為記錄更方便的格式,包括年份。

引用自:https://unix.stackexchange.com/questions/417986