shell統計pvとuv、独立ipの方法

1957 ワード

毎日ログを分析している友達は本当に傷がつきません。よくPV、UV、独立IPなどの統計値を提供します。C/C+、javaを使ってもいいです。まずファイルを読み取り、逐行スキャンして、マークできる値をデータ構造に入れて、最後の結果を出すことができます。実はLinux自体は強力なテキスト処理機能があります。shell+テキストツールを使って結果を出すことができます。
Nngix出力のaccess logsファイルは以下の通りです。
ログファイルコード 

192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /index.html HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-" 
192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /poweredby.png HTTP/1.1" 200 3034 "http://192.168.1.201/" "Chrome/15.0.874.106" "-" 
192.168.1.177 - - 1007071650 [05/Nov/2011:16:06:59 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Chrome/15.0.874.106" "-" 
192.168.1.178 - - 58565468 [05/Nov/2011:16:17:40 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" "-" 
192.168.1.166 - - 119272312 [05/Nov/2011:16:17:40 +0800] "GET /nginx-logo.png HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-" 
 
PVは簡単です。大体、あるURLの訪問回数を統計します。例えば、統計/index.の訪問回数は
  
grep "/index.html" /var/log/nginx/access.log Cc 
です。
UVは、ユーザーID(4列目)に基づき、まず文字列切り取りが必要です。cutコマンドを使用して、スペース記号で分割します。-d'、さらに4列-f 4を取って、ここで並べ替えが必要です。uniqツールを使用する必要があります。これはsortツールを使用して識別子を並べ替えなければなりません。並べ替え後にuniqツールを使用すれば目的に達することができます。間はパイプ記号でリンクして、最後にwc Clで統計数を出力します。
たとえば、私たちは統計的にアクセスしました。これもページのuv:

grep "/index.html" /var/log/nginx/access.log | cut Cd “ ” Cf 4| sort | uniq | wc Cl 
独立IP:
もし私達が駅全体の独立IPを統計するなら、grepを使って具体的なページに合わせる必要はなく、catを使って出力すればいいです。

cat /var/log/nginx/access.log | cut Cd “ ” Cf 1 | sort| uniq | wc -l 
都木は強力なawkを使って、基本的な統計需要を完成しました。