負荷テスト中のアクセスログを解析する
こんにちは、「負荷テスト中の●●」シリーズでお馴染みの浅見です。
今回の●●は「アクセスログの解析」です。
過去記事はこちらです。
こんなお悩みありませんか?
WEBサーバのアクセスが偏っている気がする。
実際どれくらい偏っているのかを調べようとすると、意外と頭を悩ませることになります。
この記事ではお手軽なシェルを使って、アクセスログから「PVっぽいアクセス件数」と「応答速度」の推移を確認してみます。
なお、アクセスログは、combinedD形式(※)で出力されているものとします。
※combinedログの末尾に処理時間を表す「%D」を付けたものです
# combinedDログ
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combinedD
アクセスログの解析方法
手順は次のとおりです。
- 1. PVっぽいアクセスを抜き出す
- 2. サマリしたい時間リスト取得
- 3. 分単位のアクセス件数および平均応答速度取得
それでは詳細を確認していきます。
PVっぽいアクセスを抜き出す
まずはじめに、アクセスログからPVっぽいアクセスを抜き出します。
「っぽい」と表現したのは、アクセスログからPVを特定することは困難なためです。
ここでは、明らかにPVとは異なる拡張子を持ったファイルへのアクセスを除外していきます。
実際に除外したらファイルの中を目視して不要なものがないかを確認してみるとよいでしょう。
# PVっぽいアクセスを抜き出す
cat access_log|egrep -v "\.svg|\.css|\.js|\.class|\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.ico|\.swf|/js/|\.cur|healthcheck.txt|\.xml">access_log.pv
サマリしたい時間リスト取得
PVっぽいアクセスを抽出したあとは、アクセスログに記録された時間(時分)のリストを作成します。
この時間のリストを使って、後続の分単位の件数取得や平均応答速度の取得を行います。
# 時間リストを作成する
cat access_log.pv |awk -F: '{print $2 ":" $3 ":"}'|sort|uniq|sort -n>time.list
こんな感じでアクセスログから時分のみ抜き出すことが可能です。
# cat time.list
10:33:
10:34:
10:35:
10:36:
10:37:
分単位のアクセス件数および平均応答速度取得
最後に時分ごとに平均応答速度および件数を算出し、結果ファイルへ出力していきます。
# 時間リストごとに平均応答速度と件数を取得する
while read time
do
# 平均応答速度を取得する
responsetime=`grep $time access_log.pv|awk '{m+=$NF} END{print m/NR/1000000;}'`
# 件数を取得する
count=`grep -c $time access_log.pv`
# 結果をファイル出力
echo $time $responsetime $count >> result.txt
done < time.list
結果を確認
次のような結果が出力されたかと思います。
左から「時刻」「平均応答速度」「件数」となります。
# cat result.txt
10:33 0.124048 1454
10:34 0.105191 833
10:35 0.0431748 331
10:36 0.159945 2230
10:37 0.141889 1042
結果はExcel等でグラフ化するとパッと見わかりやすいものにできますのでご自由に加工してみてください。
まとめ
シェルでアクセスログを解析する方法についてまとめてみました。
負荷テストというよりも、実際に運用中のサーバの状態を確認するときに覚えておくと役に立つかもしれません。
PVっぽいアクセスだけでなく、具体的なURLを絞り込んで確認することで特定アクセスの応答推移の確認ができ、全体が遅いのか特定アクセスのみ遅延しているかの切り分けも可能です。
アクセスログは情報の宝庫なので、色々解析してみると面白いと思います。
追伸.負荷テスト中にリアルタイムでログ解析したい場合は、ELKスタックを組んでしまうと便利です
- 東京本社
〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
TEL:03-3591-8887 FAX:03-3591-8886 - 大阪本社
〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
TEL:06-6231-8887 FAX:06-6231-8897
認証範囲はこちらをご覧ください。