Apacheのログから応答速度分布やエラー状況を分析する(原始的な方法)
遊びで Apache のログを分析した時のメモです。
Google Analytics や Chartbeat などのブラウザ側解析ツールも便利ですが、サーバの健全性を確認するには、Apache のログ解析もまだまだ不要とは言えないと思います。
awk の力技で解析するので、あまり巨大なデータでは無理がありますが、個人サイトに毛が生えたくらいまでなら十分使えるでしょう。
記事最後の参考ページをパクってちょっといじっただけですが、自分用の備忘録って事で。
なお、参考ページの方は、ステータスコード 500/200 の比率を出すワンライナー等なども作っておられます。
Apacheのログに処理時間を出力する設定
まずは、Apache のログに処理時間が出力されていないと話が始まりません。
httpd.conf なりで combined 形式の最後に %D (処理時間をマイクロ秒で)を追加した LogFormat を新設したりします。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combinedelapsed
設定反映をお忘れなく。
Apache応答時間の累積分布とかを見る
すげー汚くて恐縮ですが、Apache応答速度の累積分布を出力するワンライナーです。
echo -e "sec(s)\tcdist%\tdist%\thit(s)\tremain(s)";grep "06/Jul/2012" foo.bar.net-access_log | awk '$9==200{print int($NF/100000)/10}'|sort -n|uniq -c|awk '{sum+=$1;data[NR]=$1;s[NR]=$2}END{for(i=1;i<=NR;i++){tmp+=data[i]; printf("%3.1f\t%2.2f%%\t%2.2f%%\t%d\t%d\n", s[i], tmp/sum*100, data[i]/sum*100, data[i], sum-tmp)}}'|head -20
結果はこんな↓感じ。
ヘッダの echo や、お尻の head は無くしても良いでしょう。
結果は、左から順に、「経過秒数(区間floor)」・「累積分布%」・「分布%」・「Hit数」・「この区間以前に無い残りのHit数」です。
ここでは HTTP Response code = 200 だけを抽出しています。
remain(s)がある程度以下の超重い処理の存在が分かったら、次の方法でログを目検するとよいかも。
処理時間が一定以上のログだけ抽出
例えば、6秒以上かかったログの抽出はこんな感じで。
grep -E '06/Jul/2012' foo.bar.net-access_log | awk '$9==200 && $NF>6*1000000 {print}'
URL指定はこんな感じ。とか。
grep -E '06/Jul/2012.*GET /hoge' foo.bar.net-access_log | awk '$9==200 && $NF>6*1000000 {print}'
HTTP Response Code=500 のログだけを出力
Internal Server Error だけの抽出はこんな感じ。
grep -E '06/Jul/2012.*GET /wp-a' foo.bar.net-access_log | awk '$9==500{print}'
分単位でHit数を見る
まんまパクリですが、メモ。cut のあたりとか頭柔らかいですねぇ。
ただし、相当重いので要注意。ログデータ量によっては時間まで grep した方がいいかも。
grep '05/Jul/2012' foo.bar.net-access_log | awk '$9==200{print}' | cut -f2,3 -d: | sort | uniq -c|less
結果はこんな↓感じ。
余談
計測は大事ですよねー。噂話ベースでは身に付かない独自のノウハウを蓄積するポイントにもなりますし。
構成各要素の能力や、各ブロックの Blueprint なり Big Picture がある程度分かっていてれば、どの構成ならどのくらいのトラフィックが捌けるか、という当たりが付けられるんですが、そうでない場合は勉強にもなるでしょうし。
各種状況、条件などを掛けあわせた多軸に対して今回の応答時間分布の形が変わる様が想像できれば、取るべき構成は割りと簡単に見えてきたりしたりして。
参考ページ:突然のTwitter砲にもなんとか耐えたさくらVPSに感謝する - As a Futurist...
※2014/01/20 たまたま使う機会があったので、ついでに文章ブラッシュアップ