アクセスログを単位時間ごとに集計して状況をみることが多いのですが、毎度毎度awkスクリプトを書くのに疲れたので、専用ツールを作ってみました。
Installation
OSXの場合はHomebrewでインストールできます。
brew install https://raw.githubusercontent.com/winebarrel/agg/master/homebrew/agg.rb
その他のOSはアーカイブを展開すれば実行できます。
https://github.com/winebarrel/agg/releases
Usage
Usage of agg:
-bar int
ASCII bar length
-s int
Trim timestamp suffix length
-t string
count,countall,sum,avg,max,min (default "count")
実行例
まず、以下のようなアクセスログがあるとします。
$ cat access.log
12:10 FOO 100
12:10 FOO 200
12:10 BAR 300
12:11 FOO 200
12:11 BAR 300
12:11 BAR 400
12:12 ZOO 500
Count系
何もオプションをつけないと、タイムスタンプをそのまま集計して、値ごとの件数を出します。
$ awk '{print $1, $2}' access.log | agg
12:10 BAR:1 FOO:2
12:11 BAR:2 FOO:1
12:12 ZOO:1
-s
オプションを渡すと、指定された長さ分タイムスタンプの末尾を削ります。
下の例では10分ごとの集計になります。
$ awk '{print $1, $2}' access.log | agg -s 1
12:1 BAR:3 FOO:3 ZOO:1
-t countall
で値ごとではなくすべての値の合計件数を出します。
また、-bar
オプションで指定した最大値でのグラフを出します。
$ awk '{print $1, $2}' access.log | agg -t countall -bar 1
12:10 3 ###
12:11 3 ###
12:12 1 #
数値系
-t sum
で値を数値と見なして、合計値を出します。
$ awk '{print $1, $3}' access.log | agg -t sum
12:10 600.000000
12:11 900.000000
12:12 500.000000
-t avg
-t max
-t min
でそれぞれ平均値・最大値・最小値を出します。
$ awk '{print $1, $3}' access.log | agg -t avg
12:10 200.000000
12:11 300.000000
12:12 500.000000
$ awk '{print $1, $3}' access.log | agg -t max
12:10 300.000000
12:11 400.000000
12:12 500.000000
$ awk '{print $1, $3}' access.log | agg -t min
12:10 100.000000
12:11 200.000000
12:12 500.000000
-bar
オプションを渡すと指定された最大値でグラフを表示します。
$ awk '{print $1, $3}' access.log | agg -t sum --bar 1000
12:10 600.000000 ##############################
12:11 900.000000 #############################################
12:12 500.000000 #########################