labunix's blog

labunixのラボUnix

プロキシ(Squid)ログのシェル芸、ログ解析

■プロキシ(Squid)ログのシェル芸、ログ解析
 ログの書式は以下。

$ sudo awk '/^logformat/{print}' /etc/squid/squid.conf 
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

■最初の行と最後の行の時間を取得

$ sudo awk '(NR==1){print $4,$5};END{print $4,$5}' /var/log/squid/access.log.1
[19/Apr/2015:08:35:13 +0900]
[20/Apr/2015:07:35:15 +0900]

■最初の行と最後の行の時間は以下の方法でも良い。

$ sudo head -1  /var/log/squid/access.log.1 | awk '{print $4,$5}'; \
  sudo tail -1  /var/log/squid/access.log.1 | awk '{print $4,$5}'
[19/Apr/2015:08:35:13 +0900]
[20/Apr/2015:07:35:15 +0900]

■GETメソッドのHTTPステータスコード毎のカウント
 200が多いのは当然。204が意外と多い。

$ sudo awk -F\" '/GET / {print $3}' /var/log/squid/access.log.1 | \
  awk '{a[$1]+=1};END{for (n in a){print n,a[n]}}' | sort -nr -k2
200 23553
304 7174
302 649
403 148
204 148
301 126
404 64
303 53
504 20
307 3
502 2
206 2

■GETメソッドのHTTPステータスコード毎の、
 HTTPヘッダの送受信バイト数の集計

$ sudo awk '/^#\t\tst\t/{print}' /etc/squid/squid.conf 
#		st	Request+Reply size including HTTP headers

$ sudo awk -F\" '/GET / {print $3,$4}' /var/log/squid/access.log.1 | \
  awk '{a[$1]+=$2};END{for (n in a){print n,a[n]}}' | sort -nr -k2
200 5843382137
304 2019230
404 513782
302 410535
403 88130
301 78327
204 58502
303 29985
504 19780
206 11440
502 6867
307 2040

■GETメソッドのHTTPステータス200のクライアントブラウザ集計
 自分の管理しているIPとブラウザであることを確認出来ればとりあえず。

$ sudo awk -F\" '/GET.*HTTP\/1.1. 200 / {print $1,$6}' /var/log/squid/access.log.1 | \
  sed 's% - - \[.*\] \|^..........%%g' | sort | uniq -c | sort -nr -k1
  23516 90 Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0
     15 90 Debian APT-HTTP/1.3 (0.9.7.9)
     11 88 Debian APT-HTTP/1.3 (0.9.7.9)
      8 90 Debian APT-HTTP/1.3 (1.0.9.8)