本日も乙

ただの自己満足な備忘録。

Webサーバ(Apache, nginx)のアクセスログから時間帯別にアクセス数を算出するワンライナー

以前、仕事で「時間帯別のアクセス数を出してくれ」と言われたのでApacheアクセスログからコマンドで抽出しました。 僕はワンライナー厨ではないのでコマンドがやたら長いので、「この方が短く書けるしいいよ!」みたいのがありましたらコメントしてください。

$ for i in `seq -w 0 23`; do cat access.log | grep "10/Mar/2013:$i" | grep "GET \/" | grep -ive "GET /.*\.\(css\|js\|jpg\|gif\|png\|ico\)\ HTTP" | egrep -iv "dummy connection|robots\.txt" | wc -l; done;

0
0
0
76
76
136
82
89
169
547
679
538
481
694
525
530
836
786
700
836
805
496
325
361

※ アクセス数はサンプルとなります。

  • 抽出対象のアクセスログファイル名(access.log)や抽出したい日付フォーマット(10/Mar/2013)は適宜変更してください
  • アクセスから除外したいパスは、grep -iv "dummy connection|robots.txt" のように"|"でつないでください

このままだとどの時間帯のアクセス数なのかが分かりづらいので、改良します。

$ for i in `seq -w 0 23`; do echo $i `cat access.log | grep "10/Mar/2013:$i" | grep "GET \/" | grep -ive "GET /.*\.\(css\|js\|jpg\|gif\|png\|ico\)\ HTTP" | egrep -iv "dummy connection|robots\.txt" | wc -l`; done;

00 0
01 0
02 0
03 76
04 76
05 136
06 82
07 89
08 169
09 547
10 679
11 538
12 481
13 694
14 525
15 530
16 836
17 786
18 700
19 836
20 805
21 496
22 325
23 361

左側に時間帯、右側にアクセス数が表示されます。