2016-05-26 13 views
-2

Apacheアクセスログファイルを解析するためにawkを使用して情報を次の形式で表示するにはどうすればよいですか?Apacheログから1時間にIPアドレスとIPアドレスを表示

Date  Time Count IP Address 
2016-05-26 00:00 200 192.168.1.x 
2016-05-26 00:00 152 172.17.100.x 
2016-05-26 00:01 43 192.168.1.x 

私にはっきりさせてください。 I は1時間あたりの合計リクエストを表示しません。 I は1分あたりの合計リクエストを表示しません。私はこれらのタスクの両方を実行するための基本的なawkスクリプトを書く方法を知っています。

I 各1分あたりのリクエスト数を確認するユニーク IPアドレスが送信されています。私はこれを行うawkで十分に精通していない。

Apacheのログ形式

LogFormat "%h %l %u %{%F %T %z}t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" 

サンプル

私は、ログファイルの末尾をつかれました。ここにはそれに含まれるものの小さなサンプルがあります。 (私たちは、今日のために100K以上のエントリを持っていることがここでそれらすべてを共有することは実現可能ではありません多くの行が必要な場合はお問い合わせください。。。)

54.213.236.39 - - 2016-05-26 14:38:51 -0400 "GET /p1077921.html HTTP/1.0" 403 400 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_77)" 
54.213.236.39 - - 2016-05-26 14:38:51 -0400 "GET /p1060432.html HTTP/1.0" 403 398 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_77)" 
54.213.254.166 - - 2016-05-26 14:38:51 -0400 "GET /p819757.html HTTP/1.0" 403 400 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_77)" 
54.213.236.39 - - 2016-05-26 14:38:51 -0400 "GET /p1084269.html HTTP/1.0" 403 400 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_77)" 
107.23.252.229 - - 2016-05-26 14:38:51 -0400 "GET /p305987.html HTTP/1.0" 403 399 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_77)" 

例1:

grep '2016-05-26' access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -40 | awk '{print $2,$2,$1}' | logresolve | awk '{printf "%6d %s (%s)\n",$3,$1,$2}' 

は、以下の出力を生成します

307 135-23-174-138.cpe.pppoe.ca (135.23.174.138) 
313 5265DCE5.cm-8.dynamic.ziggo.nl (82.101.220.229) 
378 92-108-204-76.dynamic.upc.nl (92.108.204.76) 
405 0191301456.0.fullrate.ninja (90.185.180.167) 
632 ec2-52-58-151-132.eu-central-1.compute.amazonaws.com (52.58.151.132) 
798 187.228.212.148 (187.228.212.148) 
877 207.246.75.253 (207.246.75.253) 
966 ec2-54-213-177-120.us-west-2.compute.amazonaws.com (54.213.177.120) 
1116 ec2-54-186-148-0.us-west-2.compute.amazonaws.com (54.186.148.0) 
1224 ppp121-44-247-209.bras2.syd2.internode.on.net (121.44.247.209) 
1369 ec2-54-187-239-46.us-west-2.compute.amazonaws.com (54.187.239.46) 
1584 45.55.189.64 (45.55.189.64) 
2658 50-77-47-70-static.hfc.comcastbusiness.net (50.77.47.70) 

例2:

0123すべてのヘルプははるかに高く評価されて

560 2016-05-26 00:00 
534 2016-05-26 00:01 
538 2016-05-26 00:02 
554 2016-05-26 00:03 
566 2016-05-26 00:04 
534 2016-05-26 00:05 
559 2016-05-26 00:06 
531 2016-05-26 00:07 
540 2016-05-26 00:08 
435 2016-05-26 00:09 
312 2016-05-26 00:10 

:以下の出力が得られます

grep "2016-05-26" access.log | awk '{ print $4, $5, $1}' | cut -f2 | awk -F: '{ print $1":"$2 }' | sort -nk1 -nk2 | uniq -c | awk '{ if ($1 > 10) print $0 }' 

。ここ

+3

[mcve]を投稿してください。 – sjsam

+1

コーディングの努力を示してください。 – Cyrus

+1

あなたの現在の問題を解決するための最善の試みを示すコードで最もよく示されているあなたの*現在の理解を評価することができないと、awkの**より良い理解を達成するのを手助けすることはできません。効率的な方法でこれを行うには、いくつかの小さなサンプルデータ、そのサンプルデータ(あなたが提供したもの)からの必要な出力だけでなく、現在のコードからの現在の出力および/または生成されているエラーメッセージあなたの現在のコードによって(したがって、http://stackoverflow.com/help/mcveの合理的な要求)。 Qを更新してください。がんばろう。 – shellter

答えて

0

は方法です:

まず、この変換:sort | uniq -cそのを

54.213.236.39 2016-05-26 14 # <- 14th hour 

:これまで

54.213.236.39 - - 2016-05-26 14:38:51 -0400 "GET /p1077921.html HTTP/1.0" 403 400 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_77)" 

を。

grep '2016-05-26' access.log | 
    tr ':' ' ' | 
    awk '{print $1,$4,$5}' | 
    sort | 
    uniq -c | 
    sort -n