アクセスログ解析 ログファイルから社内アクセスをgrepで除く

 Linuxでの作業なので grep を使っています。Solaris10での作業は、/usr/bin/egrep で。

 ■社内アクセスのみ取得する

社内アクセスを emp.log として保存する

社内のIPアドレスが、192.168.* の場合、

 $ grep ^192.168 access_log > emp.log

apacheのアクセスログは、行頭にIPアドレスを記述するので、192.168の前に ^ を付ける。

 

 ■社内アクセスを除く-1

お客様からのアクセスのみを customer.log として保存する

 $ grep -v ^192.168 access_log > customer.log

 

 ■社内アクセスを除く-2

複数のログファイルがあるとき、

例えば、access_log.20061101, access_log.20061102, access_log.20061103... 

 $ grep -h -v ^192.168 access_log.* > customer.log

 access_log.* と指定して複数ログを対象にする。

-hオプションで、ファイル名の出力を抑制する。 

 

■社内アクセスを除く-3(オススメ)

社内のIPアドレスが複数あるとき、

例えば、192.168.* と 172.16.* と abc.co.jp だとする。この3つのアクセスを除外したい。

最初にパターンファイルを作っておく。テキストエディタで新規にpattern.txtを作る。中身は、

^192.168.
^172.16.
^abc.co.jp

 そして、grepを実行する。

$ grep -v -f pattern.txt access_log > customer.log

 -f オプションで、パターンファイルを指定する。これで複数の条件を指定できる。

-v オプションで、パターンにマッチしたものを除外する。

 

■社内アクセスを除く-4

上記3の方法は、ログファイルが一個のときのやりかた。

ログファイルが複数あるときは、このように。(2007年の複数ログファイルの場合)

$ grep -h -v -f pattern.txt access_2007* > customer_2007.log