WEBサーバなどから出力されるアクセスログ。1リクエスト1行の単位で記録されており、アクセスが多いサイトでは膨大な量になります。目視していただけではなかなか読み解くのが難しいアクセスログですが、実は様々なことを教えてくれます。
この記事では、アクセスログから時系列で情報を取得し可視化する方法を紹介します。最終的にはアクセスログから下図のようなグラフの作成を行います。
アクセスログを時系列でみることのメリット
アクセスログを時系列でみることでアクセス数の推移や、それに伴う平均応答時間の変化をビジュアル的に確認することが可能です。通常時と比較して何倍のアクセスが来たか、平均応答速度はどの程度まで遅くなっているのか、またそれがいつくらいまで続いたかということがわかります。
アクセス数はGoogleAnalyticsなどでも把握することは可能ですが、アクセスログを使うことで、平均応答速度や1秒単位での推移を調べることが可能になります。また、画像や動画などAnalyticsで解析できない静的コンテンツの情報も見ることができるのが大きな特徴です。
時系列で情報を取得する方法
シェルを利用しアクセスログデータを集計
ここではもっとも原始的にシェルを利用して集計していきます。アクセスログの形式は「combinedD」形式を前提としています。標準的に利用されている「combined」形式の場合は平均応答速度の取得はできませんのでご注意ください。
もっと詳しく->ログフォーマットは「combinedD」がおすすめ
シェルを利用しアクセスログを集計し、最終的には次の項目を持ったCSVファイルを出力させます。
- 時刻(%Y:%H:%M)
- 平均応答速度
- ログ件数
利用するシェルは次の通りです。
#/bin/sh
# 入力ファイルになるアクセスログ
ACCESS_LOG='access_log'
# 結果出力用ファイル
RESULT_FILE='timeline.csv'
# 情報取得開始時刻(%H:%M)
BASE_TIME='10:50'
# 情報取得分数
OFFSET_MIN=10
# 以下、一時ファイル
TIME_LIST='tmp_time.list'
ACCESS_LOG_PV='tmp_access_log'
#----------------------
# 静的コンテンツを除外
#----------------------
cat $ACCESS_LOG|egrep -v "\.svg|\.css|\.js|\.class|\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.ico|\.swf|/js/|\.cur|healthcheck.txt|\.xml">$ACCESS_LOG_PV
#----------------------
# 取得対象時間のリストを作成する
#----------------------
date -d $BASE_TIME '+%Y:%H:%M' > $TIME_LIST
for ((i=1; i<$OFFSET_MIN; i++));
do
date -d $BASE_TIME' '$i' minute' '+%Y:%H:%M'>>$TIME_LIST;
done
#----------------------
# 時間リストごとに平均応答速度と件数を取得する
#----------------------
echo "time,responsetime(s),count"> $RESULT_FILE
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_FILE
done < $TIME_LIST
echo $RESULT_FILE
画像やcssなどの静的コンテンツと、phpなどの動的コンテンツを比較すると、次のような違いがあります。
比較 | 静的コンテンツ | 動的コンテンツ |
---|---|---|
件数 | 1ページにつき数十リクエスト | 1ページにつき1リクエスト |
応答速度 | 基本的には高速(サイズが大きいものは低速) | プログラムに大きく依存 |
そのため、上記のシェルでは、静的コンテンツを除外した形で集計をしています。必要に応じて使い分けてください。
Excelでグラフに加工
シェルを実行すると結果ファイルに次のような出力がされます。
「10:51」の平均応答速度は約5秒で35件のアクセスがあったことがわかります。これらの結果をExcelへ転記することでグラフ化が可能です。
2020:10:51,5.0007,35
2020:10:52,5.00044,865
まとめ
膨大なデータとなるアクセスログですが、中身を精査すると様々なことがわかります。
アクセス集中で障害が発生した時などは、アクセスログから時系列に情報を集計してみるとよいのではないでしょうか。
アクセスログを解析したい人は次の記事もおすすめです。