2012年6月13日水曜日

Apacheのアクセスログを分間リクエスト数だけまとめる

Apacheのアクセスログから画像、CSS、Javascriptをすっ飛ばして簡易的に分間リクエスト数を算出するスクリプトを作ってみた。
時間がないのでPHPとBashがごっちゃになってる上に変数も何もあったもんじゃない糞っぷりですが、急いでいたもんですんません!
analytic.php
<?PHP
$argDate = strtotime($argv[1]);
$file = $argv[2];

for($i = -120; $i <= 120; $i++){
  echo date('d/M/Y:H:i', strtotime("+${i} minute", $argDate));
  if($i < 120){
    echo "\n";
  }
}
?>


analytic.sh
#!/bin/sh
echo '' > result.csv
for line in `php ./analytic.php "${1}" ./access_log` ; do
  count=`grep "${line}" ./access_log | egrep -v "\.(gif|jpg|css|js) " | wc -l`
  echo ${line},${count} >> result.csv  
done


access_logがあるフォルダに上記のファイル2点を作成して
sh ./analytic.sh "2012-06-13 18:00:00"

としてあげると数十分シェルが固まってから6月13日の18時から前後2時間で分毎のおよそのリクエスト数が
result.csvに出力されます。