ログファイルから最後の5分間の情報を抽出します。

ログファイルから最後の5分間の情報を抽出します。

私のシステム日付形式:

Thu Jun 13 12:55:18 EDT 2019

マイログ形式:

193.118.26.141 - - [01/May/2019:00:08:49 -0400] "GET / HTTP/1.1" 200 27

最後の5分間のログを取得する方法を教えてください。

ベストアンサー1

多くのテキスト処理と時間操作が必要なため、この操作はを使用して実行する必要がありますが、作業にはawkまだ外部コマンドが必要です。date

次のawkプログラム(私たちと呼ばれるparse_log_range.awk)が動作します:

#!/bin/awk -f
BEGIN{
    "date +%s" | getline now
    close("date +%s")
}

{
    n=match($0,/\[[^]]+\]/)
    tst=substr($0,n+1,RLENGTH-2)

    gsub(/\//," ",tst)  # replace all '/'
    sub(/:/," ",tst)    # replace first ':'
    
    cmd="date +%s -d \"" tst "\""
    cmd | getline tst_s; close(cmd)

    if (now-tst_s<max_age) print
}

最初は、date +%sシェルでコマンドを実行して現在時刻を照会し、それを変数に保存しますnow

ログファイルの各行に対して、以下が実行されます。

  • タイムスタンプを中間要素として抽出[ ... ]
  • 形式を理解しやすくするには、/まず削除してください。:date
  • タイムスタンプを「エポック以降の秒」に変換するシェルコマンドを作成します。date +%s -d edited timestamp
  • シェルでこのコマンドを実行し、結果を変数として読み込みます。tst_s

max_age次に、タイムスタンプがFarより小さいことを確認してくださいnow。指定する必要がある時間範囲はどこmax_ageですか(例:5分= 300秒)。

実行コマンドは

awk -v max_age=300 -f parse_log_range.awk logfile.txt

おすすめ記事