過去1時間のログエントリを抽出する方法は?

過去1時間のログエントリを抽出する方法は?

Postfixメールログファイルから過去1時間に発生したログエントリを抽出する1行のコマンドを探しています。

に基づいてこの問題、提案されたコマンドを実行してみましたが、かなり長いです。私はこれを短縮/改善することを望んでいます。現在使用しているコマンドは次のとおりです。

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時間のアイテムを抽出する最も短く効率的な方法は何ですか?

答え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の範囲を比較して、それより高いか遅いかどうかを確認します。接続に必要な間隔を追加するだけで、日付文字列が1つだけ必要です。

日付をより良い形式に変更し、ロガーをより便利に記録する形式(年を含む)に設定することをお勧めします。

答え3

残念ながら、前の文のどれも私には適用されません。

(Linux 4.4.0-142-一般 #168-Ubuntu)

私のバリエーション:

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時間の既存のログを確認します。

混乱した点があれば教えてください。

関連情報